SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

286 Plugins, 197 contribs sur SPIP-Zone, 250 visiteurs en ce moment

Accueil > Outils pour plugins > Config (CFG) > Coder un plugin simple avec cfg

Coder un plugin simple avec cfg

Tutoriel pour faire un plugin simple configuré avec cfg : aa

9 février 2007 – par cy_altern, toggg – 41 commentaires

Toutes les versions de cet article : [français] [italiano]

16 votes

Le plugin config (cfg) permet de gérer les paramètres de configuration d’un plugin de façon simple. Cet article propose de développer un plugin extra-simple (aa) pour apprendre à utiliser config.

Quelques rappels sur cfg

cfg est un outil pour gérer les paramètres de configuration d’un plugin (ou de n’importe quoi) avec le minimum d’effort :

  • La description des paramètres se fait en créant un unique fichier fonds/xxx.html qui donne le formulaire de gestion des paramètres ainsi que leur description/typage et la configuration du stockage.
  • Stocker les paramètres de configuration dans la table spip_meta mais sans l’alourdir par des dizaines d’entrées (autant que de paramètres) comme c’est le cas actuellement pour beaucoup de plugins. C’est fait en sérialisant la table arborescente de ces parametres.

Le principe est donc que chaque plugin stocke ses paramètres sous forme d’une entrée avec 2 champs : « nom » et « valeur » :

  • nom stocke l’identifiant unique du stockage, pour un plugin, son préfixe est le mieux indiqué.
  • valeur stocke un tableau php (array) contenant des éléments de la forme : « nom_variable_config » => « valeur_de_la_variable ». Ce tableau est enregistré sous sa forme sérialisée par spip, il est récupérable aussi bien dans l’espace public que dans l’espace privé. « valeur_de_la_variable » peut elle-même être un tableau constitué de la même façon, ce qui permet d’obtenir des arborescences de configuration.

Un plugin tutoriel pour utiliser cfg : aa

Pour mieux appréhender le fonctionnement de cfg vu du côté du développeur de plugin, la suite de cet article est construit comme un tutoriel pour réaliser un plugin utilisant cfg.
Ce plugin extra-simple permet de définir quel article afficher dans la page de sommaire. On ajoutera ensuite la possibilité de choisir quels éléments de l’article seront affichables (titre, sous-titre, chapo, texte).
ce plugin, appelons le « aa » pour « article accueil », devra donc permettre :

  • de choisir l’article à utiliser avec une interface simple présentant la liste de tous les articles du site.
  • de stocker dans spip_meta l’id_article choisi ainsi que les éléments affichables
  • de récupérer facilement la valeur de l’id_article dans les squelettes et/ou dans l’espace privé

Première étape : préparer le plugin

