Comment substituer le composant mvc du noyau Joomla!
From Joomla! Documentation
Contents
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.
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.
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 }