Cómo reemplazar el componente mvc del núcleo de Joomla!
From Joomla! Documentation
Contents
AVISO
Este método sólo funciona si se instala y habilita el MVC plugin joomla-overrride de 3ª parte que se encuentra en github o proporciona su propio plugin equivalente. Es bueno para los desarrolladores avanzados - ser conscientes de que esto no es parte del Código del núcleo de Joomla!
Actualmente no hay ningún complemento disponible que pueda ayudarte. Por lo tanto, deberás escribir tu propio complemento lo que no es trivial. Esta documentación probablemente debería eliminarse .
Sumario
Puede haber ocasiones en que necesitas reemplazar el componente MVC de Joomla! para agregar una nueva funcionalidad o para personalizar completamente el componente. El componente MVC puede ser reemplazado con el uso de la misma clase de nombres que se utilizan en el componente. Esto se logra mediante la carga de un plugin del sistema antes que el componente se distribuya por la aplicación.
Puedes crear tu propio plugin para hacer esto.
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');
}
}
}
En los ejemplos de abajo estamos utilizando un Override Plugin para MVC (Al menos para el 2016-08-04 no publicado en JED y no disponible)
Otra alternativa es un complemento moderno MVC Override que utiliza una lógica similar (pero un poco modificada) y está muy mejorado. MVC Override implementa el enfoque de este tutorial pero tiene posibilidades más amplias. (Al menos para el 2016-08-04 no está listado en JED)
Obtener una ventaja inicial con reemplazos
Se puede reemplazar por plantillas o ámbito de aplicación (lado cliente/lado servidor).
Usar un método de plantilla
Reemplazar el Componente Base del Controlador
TEMPLATE_NAME/code/COMPONENT_NAME/CONTROLLER.php
Reemplazar otro Controlador del Componente
TEMPLATE_NAME/code/COMPONENT_NAME/controllers/CONTROLLER_NAME.php
Reemplazar los Modelos
TEMPLATE_NAME/code/COMPONENT_NAME/models/MODEL_NAME.php
Reemplazar las Vistas
TEMPLATE_NAME/code/COMPONENT_NAME/views/VIEW_NAME/VIEW_NAME(.FORMAT).php
Usando el método ámbito de la aplicación
Se puede reemplazar mediante la creación de una carpeta code
en la ruta base de acceso de la aplicación.
"'Nota"': este método es experimental. Por favor, lee esto https://groups.google.com/forum/?fromgroups=#!searchin/joomla-dev-cms/override/joomla-dev-cms/_vVxbHsXm20/JdsBRP8xrPAJ y esto primero http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&tracker_item_id=29031
Reemplazo General del Sitio
code/COMPONENT_NAME/CONTROLLER.php
Reemplazar otro Controlador del Componente
code/COMPONENT_NAME/controllers/CONTROLLER_NAME.php
Reemplazar los Modelos
code/COMPONENT_NAME/models/MODEL_NAME.php
Reemplazar las Vistas
code/COMPONENT_NAME/views/VIEW_NAME/VIEW_NAME(.FORMAT).php
Reemplazo General del Administrador
administrator/code/COMPONENT_NAME/CONTROLLER.php
Reemplazar otro Controlador del Componente
administrator/code/COMPONENT_NAME/controllers/CONTROLLER_NAME.php
Reemplazar los Modelos
administrator/code/COMPONENT_NAME/models/MODEL_NAME.php
Reemplazar las Vistas
administrator/code/COMPONENT_NAME/views/VIEW_NAME/VIEW_NAME(.FORMAT).php
Extender las Clases Predeterminadas
si HABILITAS la funcionalidad reemplazar las clases puedes extender las clases originales y reemplazar los métodos con los tuyos personalizados.
Ver este ejemplo con controlador el controlador de avisos:
archivo: 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 }