Avant de commencer la partie spécifique à cfg, il faut créer le petit nécessaire à tout plugin :

  • un sous-répertoire aa/ dans plugins/
  • un fichier plugins/aa/plugin.xml avec le code qui va bien :
    1. <plugin>
    2. <nom>
    3. <multi>
    4. [fr]Article accueil
    5. [en]Article summary
    6. </multi>
    7. </nom>
    8. <auteur>
    9. <multi>
    10. [fr] cy_altern
    11. _ &copy; 2007 - Distribué sous licence GNU/LGPL
    12. [en]cy_altern - distributed under GNU/GPL licence
    13. </multi>
    14. </auteur>
    15. <version>
    16. 0.1
    17. </version>
    18. <etat>
    19. dev
    20. </etat>
    21. <description>
    22. <multi>
    23. [fr]Un exemple de plugin pour apprendre ß utiliser cfg
    24. [en]An example to learn cfg.
    25. </multi>
    26. </description>
    27. <lien>
    28. [Documentation sur ->http://www.spip-contrib.net/?article1605],
    29. et si vous avez cfg: [Configuration->.?exec=cfg&amp;cfg=aa]
    30. </lien>
    31. <icon>plugin-24.gif</icon>
    32. <prefix>
    33. aa
    34. </prefix>
    35. </plugin>

    Télécharger

    Notez la manière d’internationaliser les textes en les préfixant comme [en], [fr], etc.

Le lien donné pour la configuration sera accessible depuis administration plugin en ouvrant l’onglet aa. Il n’appelle pas un fichier du plugin comme c’est usuel (de la forme ->sousmenu[’aa’] pour appeller  ?exec=aa) mais il renvoie directement sur l’interface de cfg : ->sousmenu[’cfg&cfg=aa’] renvoie sur  ?exec=cfg&cfg=aa.
Cela permet donc de comprendre que ce plugin n’aura pas à créer sa propre interface de configuration puisqu’il bénéficie de celle créée automatiquement par cfg

Voila, cet élément étant créé, il est désormais possible de passer à l’interface de configuration/enregistrement des paramètres du plugin.

Deuxième étape : « brancher » le plugin aa sur cfg

C’est là que les choses deviennent un vrai bonheur :

  • cfg est conçu de telle manière que lorsque l’on appelle  ?exec=cfg&cfg=aa, le fichier exec_cfg (l’interface de cfg) appelle le fichier fonds/cfg_aa.html et inclut automatiquement son contenu dans un formulaire tout préparé. Ce sous-répertoire fonds/ peut être situé dans squelettes/ ou dans le répertoire de n’importe quel plugin, ici donc plugins/aa/fonds/cfg_aa.html
  • la validation de ce formulaire permettra de faire la sérialisation des données du formulaire et le stockage dans spip_meta sans que le developpeur du plugin ait à coder une ligne.
  • enfin, cerise sur le gateau, cfg fonctionne déja de façon squeletisée dans l’espace privé

Conséquence de ces caractéristiques : le fichier /fonds/cfg_aa.html sera codé comme un fichier de squelette (BOUCLEs, #BALISES, filtres sont tous possibles). Ce fichier devra contenir les champs de formulaires (<input>, <select>, <text>...) nécessaires pour définir les paramètres de configuration à stocker : le « name » d’un élément correspond au nom de la variable à stocker, le « value » permettant de définir la valeur de cette variable de configuration.

Pour notre plugin aa, dans un premier temps on ne souhaite stocker qu’une seule valeur : l’id_article de l’article qui servira de page d’accueil. Il faut donc proposer à l’utilisateur une liste à choix unique (un <select>) pour choisir l’article parmi tous ceux existants.
Ce qui donne (en BOUCLEs) :

  1. <select name="id_aa">
  2. <BOUCLE_articles(ARTICLES){par titre}>
  3. <option value="#ID_ARTICLE">#ID_ARTICLE . #TITRE</option>
  4. </BOUCLE_articles>
  5. </select>

Télécharger

Notez les structures qui nous intéressent spécialement :
<select name=« id_aa »> qui permet de définir que l’on souhaite stocker une variable « id_aa », attention name=xxx doit suivre immédiatement <select ou <input type=...
<option value=« #ID_ARTICLE »> qui permet d’envoyer le id_article du <option> sélectionnée comme valeur du paramètre id_aa.

Afin que le choix de l’article soit plus facile, on construit le <select> de façon à ce que les articles soient classés par rubriques de façon arborescente. En pompant le code de /dist/plan.html pour faire l’appel récursif des rubriques, on arive donc à ceci pour cfg_aa.html :

  • tête de fichier : le cache et le formulaire de début de cfg
    1. #CACHE{0}
    2. <form method="post">[(#ENV{_cfg_}|form_hidden)]

    Télécharger

Facultativement, cfg permet également de construire automatiquement un cadre contenant un descriptif du plugin et de donner un titre (<title> dans le HEAD de la page) :

  1. <!-- descriptif=
  2. <h4>Tutoriel utilisation de cfg</h4>
  3. Ici vous pouvez configurer l'article qui sera affich&eacute; en page sommaire.<br />
  4. <br /><a href="http://extranet-eze.dyndns.org/portail/spip_SVN/spip.php?article112" class="spip_out">Documentation provisoire (&agrave; verser sur contrib ?)</a>
  5. -->
  6. <!-- titre=plugin aa titre -->

Télécharger

Il suffit de respecter la syntaxe < !— descriptif=... ou < !— titre=... et de faire suivre le « = » du texte/code HTML de l’élément.

  • la partie en boucles pour créer le <select> :
    1. <fieldset><legend><:article:> <:sommaire:></legend>
    2. <label>Choix de l'article &agrave; utiliser :</label>
    3. <select name="id_aa">
    4. <option value="">Racine</option>
    5. <BOUCLE_secteurs(RUBRIQUES) {racine} {par titre}>
    6. <option value="">&nbsp;&nbsp;<strong>rubrique : #TITRE</strong></option>
    7. <BOUCLE_articles_racine(ARTICLES) {id_rubrique} {par titre}>
    8. <option value="#ID_ARTICLE">&nbsp;&nbsp;&nbsp;&nbsp;#ID_ARTICLE . #TITRE</option>
    9. </BOUCLE_articles_racine>
    10. <BOUCLE_rubriques(RUBRIQUES) {id_parent} {par titre}>
    11. <option value="" style="font-weight: bold;">&nbsp;&nbsp;rubrique #ID_RUBRIQUE : #TITRE</option>
    12. <BOUCLE_articles(ARTICLES) {id_rubrique} {par titre}>
    13. <option value="#ID_ARTICLE">&nbsp;&nbsp;&nbsp;&nbsp;#ID_ARTICLE . #TITRE</option>
    14. </BOUCLE_articles>
    15. <BOUCLE_sous_rubriques(BOUCLE_rubriques)></BOUCLE_sous_rubriques>
    16. </BOUCLE_rubriques>
    17. </BOUCLE_secteurs>
    18. </select>
    19. </fieldset>

    Télécharger

  • fin du fichier : fin du formulaire de cfg :
    1. <input type="submit" name="_cfg_ok" value="<:OK:>" />
    2. <input type="reset" value="<:Reset:>" />
    3. <input type="submit" name="_cfg_delete" value="<:Supprimer:>" />
    4. </form>

    Télécharger

Et hop ! avec ce simple fichier, le plugin est opérationnel :  ?exec=cfg&cfg=aa donne accès à l’interface de configuration suivante :

Troisième étape : récupérer les données de configuration

Il s’agit donc maintenant de récupérer dans un fichier de squelette la valeur de « id_aa » pour la passer à une boucle ARTICLES qui affichera le contenu de l’aricle sélectionné.
De façon simple cfg crée automatiquement une balise #CONFIG qui permet de récupérer les données de configuration du plugin aa. On peut donc créer la BOUCLE suivante dans le fichier de squelette « sommaire.html » par exemple :

  1. [(#REM) test plugin aa]
  2. <div class="liste-articles">
  3. <BOUCLE_truc(ARTICLES){id_article=(#CONFIG{aa/id_aa})}>
  4. <div class="cartouche">
  5. #DEBUT_SURLIGNE
  6. [(#LOGO_ARTICLE||image_reduire{200,200})],''})]
  7. [<h1 class="#EDIT{titre} titre">(#TITRE)</h1>]
  8. [<p class="#EDIT{soustitre} soustitre">(#SOUSTITRE)</p>]
  9. [<p class="#EDIT{chapo} chapo">(#CHAPO)</p>]]
  10. #FIN_SURLIGNE
  11. </div>
  12. [<div class="#EDIT{texte} texte">(#TEXTE|image_reduire{520,0})</div>]
  13. </BOUCLE_truc>
  14. </div>

Télécharger

Alternativement il est possible de mettre la BOUCLE_truc dans un fichier de squelette et de l’appeller par un inclure dans lequel on passe l’id_article stocké par id_aa :

  1. [(#INCLURE{fond=aa}{id_article=[(#CONFIG{aa/id_aa})]})]

Outre le fait que tout fonctionne comme prévu (le contenu de l’article sélectionné s’affiche dans la page sommaire, dans les 2 cas la seule partie qui nous intéresse est le (#CONFIG{aa/id_aa}) qui permet de récupérer directement la valeur de id_aa pour la passer en paramètre id_article : {id_article=...}.
Notez donc la syntaxe propre à la balise #CONFIG :
#CONFIG{prefix_plugin/nom_variable_config} (avec le « / » comme séparateur) sera substitué par la valeur saisie via le name=« nom_variable_config » de la page  ?exec=cfg&cfg=prefix_plugin.
On peut également appeller #CONFIG{nom_plugin} si l’on souhaite récupérer directement le tableau (array) des paramètres de configuration stockés.

Quatrième étape : améliorer l’ergonomie de l’interface de configuration

Etant donné que le fichier /fonds/cfg_aa.html est un fichier de squelette « comme les autres », on peut utiliser la balise #CONFIG pour que le <select name=« id_aa »> puisse avoir comme <option> sélectionnée l’article dont l’id_article est stockée dans spip_meta (la config en cours quoi !). Ce qui nous donne :

  1. <option value="#ID_ARTICLE" [(#CONFIG{aa/id_aa}|=={#ID_ARTICLE}|?{selected="selected",''})]>&nbsp;&nbsp;&nbsp;&nbsp;#ID_ARTICLE . #TITRE</option>

Ce code utilise donc un filtre de test d’égalité (|==) sur la valeur de l’ID_ARTICLE en cours dans la BOUCLE : si cet id_article est égal à #CONFIG{aa/id_aa} , alors cette option est celle sélectionnée à l’affichage de la page :
<option value="#ID_ARTICLE" selected="selected">

Cinquième étape : récupérer les variables de configuration dans les fichiers de l’espace privé

Dans la majorité des plugins (contrairement à aa) il est nécessaire de devoir récupérer les paramètres de configuration dans les fichiers php du plugin (exec_truc.php par exemple).
Pour cela cfg fourni la fonction lire_config() qui s’utilise de la façon suivante :

  1. echo lire_config('aa/chapo');

pour récupérer la valeur de la variable « chapo » du plugin « aa ». Le tableau php (array) complet des valeurs stockées est appelé par lire_config(’aa’).

On peut donc utiliser toutes les formes classiques d’interrogation de l’array php retourné par lire_config(’aa’) :
Un simple print_r() :

  1. echo '<strong>lire_config(aa) retourne :</strong> ';
  2. print_r(lire_config('aa'));

Télécharger

ou une structure de contrôle plus sophistiquée :

  1. foreach(lire_config('aa') as $cle => $val) {
  2. echo '<br />$cle = '.$cle.' $val = '.$val;
  3. }

Télécharger

qui permet de constater que les valeurs de l’array lire_config(’aa’) sont indexées avec le nom des variables stockées comme clés.

A titre d’exemple on peut donc faire dans le plugin aa une interface d’administration qui permettra d’illustrer ces notions.
Pour cela on crée un sous-répertoire « exec » dans le dossier de aa et on crée dedans le fichier aa_admin.php qui sera donc appelé par .../ecrire/ ?exec=aa_admin. Un code minimal pour tester lire_config() donnerait :

  1. <?php
  2. function exec_aa_admin() {
  3. include_spip("inc/presentation");
  4. // vérifier les droits
  5. global $connect_statut;
  6. global $connect_toutes_rubriques;
  7. if ($connect_statut != '0minirezo' OR !$connect_toutes_rubriques) {
  8. debut_page(_T('titre'), "saveauto_admin", "plugin");
  9. echo _T('avis_non_acces_page');
  10. fin_page();
  11. }
  12.  
  13. echo debut_page(_T('aa:titre_page'));
  14. echo "<br />";
  15. echo gros_titre(_T('aa:gros_titre_page'));
  16. echo debut_gauche();
  17.  
  18. echo debut_boite_info();
  19. echo 'contenu de la boite info du plugin aa';
  20. echo fin_boite_info();
  21.  
  22. echo debut_raccourcis();
  23. echo 'contenu de la boite des raccourcis du plugin aa';
  24. echo fin_raccourcis();
  25.  
  26. echo debut_droite();
  27. echo debut_cadre_trait_couleur("plugin-24.gif", false, "", _T('titre_boite_principale'));
  28. echo debut_cadre_couleur();
  29. // simple test de lire_config()
  30. echo '<strong>lire_config(aa) retourne :</strong> ';
  31. print_r(lire_config('aa'));
  32. echo '<br /><br /><strong>lire_config(aa/id_aa) =</strong> '.lire_config('aa/id_aa');
  33. echo '<br /><br /><strong>lire_config(aa/chapo) =</strong> '.lire_config('aa/chapo');
  34.  
  35. echo '<br /><br /><strong>une boucle dans lire_config(aa)</strong> ';
  36. foreach(lire_config('aa') as $cle => $val) {
  37. echo '<br />$cle = '.$cle.' $val = '.$val;
  38. }
  39.  
  40. echo fin_page();
  41. }
  42. ?>

Télécharger

Ce qui donne l’interface suivante :

Sixième étape : ajouter la sélection des éléments de l’article accueil à afficher

Pour rendre ce plugin un peu plus complet on souhaite pouvoir choisir les éléments (logo, titre, sous-titre, chapo et texte) qui seront affichés.
Pour cela 2 mofications :

  • ajouter des paramètres de configuration dans cfg_aa.html :
    1. <fieldset><legend>Eléments à utiliser :</legend>
    2. <label>Logo</label>
    3. <input type="checkbox" name="logo" [checked="(#ENV{logo})"] />
    4. <label>Titre</label>
    5. <input type="checkbox" name="titre" [checked="(#ENV{titre})"] />
    6. <label>Sous-titre</label>
    7. <input type="checkbox" name="soustitre" [checked="(#ENV{soustitre})"] />
    8. <label>Chapeau</label>
    9. <input type="checkbox" name="chapo" [checked="(#ENV{chapo})"] />
    10. <label>Texte</label>
    11. <input type="checkbox" name="texte" [checked="(#ENV{texte})"] />
    12. </fieldset>

    Télécharger

On crée donc un <input type=« checkbox » name=« element_a_selectionner » ...> pour chacun des éléments pouvant êtres choisis...
...et on récupère la configuration en cours en utilisant une nouvelle caractéristque de cfg : lorsque l’on est dans le squelette du fond du plugin (ie ici cfg_aa.html), alors on récupère directement les valeurs de #CONFIG{prefix_plugin/nom_variable} dans #ENV{nom_variable} . Cela permet de simplifier par rapport au test |== utilisé dans la 5e étape pour récupérer la config en cours des différents paramètres :
... [checked="(#ENV{chapo})"] suffit pour faire afficher checked=« on » si le chapo est sélectionné dans la config en cours.

Avec #ENV on peut également donner des valeurs « par défaut » aux variables de configuration : #ENV{nom_variable, valeur_defaut} Par exemple pour créer un champ texte gérant la variable « truc » et ayant « toto » comme texte par défaut, on écrira :

  1. <input type="text" name="truc" value="#ENV{truc, toto}">
  • ajouter un test sur la configuration de l’affichage des éléments (logo, titre...) dans le squelette :
    1. [(#LOGO_ARTICLE||image_reduire{200,200})]

    devient

    1. [(#CONFIG{aa/logo}|=={on}|?{[(#LOGO_ARTICLE||image_reduire{200,200})],''})]

    ce qui permet de n’afficher le logo que si il est coché dans le plugin.
    En appliquant ce type de test sur l’ensemble de la BOUCLE_truc on obtient alors :

    1. <BOUCLE_truc(ARTICLES){id_article=(#CONFIG{aa/id_aa})}>
    2. <div class="cartouche">
    3. #DEBUT_SURLIGNE
    4. [(#CONFIG{aa/logo}|=={on}|?{[(#LOGO_ARTICLE||image_reduire{200,200})],''})]
    5. [(#CONFIG{aa/titre}|=={on}|?{[<h1 class="#EDIT{titre} titre">(#TITRE)</h1>],''})]
    6. [(#CONFIG{aa/soustitre}|=={on}|?{[<p class="#EDIT{soustitre} soustitre">(#SOUSTITRE)</p>],''})]
    7. [(#CONFIG{aa/chapo}|=={on}|?{[<p class="#EDIT{chapo} chapo">(#CHAPO)</p>],''})]
    8. #FIN_SURLIGNE
    9. </div>
    10. [(#CONFIG{aa/texte}|=={on}|?{[<div class="#EDIT{texte} texte">(#TEXTE|image_reduire{520,0})</div>],''})]
    11. </BOUCLE_truc>

    Télécharger

De cette manière le contenu de la page sommaire devient facilement modifiable tant au niveau du contenu (article choisi) que des éléments à afficher...

Septième étape : ajouter un bouton dans l’espace privé pour l’administration

Ce bouton permettra d’accéder directement à la page de configuration de aa.

D’abord, rajouter à la fin de plugin.xml, juste avant </plugin> :

Cette balise <pipeline>...</pipeline> demande à spip d’exécuter la fonction aa_ajouter_boutons() (défaut) du fichier aa_pipelines.php situé dans plugins/aa/ lors de la fabrication de l’espace privé. Cela insérera un bouton de raccourcis pour accéder à l’interface de config du plugin aa dans la partie privée.

Le fichier aa_pipelines.php qui contient le minimum pour créer un bouton « Article accueil » dans le sous-menu de « édition » :

  1. <?php
  2. function aa_ajouter_boutons($boutons_admin) {
  3. // si on est admin
  4. if ($GLOBALS['connect_statut'] == "0minirezo") {
  5. // on voit le bouton comme sous-menu de "naviguer"
  6. $boutons_admin['naviguer']->sousmenu['cfg&cfg=aa']= new Bouton("plugin-24.gif", _T('Article accueil') );
  7. }
  8. return $boutons_admin;
  9. }
  10. ?>

Télécharger

Rappel ce bouton ($boutons_admin[’naviguer’]) n’appelle pas un fichier du plugin comme dans les autres plugins (de la forme ->sousmenu[’aa’] pour appeller  ?exec=aa) mais qu’il renvoie directement sur l’interface de cfg : ->sousmenu[’cfg&cfg=aa’] renvoie sur  ?exec=cfg&cfg=aa.
cela confirme à nouveau que ce plugin n’aura pas à créer sa propre interface de configuration puisqu’il bénéficie de celle créée automatiquement par cfg

P.-S.

Liens pour récupérer l’intégrale de aa et cfg :
-  aa en zip
-  cfg en zip
-  aa sur la zone : svn ://zone.spip.org/spip-zone/_plugins_/_dev_/aa
-  cfg sur la zone : svn ://zone.spip.org/spip-zone/_plugins_/_test_/cfg

cfg est en cours de documentation et est toujours en développement, toutefois, les fonctionnalités présentées ici sont totalement stabilisées et peuvent être utilisées sans risque. cfg permet beaucoup plus, nous avons préféré rester ici sur un modèle simple.

Dernière modification de cette page le 6 avril 2009

Retour en haut de la page

Tout afficher

Vos commentaires

  • Le 18 novembre 2009 à 15:46, par Roberto En réponse à : Coder un plugin simple avec cfg

    Bonjour,

    Je me suis basé sur les explications de cette page pour créer un plug-in très simple, mon tout premier plug-in. Un grand merci pour ces explications qui m’ont grandement facilité la tâche.

    Il s’agit de créer une balise personnalisée statique dont le contenu peut être défini via un onglet de cfg.

    Cela fonctionne correctement sauf que, du côté public, lorsque j’insère la balise personnalisée, le contenu s’insère avant le <!DOCTYPE html..., alors que le squelette l’appelle à un autre endroit.
    Et je ne comprends pas pourquoi...

    Quelqu’un peut-il m’expliquer pourquoi et comment résoudre ce problème ?

    • Le 18 novembre 2009 à 16:41, par Roberto En réponse à : Coder un plugin simple avec cfg

      Je me réponds à moi-même...

      Finalement, j’ai trouvé une méthode qui me permet de contourner cette difficulté. Il s’agit de mettre l’appel à la balise personnalisée dans un fichier include créé à cette occasion.
      De ce fait, le contenu de la balise s’affiche en début du fichier inclus et non pas au début avant le DOCTYPE...

      Néanmoins si quelqu’un a une explication, je reste toujours preneur.

    Répondre à ce message

  • Le 13 février 2009 à 22:10, par chankalan En réponse à : Coder un plugin simple avec cfg

    super, en moins de deux heures j’ai l’impression d’avoir fais un plugin tout seul... en suivant pas à pas c’est trop facile, les étapes du tutoriel sont bien mises en valeur par des résultats intermédiaires, je m’en vais tout de suite coder mon « vrai » premier plugin...

    juste dans la troisième partie, un bout de code est en trop ?

    DEBUT_SURLIGNE
    [(#LOGO_ARTICLE||image_reduire{200,200})],''})]
    [<h1 class="#EDIT{titre} titre">(#TITRE)</h1>]
    [<p class="#EDIT{soustitre} soustitre">(#SOUSTITRE)</p>]
    [<p class="#EDIT{chapo} chapo">(#CHAPO)</p>]]
    FIN_SURLIGNE

    devrait peut-être donner :

    DEBUT_SURLIGNE
    [(#LOGO_ARTICLE||image_reduire{200,200})]
    [<h1 class="#EDIT{titre} titre">(#TITRE)</h1>]
    [<p class="#EDIT{soustitre} soustitre">(#SOUSTITRE)</p>]
    [<p class="#EDIT{chapo} chapo">(#CHAPO)</p>]
    FIN_SURLIGNE

    mais c’est pas très grave...
    je trouve ce tutoriel vraiment exceptionnel,
    merci

    Répondre à ce message

  • Le 1er mai 2007 à 00:00, par Fil En réponse à : Coder un plugin simple avec cfg

    Merci pour ce tutorial ; je viens de coder le plugin « Autorité » en le suivant pas à pas. Impeccable.

    Répondre à ce message

  • Le 11 mars 2008 à 12:01, par stefdn En réponse à : Futilité et internationalisation

    Bonjour,
    d’abord merci pour ce plugin, je commence à m’en servir et ça roule (presque) tout seul :)

    J’ai deux questions :

    1. Est-il possible de placer l’icône perso du plugin dans le menu des plugins gérés par CFG ?
    2. Sur l’internationalisation de la partie [(#REM) descriptif = ... ], il s’affiche la balise de langue et non son contenu (ça marche bien pour le formulaire), mon code (avec ou sans <multi>) :
      [(#REM) descriptif=<h4>Exp&eacute;rimental</h4>
      <p><multi><:monplugin:descriptif_cfg:></multi></p>
      ]

    Quelqu’un aurait des pistes ?

    • Le 11 mars 2008 à 15:38, par stefdn En réponse à : Futilité et internationalisation

      auto-réponse pour 2 :

      enlever la balise de commentaire SPIP ([(#REM) ...]) et la remplacer par celle du HTML :

      <!-- descriptif=... <:truc:bla_bla:> ... -->

      et on peut même mettre du code PHP dans ces commentaires, genre

      <!-- descriptif=... <:truc:bla_bla:> ...
      <?php
      icone_horizontale (_T('truc:retour_au_plugin'), generer_url_ecrire('truc'), 'icone.png');
      ?>
      ... -->

      c’est trop fort :))

    • Le 14 mars 2008 à 17:36, par stefdn En réponse à : Futilité et internationalisation

      auto-réponse 1

      simplement, comme pour le titre :

      <!-- icone=img_pack/csvexport-24.png -->

    Répondre à ce message

  • Le 11 décembre 2007 à 11:05, par edd En réponse à : Coder un plugin simple avec cfg

    Attention, pour le code dans le fichire plugin.xml appelant l’espace de configuration du plugin, il faut remplacer :

    <lien>[Documentation->lien vers site de documentation], et [Configuration-
    >.?exec=cfg&cfg=aa]</lien>

    par :

    <lien>[Documentation->lien vers site de documentation], et [Configuration-
    >.?exec=cfg&ampcfg=aa]</lien>

    le « & » tout seul est remplacé par « &amp » , sinon en cas de commit sur spip-zone ça bloque la zone. Attention n’oubliez pas d’ajouter un «  ; » a la fin de « amp ». (c’est pas mis dans l’exemple que je donne car spip interpretre le machin et transforme le « &amp » en « & » tout court.

    Répondre à ce message

  • Le 30 novembre 2007 à 17:33, par ? En réponse à : Problème dans compat_cfg.php

    Sur SPIP 1.9.2c, il y a un problème dans le fichier compat_cfg.php à la ligne 64 : la fonction spip_query() devrait être appelée et non pas la fonction spip_query_db() comme c’est le cas.

    Curieusement, ce bug n’apparait pas lorsqu’on est identifié dans l’espace privé, mais uniquement lorsqu’on est anonyme et uniquement dans le cadre des pages de gestion des langues avec le plugin « langue préférée »...

    Si quelqu’un peut me dire si il y a quelque chose que je n’ai pas compris ?
    J’ai juste remplacé spip_query_db() par spip_query() et ça marche...

    Répondre à ce message

  • Le 12 octobre 2007 à 10:37, par cam.lafit En réponse à : Coder un plugin simple avec cfg

    Bonjour

    Si je ne m’abuse maintenant on peut faire #ENV{id_aa} au lieu de #CONFIG{aa/id_aa}

    Ce qui simplfie pas mal la syntaxe non ?

    Répondre à ce message

  • Le 14 septembre 2007 à 18:51, par Evelyne Desandre En réponse à : Coder un plugin simple avec cfg

    Bonjour,

    J’ai installé ce plugin sur un spip 1.9.2b [9381]. Quand je veux configurer (www.monsite.org/ecrire/?exec=cfg) j’ai ce message d’erreur (voir ci-dessous). Je suis allée chercher la dernière version svn sur spip zone et l’ai installée, après avoir effacé la version précédente.

    Le message d’erreur persiste néanmoins et je ne peux donc pas configurer certains autres plugins. Que puis-je faire pour résoudre ce problème ? Dois-je par exemple effacer certaines données (de la base ou d’ailleurs) avant de réinstaller ?

    D’avance merci.

    Line

    # Erreur(s) dans le squelette

    * Erreur : filtre « !=’’ » non défini,
    * Erreur : filtre « !=’’ » non défini,
    * Erreur : filtre « !=’’ » non défini,
    * Erreur : filtre « !=’’ » non défini,
    * Erreur : filtre « !=’’ » non défini,

    • Le 18 septembre 2007 à 10:24, par Evelyne Desandre En réponse à : Coder un plugin simple avec cfg

      Bonjour

      Désolée pour le bruit. L’erreur venait de la Barre Typo enrichie. J’ai téléchagé la dernière version et tout est renté dans l’ordre.

    Répondre à ce message

  • Le 1er septembre 2007 à 21:52, par teger En réponse à : Coder un plugin simple avec cfg

    Bonjour,

    J’ai une petite question concernant le plugin CFG.

    Dans un fichier placé dans le répertoire ’fonds’, commençant par ’cfg_’.

    Dans ce fichier je passe un formulaire avec ’action=« #SELF »’ et je passe
    les paramètres nécessaires pour CFG avec le filtre correspondant
    (placant les hidden dans le formulaire).

    Je rajoute un champs ’hidden’, par exemple : type="hidden" value="true">

    Et ensuite je place du code PHP :

    <?php
        
    if (_request('create') == 'yes') {

           
    $result spip_query('alter table .........');
           if (! 
    $result) {
              echo 
    mysql_error();
            } else {
              echo 
    'Le champs a bien été créé.';
           }

        } else {
           .............

        }
    ?>

    Et la quand je clique sur le bouton ’submit’, j’ai une belle surprise.

    Je prends une erreur :
    Duplicate column .....

    Le code a été exécuté deux fois !!!!!!

    La première fois, il cré bien la colonne dans la table et la deuxième
    fois, il obtient une erreur.

    Je n’arrive pas à comprendre pourquoi il exécute deux fois le code PHP !!!!

    Quelqu’un aurait-il une explication à ce phénomène ?

    merci d’avance

    Répondre à ce message

  • Le 24 août 2007 à 16:54, par teger En réponse à : Utilisation de CFG

    Bonjour,

    j’ai créé un plugin avec cfg.

    Quand je passe ’_cfg_delete’, il me supprime toute l’entrée dans la table spip_meta correspondant à mon plugin.
    Je voudrais tout simplement supprimer une des valeurs de cette entrée dans le tableau serializé !!!

    merci d’avance

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?
  • [Se connecter]

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 Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Adaptive Images

    15 novembre 2013 – 66 commentaires

    Un plugin pour permettre aux sites responsive d’adapter automatiquement les images de la page à l’écran de consultation. Adaptive Images, que l’on pourrait traduire par Images adaptatives, désigne la pratique qui vise à adapter les taille, (...)

  • Métas

    8 août 2009 – 50 commentaires

    Ce petit plugin permet l’ajout, depuis l’espace privé, de metatags aux articles et rubriques de SPIP, ainsi que la mise en exergue de mots importants.

  • Brownie

    6 juillet 2012 – 43 commentaires

    Brownie est une adaptation pour Zpip du thème du même nom initialement développé par Egrappler.com. Présentation Brownie est un thème Responsive à deux colonnes. La démonstration ci-dessous utilise la version 2.0.0 de Brownie, la dist de SPIP3 (...)

  • Métas +

    3 décembre – 13 commentaires

    Améliorez l’indexation de vos articles dans les moteurs et leur affichage sur les réseaux sociaux grâce aux métadonnées Dublin Core, Open Graph et Twitter Card. Installation Activer le plugin dans le menu dédié. Dans le panel de configuration, (...)

  • Acces Restreint 3.0

    11 décembre 2008 – 785 commentaires

    Le plugin accès restreint permet de définir et de gérer des zones de l’espace public en accès restreint. Cette version du plugin a été redévelopée et optimisée tout spécialement pour SPIP 2.0. Il en découle une amélioration des performances sur les gros (...)

Ça spipe par là