OldSystemDePlugin

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !



Le système de plugin ne sera pas présent dans la version 1.8 finale. C’est à dire que tout ce qui est décrit ici n’est valable que pour les versions beta, pr et cvs de la 1.8 jusqu’au Lundi 7 Mars 2005. Après cela, Il faut revenir aux PointsEntreeIncTexte, fichiers mes_fonctions et mes_options.

La version 1.9alpha introduit un nouveau SystemeDePlugin, voir les informations sur la page dédiée, les informations ici restent obsolétes.


Retour sur la proposition de plugins : après discussion avec Arno*, cette
fonctionnalité est reportée post 1.8, et pour que personne ne vienne dire
plus tard "j’ai fait un plugin, ça marchait avant, et maintenant c’est
cassé", on la démonte complètement.

Donc, concrètement, il n’y a plus de dossier "plugins".

le principe du plug n’ play c’est sympa, mais il faut une
implementation riche, efficace, souple, etc.
Rester ouvert à tout changement de cap.


— Fil
voir RecyclerLesPlugins

La version CVS beta expérimente un système de plugin pour faciliter l’insertion de code dans le noyau de SPIP.

Pour l’instant, ce système ne permet que d’étendre les PointsEntreeIncTexte, mais rend déjà la déclaration de nouvelles fonctions typo bien plus "élégante".

Les plugins

C’est quoi un plugin ?

C’est un fichier qu’il suffit de déposer dans un sous-répertoire de SPIP pour lui ajouter une fonctionnalité.

Avantages pour le webmestre

Le but est de faciliter l’installation d’éléments « clé en main ». En effet le processus actuel basé sur l’édition du fichier mes_options.php3 présente deux inconvénients dès qu’il s’agit d’intégrer plusieurs contribs à SPIP :

  1. Chaque contrib externe a besoin de modifier le fichier mes_options pour s’installer. Il faut donc le modifier « à la main » pour fusionner les modifications nécessaires sans conflit. Ce problème est éliminé avec le dossier "plugins" qui permet de fournir des fichiers séparés pour chaque contrib.
  2. Le second problème c’est celui de la redéfinition des fonctions correspondant à des points d’entrée, telles que « avant_propre() » et autres. Chaque contrib externe risque d’entrer en conflit avec une autre contrib, tout simplement par redéfinition d’une fonctionnalité déjà définie. En réponse, le processus proposé ici permet d’utiliser des noms de fonctions différents.

Où je les mets ? Comment je les structure ?

-  Un plugin doit se trouver dans le répertoire ecrire/plugins
-  Il doit avoir un nom de fichier qui commence par plug_
-  On peut le mettre dans son propre sous repertoire de ecrire/plugins — Ainsi, on peut livrer un plugin en plusieurs fichiers ou avec des librairies.

  • le nom du répertoire est libre
  • le fichier principal doit toujours s’appeler plug_quelquechose

Comment dire à SPIP d’utiliser mon plugin ?

SPIP inclut tous les fichiers plug_...php au début de l’interprétation d’un squelette.

On peut donc y placer de nouveaux filtres, de nouvelles balises (CreerSaBalise) et toutes autres choses qu’on aurait collées dans mes_fonctions ou mes_options.

Étendre le noyau

On peut même déclarer des ajouts au noyau de SPIP. SPIP doit alors savoir à laquelle de ses fonctions appliquer ce plugin. Il y a deux choix :

-  appliquer le plugin avant la fonction,
-  l’appliquer après.

Pour ce faire, il faut indiquer à SPIP quelle nouvelle fonction appeler avant et après. Ceci se fait par un appel à la fonction completer_fonction à la fin du fichier principal du plugin.
Cette fonction prend trois paramètres :
1- le nom de la fonction à compléter,
2- le nom de la fonction à appeler avant,
3- le nom de la fonction à appeler après.

Un des deux derniers peut être vide évidemment.
E.G. : completer_fonction("propre", "avant_typo_smallcaps", "");

Une limitation actuelle est que seule la fonction propre peut être complétée.

Comment SPIP découvre mon plugin ?

C’est semi-automatique. SPIP ne regarde pas tout le temps le répertoire de plugins, ça serait plutôt inutile, vu que ce repertoire ne change que très rarement.
Pour dire à SPIP de recharger la liste de plugins, il faut et il suffit de visiter la page de configuration du site.

Exemple

le fichier ecrire/plugins/plug_small_caps.php :

<?php
// Ce plug-in ajoute le raccourci typographique <sc></sc>

function avant_typo_smallcaps($texte) {
        $texte = str_replace("<sc>", "<span style="font-variant: small-caps">", $texte);
        $texte = str_replace("</sc>", "</span>", $texte);
        
        return $texte;
}

completer_fonction("propre", "avant_typo_smallcaps", "");
?>

Autre Exemple

Remplacer les puces spip - qui insèrent une image par des puces spip -* qui génèrent une véritable liste avec des <li>.

Pierre Andrews (aka Mortimer) propose un petit plugin à mettre dans ecrire/plugins/plug_liste_propre.php

<?php
function liste_propre($texte) {
    return str_replace("n- ", "n-* ",$texte);
}

completer_fonction("propre", "liste_propre", "");
?>

Fil confirme qu’il n’y a pas de problèmes avec les parties comprises entre balises <code> et <cadre> car le filtre propre épargne le contenu de ces parties.

Les annonces spip-core

-  Dossier de plug-ins
-  completer_fonctions

FAQ

Est-ce que les filtres (y compris plugins) sont appliqués avant de passer la main à l’indexeur de SPIP ?

C’est directement le Mysql qui est indexé, les raccourcis spips sont élagués et non interpretés

Autres Exemples

-  NumerotationEtc,
-  DesSmileys filtre smileys en plugin (ou comment utiliser $flag_ecrire)

à venir :
-  CodeCouleur : Du joli code dans les articles

Dernière modification de cette page le 4 mars 2007

Discussion

Aucune discussion

Ajouter un commentaire

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom