créer fonction équivalente à plxShow->artTitle depuis un plugin

Bonjour à tous,

Pour un plugin qui intervient au niveau de l'affichage d'un article je souhaite créer un hook qui serait capable de récupérer une valeur contenue dans le fichier xml de l'article. Cette valeur est un chemin d'accès qui a été écrite lors de la rédaction de l'article dans un champ dédié et géré par le plugin.

J'ai pensé utiliser le hook plxShowConstruct pour écrire ce code

 public function plxShowConstruct(){
$string = <<<END
   <?php
     echo "public function artSlide2articles(){";
     echo "echo plxUtils::strCheck(\$this->plxMotor->plxRecord_arts->f('slide2articles_path'));";
     echo "}";
   ?>
END;

   echo $string;
 }

Mais au final ça ne peut par marché puisqu'il est appelé dans le construct. Est-ce que vous avez une idée de comment je pourrais faire ?

J'ai un string de l'array

Mots clés:

Réponses

  • SudwebdesignSudwebdesign Member
    octobre 2019 modifié

    Avec le hook ThemeEndBody c'est peut-être possible...

    Ou avec une funk (hook perso) a appeler ds le fichier du thème

         public function artSlide2articles(){
             echo $this->plxMotor->plxRecord_arts->f('slide2articles_path');# pas sur de ça***
         }
    

    Funk a déclaré ds le constructeur 😉

    class MONPLUGIN extends plxPlugin{
          public $plxMotor;#*** Sauf si est déclaré
          public function __constuct(){
             $this->plxMotor = plxMotor::getInstance();#*** Et instancié
             $this->addHook('artSlide2articles','artSlide2articles');
    ....
          }
    

    @+

    [édit] A appelé avec un $plxShow->callHook('artSlide2articles');
    


    Notre temps est la seule monnaie vraie ;)

    Site, Dépôt, framagit, MyShop, Factux

    #mozinor président

  • flipflipflipflip Member
    octobre 2019 modifié

    Avec quelques petites adaptations :

    class slide2articles extends plxPlugin {
     public $plxMotor;
     public function __construct($default_lang) {
       # appel du constructeur de la classe plxPlugin (obligatoire)
       parent::__construct($default_lang);
       $this->plxMotor = plxMotor::getInstance();#*** Et instancié
       $this->addHook('slide2articlesShow', 'slide2articlesShow');
     }
     public function slide2articlesShow() {
       echo $this->plxMotor->plxRecord_arts->f('slide2articles_path');
     }
    }
    


    Et dans le fichier article.php de mon thème :

         callHook('slide2articlesShow') ?>
    

    J'ai essayé avec

         callHook('slide2articlesShow')) ?>
    

    Mais même résultat, rien ne s'affiche et dans les logs

    [Thu Oct 24 10:18:21.658943 2019] [php7:notice] [pid 860] [client 172.17.0.2:46606] PHP Notice:  Undefined variable: plxMotor in /var/www/html/2.0/plugins/slide2articles/slide2articles.php on line 23, referer: http://xxx/2.0/
    [Thu Oct 24 10:18:21.658973 2019] [php7:notice] [pid 860] [client 172.17.0.2:46606] PHP Notice:  Undefined property: slide2articles::$ in /var/www/html/2.0/plugins/slide2articles/slide2articles.php on line 23, referer: http://xxx/2.0/
    [Thu Oct 24 10:18:21.658985 2019] [php7:notice] [pid 860] [client 172.17.0.2:46606] PHP Notice:  Trying to get property 'plxRecord_arts' of non-object in /var/www/html/2.0/plugins/slide2articles/slide2articles.php on line 23, referer: http://xxx/2.0/
    [Thu Oct 24 10:18:21.659014 2019] [php7:error] [pid 860] [client 172.17.0.2:46606] PHP Fatal error:  Uncaught Error: Call to a member function f() on null in /var/www/html/2.0/plugins/slide2articles/slide2articles.php:23\nStack trace:\n#0 /var/www/html/2.0/core/lib/class.plx.plugins.php(133): slide2articles->slide2articlesShow(NULL)\n#1 /var/www/html/2.0/core/lib/class.plx.show.php(2077): plxPlugins->callHook('slide2articlesS...', NULL)\n#2 /var/www/html/2.0/themes/littlegiant/article.php(5): plxShow->callHook('slide2articlesS...')\n#3 /var/www/html/2.0/index.php(61): include('/var/www/html/2...')\n#4 {main}\n  thrown in /var/www/html/2.0/plugins/slide2articles/slide2articles.php on line 23, referer: http://xxx/2.0/
    

    J'ai un string de l'array

  •  public function slide2articlesShow() {
       $this->plxMotor = plxMotor::getInstance();#*** Et instancié avant
       echo $this->plxMotor->plxRecord_arts->f('slide2articles_path');
     }
    

    Teste avec ça, au cas ou

    plxMotor est indéfini, bizarre (et pour faire bien enlève le du constructeur)

    Notre temps est la seule monnaie vraie ;)

    Site, Dépôt, framagit, MyShop, Factux

    #mozinor président

  • SudwebdesignSudwebdesign Member
    octobre 2019 modifié

    en fait (en regardant adhesion)

    Enlève l’instanciation du constructeur de classe (qui semble ne pas fonctionner)

    et ce que j'ai écris au post précédant (qui doit quant même tourner)

    Et ajoute la fonction (déclare la aussi ds le constructeur)

       public function plxMotorPreChauffageBegin() {
          $this->plxMotor = plxMotor::getInstance();
       }
    

    du coup le

    echo $this->plxMotor->plxRecord_arts->f('slide2articles_path');
    

    de slide2articlesShow() aura le bon $this->plxMotor

    @+

    Notre temps est la seule monnaie vraie ;)

    Site, Dépôt, framagit, MyShop, Factux

    #mozinor président

  • flipflipflipflip Member
    octobre 2019 modifié

    Nikel ça marche maintenant avec ce code

    class slide2articles extends plxPlugin {
    
     public $plxMotor;
     public function __construct($default_lang) {
       # appel du constructeur de la classe plxPlugin (obligatoire)
       parent::__construct($default_lang);
    
       $this->addHook('plxMotorPreChauffageBegin', 'plxMotorPreChauffageBegin');
    
       if(defined('PLX_ADMIN')) {
         $this->addHook('AdminArticleContent', 'AdminArticleContent');
         $this->addHook('AdminArticlePostData', 'AdminArticlePostData');
         $this->addHook('AdminArticleParseData', 'AdminArticleParseData');
         $this->addHook('plxAdminEditArticleXml', 'plxAdminEditArticleXml');
       }
       $this->addHook('plxMotorParseArticle', 'plxMotorParseArticle');
       $this->addHook('slide2articlesShow', 'slide2articlesShow');
     }
    
     public function slide2articlesShow() {
       echo $this->plxMotor->plxRecord_arts->f('slide2articles_path');
     }
    [...]
    


    Merci beaucoup pour ton aide. Je continue mon dev et une fois fini je publie le plugin ;)

    J'ai un string de l'array

  • Funky 😉

    Notre temps est la seule monnaie vraie ;)

    Site, Dépôt, framagit, MyShop, Factux

    #mozinor président

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