thèmes et gestion des plugins

Rédigé par GC-nomade Aucun commentaire

PluXml était à l'origine un tout petit script pour diffuser un blog dans ses fonctions élémentaires et nécessitant un minimum de ressources.

Comme tout CMS, le nombre de ses fonctionnalités à évolué et restreint aux fonctions essentielles ou incontournables. les commentaires, l'URL rewriting, Les pages statiques puis mots clés et archives.

D'autre fonctions, cosmétiques, utiles qui ne peuvent pas être imposées à tous les utilisateurs ont était ajoutées, d'abord , de manière chaotique sur des versions modifiés par de nombreux utilisateurs. La possibilité d’intégrer des plugins s'est alors aussi imposée dans les fonctions essentielles, laissant le choix à chacun de choisir ou de créer ses propres plugins. PluXml est devenu un véritable C.M.S. qui n’était plus confiné au blogging tout en restant léger sans devenir une usine à gaz.

Il y a quelques plugins officiels (contact, recherche pour les premiers) et des centaines de Plugins que de nombreux utilisateur ont partagés, ils ne sont malheureusement pas tous répertoriés aux même endroit et certains d'entre eux sont devenus obsolètes ou abandonné de leur créateurs sans mises à jours. Étonnamment , certains des ses plugins sont toujours fonctionnelles et efficaces. Preuve de la résilience de ce petit CMS , petit seulement par la taille de son code et des ressources qu'il utilise.

Interactions entre thèmes et plugins

Les plugins se divisent en deux(3) types . Ceux fonctionnant en backend (administration du site) et ceux fonctionnant en front-end (coté visiteurs) ou bien sur les deux cotés. Ce sont ceux interagissants coté visiteurs qui nous intéressent.

Comment un plugin intervient-il sur une page

Pour intervenir le plugin doit-être activé et, pour certain, configurés.

