Evaluer le retour d'un hook dans un plugin

Bonsoir,

Il y à quelque chose que je ne comprend pas, dans l'evaluation du code retour d'un hook dans un plugin.
Exemple:
class maClass extends plxPlugin {

         public function __construct($default_lang) {

                 $this->addHook('My','My');
         }

       public function My(){
           echo '<?php return true; ?>';
      }
}
Ensuite dans le theme, j'appel le hook de la façon suivante:
<?php if( eval($plxShow->callHook('My')) ) echo "Hello"; ?>
et bien j'obtiens jamais le "Hello". Je comprend pas.

J'ai manqué quelque chose ?

Merci pour votre aide.

Réponses

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

    Faire un return true; interrompt l'instruction eval. Donc tout le code qui suit n'est pas exécuté. (cf la doc des plugins).

    Pour info, une des grosses évolutions de la prochaine version de PluXml (la 5.1.4) sera la possibilité de passer des paramètres aux hooks et/ou de récupérer une valeur de retour.

    Consultant PluXml

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

  • C'est bon ça Stéphane !!!
    Ca va faciliter certains trucs de passer des paramètres :D
  • Stéphane a écrit:
    Bonjour

    Faire un return true; interrompt l'instruction eval. Donc tout le code qui suit n'est pas exécuté. (cf la doc des plugins).

    Pour info, une des grosses évolutions de la prochaine version de PluXml (la 5.1.4) sera la possibilité de passer des paramètres aux hooks et/ou de récupérer une valeur de retour.
    Bonjour stéphane,

    Je pensais que l'interruption venait du return que tu faisais dans le "if"
    if(eval($plxShow->callHook())) return;
    
    Mais visiblement non. Comprend pas tout à cette fonction eval() moi. Donc dans l'immediat, j'ai pas vraiment moyen de tester un etat de retour true/false d'un hook.

    Je vais sans doute attendre la 5.1.4

    Merci.
  • Tu peux essayer de tester la valeur renvoyer directement dans le thème en mettant le callhook en false. ;)

    Genre :
    <?php if($plxShow->callHook('ton_nom',false)==''): echo '0.8';
    						  else: $plxShow->callHook(ton_nom');
    						  endif;?>
    
  • Merci,

    Mais avec ça je dépend de l'affichage dans mon hook. Et il se trouve que j'aurais pas forcément d'affichage dans cette fonction. J'ai trouvé un autre subterfuge. C'est pas idéal, mais en attendant ça marche.
    <?php global $yes; $plxShow->callHook('My'); if(!$yes) { echo 'Hello';} ?>
    
    Je set la valeur de $yes à true/false dans ma fonction My.
    Ce sera plus propre dans la version 5.1.4
Connectez-vous ou Inscrivez-vous pour répondre.