[Résolu] Tester l'existence d'un plugin ?

erxyzerxyz Member
février 2022 modifié dans Plugins

Bonjour toutes et tous.

Retour sur PluXml avec un nouveau compte (oubli des anciens identifiants).

Question simple : comment tester dans un fichier du thème si un plugin (par exemple plsMySearch) est activé ?

Un truc du genre : if (plugin machin activé) : affichage ceci else : affichage cela endif;

Merci ! :)

Réponses

  • Après quelques "bidouilles", j'ai ça qui fonctionne :

    <?php if ($plxShow->callHook('MySearchForm') == true) : ?>
    <p>affichage html</p>
    <?php endif; ?>
    

    Mais est-ce correct ? (Je ne suis pas développeur)

    Merci.

  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    février 2022 modifié

    Bonjour,
    Tu ne testes pas la présence d'un plugin, mais juste si un hook est utilisé.
    Et quand on explore le code PHP de PluXml, rien n'empêche à un plugin d'avoir un hook qui renvoie false.
    Admettons que tu veux vérifier si le plugin MonPlugin est activé, il y a 2 méthodes pour le vérifier :

    • "A la PluXml", on teste la valeur suivante : isset($plxShow->plxMotor->plxPlugins->aPlugins['MonPlugin']). Renvoie false si le plugin MonPlugin n'est pas activé ou installé.
    • PluXml impose que le plugin MonPlugin a obligatoirement une class MonPlugin. En utilisant une fonction de PHP, on teste l'existence de cette class : class_exists['MonPlugin'] renvoie false si la class n'existe pas et on en déduit que le plugin n'est pas actif.
  • Merci pour ta réponse mais je ne comprends pas vraiment tes explications... :(

  • février 2022 modifié

    Bonjour,
    Il te propose deux façon de savoir si le plugin est actif ou non.
    La plus simple à mon humble avis est celle qui teste si le plugin est présent.
    Un plugin est une classe étendue de la class plxPlugin , si le plugin est activé, alors une classe au nom de ton plugin est présente/accessible et comme PluXml est bien fait, le non de classe est celui du répertoire du plugin (et de son fichier php du même nom), difficile alors de se tromper sur la classe que l'on cherche .
    Pour savoir si plxMySearch est là, on regarde si une classe du même nom existe.
    exemples à partir d'un fichier du thème.

    if (class_exists('plxMySearch')) { /* on fait un truc avec le plugin, affiche un formulaire ou autre */}
    else {/* plugin pas là, on fait autre chose ou rien */}
    

    L'autre façon est de chercher si ton plugin est actif dans le tableau aPlugins.

     if(isset($plxShow->plxMotor->plxPlugins->aPlugins['plxMySearch'])) {/* on fait un truc avec le plugin, affiche un formulaire ou autre */}
    else {/* plugin pas là, on fait autre chose ou rien */}
    
    

    Le tableau aPlugins contient toutes les infos des plugins actifs : le nom du plugin, le nom de son fichier où est la class, le chemin de son fichier de configuration, les hooks qu'il utilise, les valeurs des champs de configuration si il y en as, etc. Tu as là une petite mine d'informations.


    Mauvaise idée: Tu peut aussi allez voir dans le fichier /data/configuration/plugins.xml si il est lister, mais au risque qu'il y ait un soucis avec le plugin (répertoire effacé , fichier corrompue ou une maj ratée,...) sans que tu sois passer par l'admin pour mettre à jour la liste des plugins actifs ou non. La mise à jour de ce fichier est manuelle, si un défaut existe avec un plugin, il ne se met pas à jour automatiquement et ce n'est pas parce qu’il figure dans la liste qu'il est forcement disponible.

    cdt


    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

  • C'est plus clair.
    Merci d'avoir pris le temps de détailler. :)

    Du coup, j'ai opté pour "class_exists", y'a moins de choses bizarres à écrire donc moins d'erreurs potentielles ! :)

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