Comment substituer le composant mvc du noyau 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 • ‎русский

AVERTISSEMENT

Cette méthode fonctionne uniquement si vous installez et activez l'extension tierce : plugin pour override de Joomla! disponible sur GitHub - ou un plugin équivalent de votre conception. Ceci s'adresse donc aux développeurs avancés. Soyez juste conscient que ceci ne fait pas partie du noyau Joomla.

Résumé

Il peut arriver de souhaiter surcharger le Composant MVC Joomla! afin d'ajouter de nouvelles fonctionnalités ou pour personnaliser en profondeur le composant. Le composant MVC peut être complètement surchargé en utilisant les mêmes noms de classe utilisés par le composant. Ceci peut être réalisé par le chargement d'un plugin système avant que le composant soit traité par l'application.

Pour ce faire, vous pouvez créer votre propre plugin.

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');
         }
     } 
}



Dans les exemples ci-dessous, nous utiliserons une substitution de plugin MVC plugin (Au moins jusqu'au 04/08/2016, dépublié sur le JED et non disponible)

Une autre alternative est le plugin moderne MVC Override qui utilise une logique similaire (mais avec quelques petits changements) et est amélioré. MVC Override implémente l'approche de ce didacticiel mais avec de plus vastes possibilités. (au 04-082016, il n'est pas répertorié sur le JED)



Ayez une longueur d'avance avec les substitutions

Vous pouvez substituer par le template ou par l'application (frontend/backend).

La méthode par le template

Substituer le contrôleur de base du composant.

TEMPLATE_NAME/code/COMPONENT_NAME/CONTROLLER.php

Substituer un autre contrôleur du composant.

TEMPLATE_NAME/code/COMPONENT_NAME/controllers/CONTROLLER_NAME.php

Substituer les modèles.

TEMPLATE_NAME/code/COMPONENT_NAME/models/MODEL_NAME.php

Substituer les vues.

TEMPLATE_NAME/code/COMPONENT_NAME/views/VIEW_NAME/VIEW_NAME(.FORMAT).php

La méthode par l'application

Vous pouvez créer une substitution en créant un répertoire code pour le chemin d'accès de base de l'application.

Attention : cette méthode est expérimentale. Veuillez lire ceci : https://groups.google.com/forum/?fromgroups=#!searchin/joomla-dev-cms/override/joomla-dev-cms/_vVxbHsXm20/JdsBRP8xrPAJ et ceci : http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&tracker_item_id=29031

Substitution générale de site

code/COMPONENT_NAME/CONTROLLER.php

Substituer un autre contrôleur du composant.

code/COMPONENT_NAME/controllers/CONTROLLER_NAME.php

Substituer les modèles.

code/COMPONENT_NAME/models/MODEL_NAME.php

Substituer les vues.

code/COMPONENT_NAME/views/VIEW_NAME/VIEW_NAME(.FORMAT).php

Substitution de l'administration générale

administrator/code/COMPONENT_NAME/CONTROLLER.php

Substituer un autre contrôleur du composant.

administrator/code/COMPONENT_NAME/controllers/CONTROLLER_NAME.php

Substituer les modèles.

administrator/code/COMPONENT_NAME/models/MODEL_NAME.php

Substituer les vues.

administrator/code/COMPONENT_NAME/views/VIEW_NAME/VIEW_NAME(.FORMAT).php

Étendre les classes par défaut

Si vous ACTIVEZ la classe de la fonctionnalité de substitution, vous pouvez étendre les classes d'origine et les remplacer par vos méthodes personnalisées.

Voici l'exemple avec le contrôleur du composant Bannières :

fichier : 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
}