Tout savoir pour devenir un pro de PluXml, mais pas seulement...

faire d'un script un plugin


Rédigé par gccyrillus le 2 commentairese

La plupart des plugins n'ajoutent qu'une fonctionnalité ponctuellement utile.

D'autres, intègrent de véritables applications.

Leur point communs?

Pour qu'il soient pleinement fonctionnels ils doivent être greffés aux fonctions natives, ou ajoutés à PluXml.

La créations d'un plugin est souvent chronophage et particulièrement lorsqu'il s'agit d’implémenter un simple script .

Chacun est tenter de modifier à un ou quelques endroits le code de PluXml pour y glisser rapidement cette nouvelle fonctionnalité.Mais il s’avère que c'est une mauvaise idée. Les versions de PHP qui évoluent en permanence, nécessiteront très souvent une remise à niveau du script , et Les mises à jour de PluXml élimineront toutes les modifications effectuées au sein du code contrairement à un plugin, qui n'aura pas forcément besoin d'une mise à niveau, ni pour les mêmes raisons que PluXml.

le pourquoi d'un plugin

L'installation d'un plugin est de beaucoup, plus perenne, que l'inclusion manuel d'un script., il n' y a pas à en douter

Le plugin ne demande pas à l'utilisateur d'avoir des compétences de développeur ni une expertise sur le code de PluXml. Tout au plus si c'est la première fois, la capacité d'activer un plugin pour ceux gérant leur CMS en autonomie complète...

Si vous avez installer vous même PluXml, l'installation et l'activation d'un plugin est tout aussi simple !.

Reprenons un script en exemple:

Voyons comment integrer le script commentaires dans une page statique en un plugin avec le confort d'une page de configuration.

Cette article est pour démontrer !, qu’une fois le plugin réalisé, l'utilisateur n'aura pas à savoir coder pour ajouter cette fonction à toute les pages statiquestelle ou telle page statique ni pour régler les options d'affichages.

Préparons le dossier de notre projet de plugin.

Pour cela , ils nous faut un nouveau dossier dans le répertoire plugins de PluXml. Nommons ce dossier : MonPlugin.

Dans ce dossier ajoutons deux fichiers vides, l'un nommé MonPlugin.php (même nom que le dossier, c'est obligatoire.) et infos.xml.

Remplissons tout de suite le fichier infos.xml qui décrit votre plugin et l'identifie dans l'administration avec le code suivant:

<?xml version="1.0" encoding="UTF-8"?>
	<document>
	<title><![CDATA[mon plugin]]></title>
	<author><![CDATA[G.Cyrille]]></author>
	<version>1</version>
	<date>01/01/1980</date>
	<site>https://pluxopolis.net</site>
	<description><![CDATA[Ajoute aux pages statiques le module commentaires de PluXml.]]></description>
	<scope></scope>
	</document>

Enregistrons et passons à la suite.

le Hook central

Il n'y a qu'un seul script à intégrer et nous pouvons facilement identifier le Hook qui va injecter ce script au bon endroit.

Cet endroit est juste après le contenu de la page, recherchons la fonction qui extrait ce contenu .Nous la trouvons dans le fichier du theme static.php et c'est : $plxShow->staticContent();.

