Как переопределить структуру МВК компонента в ядре системы Joomla!
From Joomla! Documentation
Contents
ПРИМЕЧАНИЕ
Этот метод действует только если Вы установите и включите сторонний МВК плагин "joomla-override", который можно найти в GitHub или примените свой собственный его эквивалент. Это подходит для опытных разработчиков, просто имейте в виду что этот [плагин] не входит в [состав] ядра [системы] Joomla!.
There is currently no plugin available that can help you. So you will need to write your own plug-in which is not trivial. This documentation should probably be removed.
Резюме
Иногда возникает необходимость, когда Вам нужно переопределить МВК компонент [системы] Joomla! чтобы добавить новый функционал или чтобы полностью индивидуально подстроить этот компонент. МВК компонент может быть полностью переопределен использованием тех же названий классов, которые используются в этом компоненте. Это достигается загрузкой какого-либо системного плагина прежде чем приложение отправляет этот компонент.
Для выполнения этого Вы можете создать свой собственный плагин.
class plgSystemComContentOverride extends JPlugin {
public function __construct(&$subject, $config = array()) {
parent::__construct($subject, $config);
}
public function onAfterRoute() {
$app = JFactory::getApplication();
if('com_content' == JRequest::getCMD('option') && !$app->isAdmin()) {
require_once(dirname(__FILE__) . '/comcontentoverride/my_content_controller.php');
}
}
}
Another alternative is a modern plugin MVC Override which uses similar (but a little changed) logic and is much improved. MVC Override implements this tutorial approach but has wider possibilities. (At least by 2016-08-04 it's not listed at JED)
Смелое начало переопределений
Вы можете переопределять шаблонизацией или размером приложения (передняя часть/административная часть)
Использование метода шаблонизации
Переопределите контроллер главного компонента
TEMPLATE_NAME/code/COMPONENT_NAME/CONTROLLER.php
Переопределите контроллер другого компонента
TEMPLATE_NAME/code/COMPONENT_NAME/controllers/CONTROLLER_NAME.php
Переопределите модели
TEMPLATE_NAME/code/COMPONENT_NAME/models/MODEL_NAME.php
Переопределите виды
TEMPLATE_NAME/code/COMPONENT_NAME/views/VIEW_NAME/VIEW_NAME(.FORMAT).php
Использование метода размера приложения
Вы можете переопределить создавая папку code
в главном пути приложения.
Примечание: этот метод эксперементален. Прочитайте, пожалуйста, https://groups.google.com/forum/?fromgroups=#!searchin/joomla-dev-cms/override/joomla-dev-cms/_vVxbHsXm20/JdsBRP8xrPAJ и это http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&tracker_item_id=29031
Общее переопределение веб-сайта
code/COMPONENT_NAME/CONTROLLER.php
Переопределите контроллер другого компонента
code/COMPONENT_NAME/controllers/CONTROLLER_NAME.php
Переопределите модели
code/COMPONENT_NAME/models/MODEL_NAME.php
Переопределите виды
code/COMPONENT_NAME/views/VIEW_NAME/VIEW_NAME(.FORMAT).php
Общее переопределение администратора
administrator/code/COMPONENT_NAME/CONTROLLER.php
Переопределите контроллер другого компонента
administrator/code/COMPONENT_NAME/controllers/CONTROLLER_NAME.php
Переопределите модели
administrator/code/COMPONENT_NAME/models/MODEL_NAME.php
Переопределите виды
administrator/code/COMPONENT_NAME/views/VIEW_NAME/VIEW_NAME(.FORMAT).php
Расширение класса по умолчанию
если Вы включите функционал переопределения класса, то Вы можете расширить классы и переопределить свои произвольные методы.
Познакомтесь с этим примером с контроллером баннера.
файл: administrator/code/com_banners/controller.php
/** * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ // No direct access defined('_JEXEC') or die; /** * Banners master display controller. * * @package Joomla.Administrator * @subpackage com_banners * @since 1.6 */ class BannersController extends BannersControllerDefault { //your custom methods here }