web-dev-qa-db-fra.com

Joomla 3 plugin pour remplacer la classe JMenuSite

J'essaie de remplacer une classe JMenuSite dans libraries/cms/menu/site.php. J'ai créé un système de plugin jmenusite.php

<?php
defined( '_JEXEC' ) or die( 'Restricted access' );

class plgSystemJmenusite extends JPlugin{

    public function  onAfterRoute () {
        require_once(JPATH_SITE.'/plugins/system/jmenusite/site.php');
    }
}
?>

J'ai copié les fichiers site.php dans le dossier du plugin.

Joomla effectue la classe d'origine et me donne ensuite l'erreur:

 Fatal error: Cannot redeclare class JMenuSite

Comment puis-je remplacer la classe existante?

1
user2802368

l’événement onAfterRoute n’est pas celui qui fonctionnera pour votre scénario. Comme la classe JMenuSite est chargée avant que cet événement ne soit déclenché.

Pour ce faire, vous devez utiliser l'événement onAfterInitialise.

Remarque importante: Avec Joomla 3.4, le code principal a été modifié car il ne sera pas possible de remplacer cette classe dans le cas où plug-in de filtrage de langue est activé. Comme Joomla charge intentionnellement ce plugin pour appliquer une gestion spécifique à la langue, ce plugin chargera la classe JMenuSite avant le déclenchement de tout événement.

1
Nick