Regardons maintenant cette fonction dans le fichier core/lib/class.plx.show.php si elle dispose d'un Hook :

   /**
     * Méthode qui inclut le code source de la page statique
     *
     * @scope    static
     * @author    Florent MONTHEL, Stephane F
     **/
    public function staticContent()
    {

        if (eval($this->plxMotor->plxPlugins->callHook("plxShowStaticContentBegin"))) return;

        # On va verifier que la page a inclure est lisible
        if ($this->plxMotor->aStats[$this->plxMotor->cible]['readable'] == 1) {
            # On genere le nom du fichier a inclure
            $file = PLX_ROOT . $this->plxMotor->aConf['racine_statiques'] . $this->plxMotor->cible;
            $file .= '.' . $this->plxMotor->aStats[$this->plxMotor->cible]['url'] . '.php';
            # Inclusion du fichier
            ob_start();
            require $file;
            $output = ob_get_clean();
            eval($this->plxMotor->plxPlugins->callHook('plxShowStaticContent'));
            echo $output;
        } else {
            echo '

' . L_STATICCONTENT_INPROCESS . '

'; } }

Cette fonction dispose de deux entrées ou appels identifiable apr cet syntaxe: eval(/* appel du hook par son nom*/).

Ici, c'est le deuxième qui nous intéresse eval($this->plxMotor->plxPlugins->callHook('plxShowStaticContent'));. C'est à partir du hook plxShowStaticContent que l'on pourra injecter le script dans la page statique.

Note, un listing de tous les hooks disponibles est ici : liste des hooks.

l'assemblage

chaque plugin se construit sur une structure de base identique à laquelle on ajoute les hooks et autres fonctionnalités optionnelles.

Voici le code minimal d'un plugin :

<?php  if(!defined('PLX_ROOT')) exit;
class monPlugin extends plxPlugin {
 
    public function __construct($default_lang){
    # Appel du constructeur de la classe plxPlugin (obligatoire)
    parent::__construct($default_lang);

    # Déclaration des hooks
}

Nous avons le script et le hook d'entrée, il ne reste qu'a assembler les deux et les ajouter à la base , et toutes nos pages statiques pourront bénéficier d'un module de commentaires.

Declarons le hook et ajoutons la fonction du hook

<?php  if(!defined('PLX_ROOT')) exit;
class monPlugin 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('plxShowStaticContent', 'plxShowStaticContent');
    } 
    
	# methode qui modifie la fonction $plxShow->staticContent())
    public function plxShowStaticContent() { 		
		# insertion des commentaires et formulaire			
		echo '<?php';
		?> 
               // ici le code à injecter et à interpréter dans la fonction staticContent()
		<?php
		echo'?>';
    }
}
Pour injecter et ajouter ce code dans la page statique, nous allons suivre la méthode utiliser dans la fonction qui fait déjà quelque chose de similaire en injectant le contenu de la page statique, il suffit de reproduire cette méthode

            # Inclusion du fichier
            ob_start();
            require $file;
            $output = ob_get_clean();
            eval($this->plxMotor->plxPlugins->callHook('plxShowStaticContent'));
            echo $output;

L'injection de notre script va se produire juste avant echo $output;, nous devons donc inclure le script dans echo $output;.

Pour simplifier la lecture du code et facilement mettre à jour notre script, nous sauvegardons le script dans un fichier externe, c'est lui que nous allons inclure.

Ce qui donne en copiant le fonctionnement de la fonction staticContent().

<?php  if(!defined('PLX_ROOT')) exit;
class MonPlugin 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('plxShowStaticContent', 'plxShowStaticContent');
    } 
    
	# methode qui modifie la fonction $plxShow->staticContent())
    public function plxShowStaticContent() { 		
		# insertion des commentaires et formulaire			
		echo '<?php';
		?>   
		ob_start();
		include( PLX_PLUGINS.'MonPlugin/include.commentaire.php');
		$output .= ob_get_clean();
		<?php
		echo'?>';
     
    }
}

Il suffit maintenant de créer un troisième fichier vide , appeler include.commentaire.php et de coller à l'intérieur le script commentaires dans une page statique. enregistrer ce fichier dans le répertoire de votre nouveau plugin.

Il ne reste plus qu'a activé le plugin pour voir toutes vos pages statiques dotées d'un module de commentaires.

C'est pas si compliqué!

PluXml à tout prévu pour laisser à chacun la possibilité de modifier son fonctionnement en l’agrémentant de diverses fonctionnalités sans avoir à toucher au cœur même de PluXml.

Nous venons juste de voir l'injection d'un seul script, mais l'on peut faire beaucoup plus.


Code disponible sur github @ https://github.com/gcyrillus/MonPlugin.


DClassé dans : Programmation, Plugin ,Mots clés : Programmation, Plugins, Tutoriels

A propos de l'auteur, gccyrillus:

Gccyrillus : Amoureux de PluXml et codeur bricoleur à mes heures perdues.

2 commentaires

elMosk a dit : #1

Ce n'est pas très clair en première lecture. MonPlugin en exemple aide à finir par comprendre. C'est pas aujourd’hui que je me ferai mon plugin LOL

Gccyrillus a dit : #2

@elMosk , oui en effet, mais la création d'un plugin est elle même pas simple et demande déjà quelques connaissances dans le développement web et le fonctionnement de PluXml.
Il est certain que pour un débutant, c'est tout simplement incompréhensible ;)
Merci de ton retour

rFil RSS des commentaires de cet article


Écrire un commentaire

Top