Il y a plusieurs méthodes et raisons pour les faire intervenir.

  1. Le plugin utilise un point d'accroche (hook) natif présent dans les fonctions d'affichage de PluXml. Cette fonction est alors modifiée. Tout se passe en arrière plan et ne nécessite aucune intervention sur un thème. Par exemple:
    • la petite boite sous l'article pour le noté.
    • Les plugins plxMyContact et plxMySearch , quand à eux squattent aussi le mode static et génère une nouvelle page
  2. Le plugin créer de nouvelle fonctions d'affichage au travers de nouveaux points d'accroche (hook). ce sont ces point d'accroches qu'il faudra alors insérer dans les thèmes aux endroits choisis pour en bénéficier.
    Par exemple, Le plugin plxMySearch , encore lui, a aussi un point d'accroche qui permet d'afficher, à un endroit précis de vos pages, le formulaire de recherche.La page des résultats s'affiche ensuite.
    1. Jusqu'ici, c'est relativement simple pour le premier point. Le plugin gère tout seul

      Pour le second, si je n'ai aucune notion de codage cela va être mission impossible si je ne trouve pas d'aide sur le forum officiel. Si éditer mon thème n'est pas un problème et en suivant le mode d'emploi du plugin, ce sera l'affaire de quelques minutes.

      Par exemple pour insérer le formulaire du plugin plxMySearch, il suffit d'ajouter son point d'accroche (hook) là ou vous souhaitez qu'il apparaisse: ce code est :

      <?php eval($plxShow->callHook('MySearchForm')) ?>

      Si le plugin est désactivé, ce point d'accroche sera simplement ignoré.

      Comment afficher une structure HTML si tel plugin est activé?

      Dans certains cas, votre thème nécessitera d’insérer l'affichage de votre plugin dans une architecture spécifique, ou vous souhaiter tout simplement mettre un titre ou une icône devant.

      Ce n'est pas un probléme tant que le plugin est actif ou que le thème n'est pas destiné à être utilisé par d'autres utilisateurs.

      Reprenons, toujours par exemple, le formulaire de recherche que l'on veut intégré dans une boite spécifique à un thème .

      Prenons le thème r-c 3. Ce thème embarque dans des boites plusieurs fonctionnalités d'affichage à coté des articles. Il serait donc logique de mettre ce formulaire dans sa boite. Le code serait:

      <div class="sidebox">
              <h3> Rechercher </h3>
              <?php eval($plxShow->callHook('MySearchForm')) ?>
      </div>

      Parfait, mais si je désactive ce plugin, le hook n'affichera plus le formulaire, mais la boite et son titre seront toujours affiché. Ah Zut!

      Conditionner un affichage à la présence d'un plugin.

      Pour cela, il faut interroger PluXml et faire une condition en fonction de la réponse.

      Voici le code génerique à utilisé:

      if (class_exists('plxMySearch')) { /* ici  ce que vous voulez faire */} 

      Pour tester un autre plugin, remplacer plxMySearch (en gardant les apostrophes) par le nom du répertoire de votre plugin et pas le nom qu'il affiche dans l'administration qui peut-être différent.

      Pour notre boite cela donnerait:

      if (class_exists('plxMySearch')) {
      <div class="sidebox">
              <h3> Rechercher </h3>
              <?php eval($plxShow->callHook('MySearchForm')) ?>
      </div>
      } 

      Conditionné l'affichage selon la configuration d'un plugin, est ce possible?

      — Oui, si votre plugin est configurable bien sur.

      Restons fidèle à notre formulaire de recherche et découvrons deux cas de figure qui se déroule en frontend sans que cela soit perceptible par le visiteur.

      Cas de figure invisible

      Certains thème que je propose embarque un script permettant de généré des données structurées à l'attention des moteurs de recherches. L'une de ses données peut déclarer un formulaire de recherche en indiquant sa page et le nom du champ de recherche . Cela ne vaut que pour les formulaire en mode (action) get. Nous avons donc là un cas où un plugin doit être actif et avoir une configuration compatible, deux conditions à tester donc.

      1. Le plugin est-il activé?
      2. Quelle est la valeur de l'un de ses paramètres de configuration?

      Notre test devient :

      if (
         class_exists('plxMySearch')
         && $plxShow->plxMotor->plxPlugins->aPlugins['plxMySearch']->getParam('method') == 'get' ) {
       /* ici  ce que l'ont peut faire dans ces conditions */
      } 

      Ici on compare la valeur d'un paramètre de configuration d'un plugin à la valeur a tester: $plxShow->plxMotor->plxPlugins->aPlugins['plxMySearch']->getParam('method') == 'get'

      Ça c'est pour la théorie, reste une dernière condition à tester, car si ce plugin est efficace, il lui reste un petit défaut. La méthode get entre en conflit avec les modes d'affichages de Pluxml si la réecriture d'URL n'est pas activé.

      Nous avons donc une troisième condition à tester:

      if (
         class_exists('plxMySearch')
         && $plxShow->plxMotor->plxPlugins->aPlugins['plxMySearch']->getParam('method') == 'get'  
         && $plxShow->plxMotor->aConf['urlrewriting']) {
       /* ici  ce que l'ont peut dans faire ces conditions */
      } 

      Cas de figure visible

      Prenons un autre exemple plus concret et visible cette fois-ci, avec le thème pluxshow

      Votre formulaire s'affiche et est bien visible

      vous faites une recherche et arriver sur la page de résultats.

      Selon la configuration de ce plugin le formulaire s'affiche ou non dans cette page au dessus des résultats

      L'auteur de ce plugin effectue un simple test sur la présence du plugin pour afficher le formulaire. Il a pour habitude de configuré ce plugin sans affiché le formulaire de recherche dans la page des résultat. Par défaut, le formulaire s'affiche et si vous ne modifiez pas la configuration, deux formulaires s'affichent trés proche l'un de l'autre.

      Voici le code de ce theme dans le template header.php

      	<?php if ( class_exists('plxMySearch') ) : ?>
      	<div class="site-searchform">
      		<?php eval($plxShow->callHook('MySearchForm')); ?> 
      	</div>
      	<?php endif; ?>
      

      Pour palier à ce défaut visuel si défaut il y a, une solution consiste à tester aussi si nous nous trouvons dans la page de recherche.

      Cette infos est disponible en testant le mode dans lequel se trouve PluXml

      Le plugin , en se greffant à PluXml, ajoute un mode d'affichage et ce mode d'affichage prend le nom de l'url indiqué dans la configuration. Ceci est très pratique et ... multilingue. En français recherche et plus à propos que search.

      Alors , ajoutons une condition à l'affichage! Ce qui donne:

      	<?php if ( class_exists('plxMySearch') && $plxMotor->mode != $plxShow->plxMotor->plxPlugins->aPlugins['plxMySearch']->getParam('url') ) : ?>
      	<div class="site-searchform">
      		<?php eval($plxShow->callHook('MySearchForm')); ?> 
      	</div>
      	<?php endif; ?>

      Nous allons à nouveau regarder dans les paramètres de configuration du plugin.

       if ( 
         class_exists('plxMySearch') 
         && $plxMotor->mode != $plxShow->plxMotor->plxPlugins->aPlugins['plxMySearch']->getParam('url')  
      ) 

      "Si vous trouvez dans ce texte des fautes ou des erreurs, merci de me le signaler."GC-nomade

      2 notes / moyenne 10

Hébergeur bénévole de ressources pour le CMS PluXml, un CMS en flat file propulsé à l'XML.

Mon site PluXml perso : re7net.com.

Laisser votre commentaire

Quelle est le deuxième caractère du mot pv5uw ?

Fil RSS des commentaires de cet article