Cómo reemplazar el componente mvc del núcleo de Joomla!

From Joomla! Documentation

This page is a translated version of the page How to override the component mvc from the Joomla! core and the translation is 100% complete.

Other languages:
English • ‎español • ‎français • ‎русский

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!

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
}