Ajouter un hook du core dans un plugin

Bonjour,

J'ai réalisé un plugin qui créé un menu vertical avec les pages statiques (la fonction staticList ne me convient pas dans la mise en forme). Le problème est que je perds les hook du core de pluXml. J'ai essayé d'ajouter le hook plxShowStaticListEnd mais j'ai le message suivant :
Parse error: syntax error, unexpected T_STRING in /.../plugins/staticMenu/staticMenu.php(62) : eval()'d code on line 1

Voici la fonction dans la classe de mon plugin
function displayMenu() {
		global $plxMotor;
		
		if($plxMotor->aStats) {
			$menus = array();
			$group_name = '';
			$group = '';
			
			$menus[] = '<ul class="menu vertical">';
			foreach($plxMotor->aStats as $k=>$v) {
				if($v['active'] == 1 AND $v['menu'] == 'oui') {
					if(!empty($v['group']) AND $group_name != $v['group'] AND $v['group'] == $v['name']) {						
						$subMenus = $this->getSubGroup($v['group']);
						if(count($subMenus) > 0) {
						
							$menus[] = '<li class="has-menu"><a href="'.$plxMotor->urlRewrite('?static'.intval($k).'/'.$v['url']).'" title="'.$v['group'].'">'.plxUtils::strCheck($v['group']).'</a>'."\n";
							$menus[] = '<ul>'."\n";
							foreach($subMenus as $i=>$s) {						
								$menus[] = $s['name'];
							}
							$menus[] = '</ul>'."\n";
						}
						$menus[] = '</li>'."\n";
					} elseif(empty($v['group']) AND $v['menu'] == 'oui') {
						$menus[] = '<li><a href="'.$plxMotor->urlRewrite('?static'.intval($k).'/'.$v['url']).'" title="'.plxUtils::strCheck($v['name']).'">'.plxUtils::strCheck($v['name']).'</a>'."\n";
					}
				} 
				
				$group_name = $v['group'];
			}
			
			# Hook Plugins
			if(eval($plxMotor->plxPlugins->callHook('plxShowStaticListEnd'))) return;
			
			$menus[] = '</ul>';
			
			echo implode('', $menus);
		}
	}
La ligne 62 en erreur correspond à
# Hook Plugins
			if(eval($plxMotor->plxPlugins->callHook('plxShowStaticListEnd'))) return;

Dans le plugin plxContact j'ai modifié mais toujours même erreur
public function plxShowStaticListEnd() {

		# ajout du menu pour accèder à la page de contact
		if($this->getParam('mnuDisplay')) {
			echo "<?php \$class = \$plxMotor->mode=='contact'?'active':'noactive'; ?>";
			echo "<?php array_splice(\$menus, ".($this->getParam('mnuPos')-1).", 0, '<li><a class=\"static '.\$class.'\" href=\"'.\$plxMotor->urlRewrite('?contact').'\">".$this->getParam('mnuName')."</a></li>'); ?>";
		}

    }

Au lieu de
public function plxShowStaticListEnd() {

		# ajout du menu pour accèder à la page de contact
		if($this->getParam('mnuDisplay')) {
			echo "<?php \$class = \$this->plxMotor->mode=='contact'?'active':'noactive'; ?>";
			echo "<?php array_splice(\$menus, ".($this->getParam('mnuPos')-1).", 0, '<li><a class=\"static '.\$class.'\" href=\"'.\$this->plxMotor->urlRewrite('?contact').'\">".$this->getParam('mnuName')."</a></li>'); ?>";
		}

    }

J'ai un string de l'array

Réponses

  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour

    Dans la fonction plxShowStaticListEnd que tu as modifié la variable $plxMotor n'est pas définie.
    Elle est utilisée comme une variable avec une portée locale à la fonction.

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Je viens d'essayer ça dans la class de plxMyContact
    public function plxShowStaticListEnd() {
    		# ajout du menu pour accèder à la page de contact
    		if($this->getParam('mnuDisplay')) {
    			echo "<?php global \$plxMotor; ?>";
    			echo "<?php \$class = \$plxMotor->mode=='contact'?'active':'noactive'; ?>";
    			echo "<?php array_splice(\$menus, ".($this->getParam('mnuPos')-1).", 0, '<li><a class=\"static '.\$class.'\" href=\"'.\$plxMotor->urlRewrite('?contact').'\">".$this->getParam('mnuName')."</a></li>'); ?>";
    		}
    
        }
    

    Mais toujours la même erreur, j'ai essayé aussi de mettre en global plxMotor dans la fonction plxShowStaticListEnd de plxMyContact mais pas mieux.

    J'ai un string de l'array

  • StéphaneStéphane Member, Former PluXml Project Manager
    as-tu essayé ceci ?
        public function plxShowStaticListEnd() {
    		# ajout du menu pour accèder à la page de contact
    		if($this->getParam('mnuDisplay')) {
    
    			echo "<?php \$class = \$this->plxMotor->mode=='contact'?'active':'noactive'; ?>";
    			echo "<?php array_splice(\$menus, ".($this->getParam('mnuPos')-1).", 0, '<li><a class=\"static '.\$class.'\" href=\"'.\$this->plxMotor->urlRewrite('?contact').'\">".$this->getParam('mnuName')."</a></li>'); ?>";
    		}
    
        }
    

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • J'ai comme l'impression que c'est la même chose que la fonction d'origine ? ;)

    J'ai un string de l'array

  • StéphaneStéphane Member, Former PluXml Project Manager
    heu oui en effet. et ça donne quoi ?

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Bah forcement ça marche pas
    Parse error: syntax error, unexpected T_STRING in /.../plugins/staticMenu/staticMenu.php(58) : eval()'d code on line 1
    

    Ligne 58
    if(eval($plxMotor->plxPlugins->callHook('plxShowStaticListEnd'))) return;
    

    J'ai un string de l'array

  • flipflipflipflip Member
    août 2013 modifié
    Je viens de tester avec la vers 1.5.3 du plugin est j'ai la même erreur. J'ai fais un autre test, désactiver plxMyContact et l'erreur est toujours présente. En théorie si le plugin est désactivé l'appel du hook ne se fait plus ?

    Est-ce que le problème proviendrait de l'appel du hook dans mon plugin ?

    J'ai un string de l'array

  • StéphaneStéphane Member, Former PluXml Project Manager
    Si le plugin est désactivé les hooks ne sont pas appelés.
    Il faudrait que tu essayes d'isoler la ligne qui génère l'erreur et mettant en commentaire toutes les lignes et en les réactivant une par une pour trouver celle qui pose problème. ça sera plus facile une fois la mauvaise ligne trouvée

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Si c'est mettre en commentaire dans mon plugin je l'ai déjà fais puisque dès que je met la ligne 58 en commentaire le message disparait.

    J'ai un string de l'array

  • Salut, je remonte le sujet pour savoir si t'a une idée stéphane ?

    J'ai un string de l'array

  • StéphaneStéphane Member, Former PluXml Project Manager
    Salut. si tu peux m'envoyer les sources de ton plugin... ça me sera plus facile pour regarder

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Tu peux le télécharger ici : http://blogoflip.fr/staticMenu.zip et pour l'utiliser dans un thème tu utilise le hook displayMenu().

    Il affiche les pages statiques avec la gestion des groupes (menu, sous-menus). il manque juste la possibilité d'appeler un hook (en commentaire dans le code).

    J'ai un string de l'array

Connectez-vous ou Inscrivez-vous pour répondre.