[resolu]HOOK plxMotorGetCategories()

22 mars modifié dans Plugins

bonjour/bonsoir.

j'ai des difficulté a comprendre quels sont les usages de ce hook plxMotorGetCategories() il semble être imbriqué dans une boucle.

Pourtant, je ne vois pas comment je peut ajouter une valeur a tester et retourner dans l'array aCats a partir du hook. si j'ajoute en dur par exemple :

# Recuperation du nom2 de la catégorie

 $this->aCats[$number]['name2']=plxUtils::getValue($values[$iTags['name2'][$i]]['value']);

Cela fonctionne ,

via

# Hook plugins
eval($this->plxPlugins->callHook('plxMotorGetCategories'));

cela ne fonctionne pas,ce qui semble compatible avec le comportement d'eval() dans une boucle et je ne voit pas si il y a une astuce.

La méthode indiquée dans la doc ne fonctionne pas :(en suivant le tuto ici : https://docplayer.fr/68977568-Plugins-guide-du-developpeur.html page 51)

public function plxMotorGetCategories() {
echo "<?php \$this->aCats[\$number]['test'] = isset(\$iTags['test'][\$i])?\$values[\
$iTags['test'][\$i]]['value']:''; ?>";
}

Comme je ne souhaite pas modifier le fichier et que ce que je tente de faire ne peut, a priori, fonctionner, quelle serait la méthode pour modifier cette boucle de la façon la plus économe?

Les plugins chamPlus ou champArt font quelque chose de similaire.


P.S. le script qui enrichi la mise en forme des post est une vrai plaie .... y'a moyen de le désactiver pour qu'il ne bouffe pas la moitié du formulaire et de notre temps ?

Remise en ligne et test de mon vieux site re7net.com . le design et moi on ne sait ... s'est jamais reconnu en fait! mais je fait des efforts.

Réponses

  • bazooka07bazooka07 Member
    18 mars modifié

    Bonjour,

    La documentation pour développer un plugin est visible avec le lien ci-dessous :

    wiki.pluxml.org/developper/developpement/#liste-des-hooks-utilises

    Il y a une erreur dans la doc : Il faut employer le hook __plxAdminEditCategorie__ au lieu de plxAdminEditCategory.

    Voici le code intégral du plugin à sauvegarder dans un fichier nommé categories.php dans le dossier plugins/categories :

    <?php
        if(!defined('PLX_ROOT')) {
            die('Are you silly ?');
        }
    
        class categories extends plxPlugin {
            const HOOKS = array(
                'plxAdminEditCategoriesNew',
                'plxAdminEditCategoriesUpdate',
                'plxAdminEditCategoriesXml',
                'plxMotorGetCategories',
                'plxAdminEditCategorie',
                'AdminCategory',
            );
            const BEGIN_CODE = '<?php' . PHP_EOL;
            const END_CODE = PHP_EOL . '?>';
    
            public function __construct($default_lang) {
                # appel du constructeur de la classe plxPlugin (obligatoire)
                parent::__construct($default_lang);
    
                # Ajoute des hooks
                foreach(self::HOOKS as $hook) {
                    $this->addHook($hook, $hook);
                }
            }
    
            public function plxAdminEditCategoriesNew() {
                echo self::BEGIN_CODE;
    ?>
    $this->aCats[$content['new_catid']]['test'] = '';
    <?php
                echo self::END_CODE;
            }
    
            public function plxAdminEditCategoriesUpdate() {
                echo self::BEGIN_CODE;
    ?>
    $this->aCats[$cat_id]['test'] = isset($this->aCats[$cat_id]['test']) ? $this->aCats[$cat_id]['test'] : '';
    <?php
                echo self::END_CODE;
            }
    
            public function plxAdminEditCategoriesXml() {
                echo self::BEGIN_CODE;
    ?>
        $xml .= '<test><![CDATA[' . plxUtils::cdataCheck($cat['test']) . ']]></test>';
    <?php
                echo self::END_CODE;
            }
    
            public function plxMotorGetCategories() {
                echo self::BEGIN_CODE;
    ?>
    $this->aCats[$number]['test'] = (isset($iTags['test']) and isset($iTags['test'][$i])) ? $values[$iTags['test'][$i]]['value'] : '';
    <?php
                echo self::END_CODE;
            }
    
            public function plxAdminEditCategorie() {
                echo self::BEGIN_CODE;
    ?>
    $this->aCats[$content['id']]['test'] = trim($content['test']);
    <?php
                echo self::END_CODE;
            }
    
            public function AdminCategory() {
    ?>
            <p class="field"><label for="id_test">Test&nbsp;:</label></p>
    <?php
                echo self::BEGIN_CODE;
    ?>
    plxUtils::printInput('test', plxUtils::strCheck($plxAdmin->aCats[$id]['test']),'text', '10-255');
    <?php
                echo self::END_CODE;
            }
    
        }
    
  • Il faut créer également un fichier infos.xml dans le dossier plugins/categories comme ceci

    <?xml version="1.0" encoding="UTF-8"?>
    <document>
       <title>Categories</title>
       <author>Bazooka07</author>
       <version>0.1</version>
       <date>18/03/2021</date>
        <site>https://www.kazimentou.fr</site>
        <repository>https://www.kazimentou.fr/repo/</repository>
       <description>Démo depuis le manuel du développeur</description>
    </document>
    
  • Bonjour, merci beaucoup de ton aide et support..

    effectivement, c'est plus clair.

    En reprenant et en insérant dans mon plugin en test, cela ne fonctionne plus , mais le reste des hook en cours de test fonctionnent toujours, ça vient de mon coté.

    Je vais reprendre de zéro (demain) une fois de plus sans me dispersé ... en me basant sur ton exemple de codage.

    Bon, ce n'est pas le premier truc que je fais qui ne fonctionne pas .Heureusement, nous ne sommes pas seuls ;)


    Cdt

    Remise en ligne et test de mon vieux site re7net.com . le design et moi on ne sait ... s'est jamais reconnu en fait! mais je fait des efforts.

  • 4 avril modifié

    re bonjour/bonsoir,

    je n'ai pas pu m’empêcher de rejeter un œil aux fichiers pour continuer a me familiariser avec les hooks dont dispose PluXml et je m'aperçois que je ne suis pas rendu.

    Je cherche a ajouter des attributs au tag <categorie> pour y avoir accès depuis core/admin/categories.php mais il n'y a pas de hooks dispos pour modifier à la volée l'entête du tableau et les champs des valeurs d'attributs.

    Je ne vois pas comment modifier cette portion uniquement a partir d'un plugin actif. Je ne souhaite pas le faire en dure et retomber dans les travers d'un pluxml patché et incompatible avec les MAJ.

    Je suis retombé sur quelques unes de mes archives patchées et bricolées beta 3 à 4 ... c'est amusant mais ingérable dés la première mise à jour, donc je ne suis pas chaud a me relancer la dedans.

    Sinon, je reprendrais surement mon système de preview js en popup ( [preview]( https://forum.pluxml.org/discussion/432/apercu-en-mode-edition) en live pour les articles , pas encore de statiques à l'époque) utile lorsque l'on dispose de deux écrans.

    Remise en ligne et test de mon vieux site re7net.com . le design et moi on ne sait ... s'est jamais reconnu en fait! mais je fait des efforts.

  • bazooka07bazooka07 Member
    18 mars modifié

    Bonjour,

    Il est plus simple de rajouter une balise enfant à <categorie>.

    Il est possible de rajouter un attribut à <categorie> en recalculant la valeur de $xml avec le hook plxAdminEditCategoriesXml d'une part, et la valeur de $this->aCats[$number] avec le hook plxMotorGetCategories.

    Au final tu arriveras au même résultat. Mais avec quelques cheveux en moins 😀

  • 15 avril modifié

    Oui, tout à fait, c’était là où je faisais mes tests et aprés reflexion, je pense me servir du hook AdminTopMenus avec un truc du genre

    $search = 'categories.php';
    
    foreach($menus as $k=>$v) {
        if(preg_match("/\b$search\b/i", $v)) {
            $menus[$k] = $v;
            $v = str_replace($search, 'plg_categories.php', $v);
            $menus[$k] = $v;
        }
    }
    

    pour y remplacer le fichier categorie.php au lieu de chercher à le modifier.

    ou faire sauté la clé et se servir d'un fichier admin.php mais qui serait repoussé au bas du menu il me semble.

    Cela avance doucement :)


    Cela en est arrivé là,discussion/6932/plugin-categories-meres-filles-suite-dun-precedent-sujet .

    Remise en ligne et test de mon vieux site re7net.com . le design et moi on ne sait ... s'est jamais reconnu en fait! mais je fait des efforts.

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