ajout d'un hook sur le théme actif ( ou pas)

mars 2021 modifié dans Plugins

Bonjour/bonsoir,

il y a , selon la doc, 2 hooks sur le thème en cours permettant d’insérer un plugin juste avant les balises de fermetures de head et body. Je souhaitais ajouter un hook sur un autre element du théme et plutôt aussitôt l'ouverture d'une balise sans modifié index.php et en faisant usage du hook IndexEnd.

j'ai donc procédé comme suis sur l'architecture de base d'un plugin de la doc: $this->addHook('IndexEnd', 'IndexEnd'); avec la fonction suivante :

 public function IndexEnd() {

      $prependToTag =$this->aParams['param1']['value'];   

      echo '<?php ';?>

         ob_start();

         eval($plxMotor->plxPlugins->callHook('ThemeTopArt')); # Hook Plugins 

         $output = str_replace('<?php echo $prependToTag; ?>', ob_get_clean(), $output);

   ?><?php


}

  

Ce qui implique via config.php du plugin d'indiquer le tag ciblé tel qu'il apparait dans les fichiers template du théme. .

Cela fonctionne, mais

  • est ce la bonne méthode pour ajouter un hook a site.com/index.php ?
  • Si j'ai plusieurs balise identiques à $prependToTag, le plugin se trouve inséré autant de fois qu'il y a d’occurrences, si aucune occurrence ne sont trouvées, alors tout semble être okay et ne pas généré d'erreurs . Comment puis je limité ce hook à la première occurrence?.

Mon plugin en test, nommé hookMyTagTheme est composé de 3 fichiers:

fichier hookMyTagTheme.php :

<?php
  class hookMyTagtheme extends plxPlugin {      
    public function __construct($default_lang) {
        # appel du constructeur de la classe plxPlugin (obligatoire)
        parent::__construct($default_lang);
            
        # déclaration des hooks        
        $this->addHook('IndexEnd', 'IndexEnd');
        $this->addHook('ThemeTopArt', 'ThemeTopArt');
        
        # droits pour accèder à la page config.php du plugin
        $this->setConfigProfil(PROFIL_ADMIN);    
    }
        
    public function IndexEnd() {
        $prependToTag =$this->aParams['param1']['value'];    
        echo '<?php ';?>
            ob_start();
            eval($plxMotor->plxPlugins->callHook('ThemeTopArt')); # Hook Plugins  
            $output = str_replace('<?php echo $prependToTag; ?>', ob_get_clean(), $output);
     ?><?php    
    }
        

    public function ThemeTopArt() {
    echo    $this->aParams['param2']['value'];    
    }
        

        
  }
?>

le fichier config.php

<?php if(!defined('PLX_ROOT')) exit;

# Control du token du formulaire
plxToken::validateFormToken($_POST);

    if(!empty($_POST)) {
        $plxPlugin->setParam('param1', $_POST['param1'], 'cdata');
        $plxPlugin->setParam('param2', $_POST['param2'], 'cdata');
        $plxPlugin->saveParams();
    header('Location: parametres_plugin.php?p='.$plugin);
    exit;
    }
?>

<style>
form {
    display:grid;
    grid-template-columns:auto 1fr;
}
textarea {
    min-width: 80%;
}
</style>
<form action="parametres_plugin.php?p=<?php echo $plugin ?>" method="post">
    <label>tag à cibler :</label>
    <?php plxUtils::printArea('param1',plxUtils::strCheck($plxPlugin->getParam('param1')),0,8); ?>
    
    <label>ajout au tag cibler :</label>     
    <?php plxUtils::printArea('param2',plxUtils::strCheck($plxPlugin->getParam('param2')),0,8);
    
    echo plxToken::getTokenPostMethod();?>
    
    <input type="submit" name="submit" value="Enregistrer" />
</form>


et le fichier infos.xml

<?xml version="1.0" encoding="UTF-8"?>
<document>
    <title><![CDATA[hookMyTagTheme]]></title>
    <author><![CDATA[GCyrillus-nomade]]></author>
    <version>1.0</version>
    <date>16/03/2021</date>
    <site>http://re7net.com</site>
    <description><![CDATA[test hook sur structure HTML theme actif]]></description>
    <scope>site</scope>
</document>


L'idée est ensuite de pouvoir remplacer/modifier un morceau du theme.

par exemple :

<h3><?php $plxShow->lang('CATEGORIES'); ?></h3>

        <ul class="cat-list unstyled-list">
            <?php $plxShow->catList('','<li id="#cat_id"><a class="#cat_status" href="#cat_url" title="#cat_name">#cat_name</a> (#art_nb)</li>'); ?>
        </ul>

Si PluXml offres la possibilité d'inclure/exclure une ou plusieurs catégorie, il ne permet pas de filtrer les catégories afficher dans la sidebar en fonction des catégories auxquelles sont rattachés les articles.

Ce que je peut faire :

Si je filtre une catégorie, les derniers articles s'affichent et dans la sidebar, les liens vers toutes les catégories activent s'affichent.

Je peut rattaché un article à plusieurs catégories.

Mais Je ne peut pas filtré dans la sidebar uniquement les catégories auxquelles mes articles, de cette première catégorie filtrée, sont éventuellement aussi rattachés.

options possible auxquelles je pense :

  • ne pas afficher les liens des autres catégories. (comme ça c'est clair)
  • filtré via catList() , les catégories que je veux inclure ou exclure (... à la main et à mettre à jour au fil du temps)
  • Les tags ?heu non, ce ne sont pas des catégories et peuvent se multiplié au fil du temps et ont un autre rôles.
  • faire un systéme de multi-blog , là c'est sur c'est cloisonner mais 1 PluXml et son administration par séries de catégories.
  • tenter un plugin et réécrire les tag <catégorie> en y ajoutant 2 attributs mother et daughter_of pour filtrer certaines catégories si un filtre est posé sur une catégorie mother à l'appel de la page.

Cette dernière option me semble le bon compromis a mi-chemin entre l'actuel fonctionnement de PluXml et un multi-blog.


Merci de m'avoir lu jusqu'ici et bien vouloir m'orienter, n'ayant pas l'âme ni les compétences d'un développeur.


P.S. je ne m'etait plus servi de PluXml depuis la version beta4 , et la difference est phénoménale.


Cordialement,
gcyrillus

Mon site PluXml: https://re7net.com | Plugins: https://ressources.pluxopolis.net/banque-plugins/index.php?all_versions | demos sur free http://gcyrillus.free.fr/new | Thèmes: tester et télécharger @ https://pluxthemes.com
Indiquez [RESOLU] dans le titre de votre question une fois le soucis réglè, Merci

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