SPIP-Contrib

SPIP-Contrib

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

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

Accueil > Outils pour plugins > Le Couteau Suisse > [dev] Le Couteau Suisse : développer un outil

[dev] Le Couteau Suisse : développer un outil

... ou comment mieux comprendre « Le Couteau Suisse »

21 avril 2007 – par Patrice Vanneufville – 12 commentaires

23 votes

Le plugin « Le Couteau Suisse » propose d’introduire facilement de simples fonctionnalités supplémentaires à SPIP. Voici quelques conseils pour développer ou mieux comprendre un outil.

Cet article analyse le plugin Le Couteau Suisse au niveau du développement et fournit des renseignements à tous ceux qui désireraient, soit comprendre le fonctionnement du plugin afin d’en optimiser ou d’en améliorer certains aspects, soit développer eux-même de nouvelles fonctionnalités ou de nouveaux outils [1].

Généralités de développement

Savoir développer un plugin pour SPIP est un plus pour développer un outil, puisque l’outil est comme un « mini-plugin », mais ce n’est pas forcément nécessaire. Voici quelques liens d’information :
-  Plugins : Tutoriaux pour Plugins
-  Pipelines : http://doc.spip.org/@Tuto-Se-servir...

L’intégration des petits plugins existants est très simple :

-  Un paragrahe « add_outil() » à ajouter dans le fichier « couteau_suisse/config_outils.php » (voir la syntaxe ci-dessous).
-  Deux déclarations à ajouter dans chaque fichier de langue situé dans « lang/ » afin de définir le nom et la description du nouvel outil (voir la syntaxe ci-dessous). Pour ces deux premiers points, il suffit de récupérer les informations demandées dans le fichier « plugin.xml » de l’ancien plugin
-  Les fichiers *.php de l’ancien plugin doivent être placés sans aucune modification a priori dans le dossier « outils/ »
-  Il est donc toujours possible pour les auteurs de revenir sur leur code

L’intégration de nouvelles fonctionnalités est donc tout aussi simple :

-  Un paragraphe « add_outil() » à ajouter dans le fichier « couteau_suisse/config_outils.php » (voir la syntaxe ci-dessous).
-  Deux déclarations à ajouter dans chaque fichier de langue suitué dans « lang/ » afin de définir le nom et la description du nouvel outil (voir la syntaxe ci-dessous).
-  Un module (éventuel) à placer dans le répertoire « outils/ »
-  Une petite confirmation sur la page de configuration du plugin (ecrire/?exec=admin_couteau_suisse) et le tour est joué !

Syntaxe (format simpliste) des déclarations dans config_outils.php

  1. add_outil( array(
  2. 'id' => # Un identifiant unique et sans espace
  3. // optionnel (aide) :
  4. 'auteur' => # Auteur(s) de l'outil
  5. 'contrib' => # Numéro d'article fournissant la doc sur spip-contrib.net
  6. 'jquery' => 'oui', # Indique si l'outil nécessite la librairie jQuery
  7. 'categorie' => # Une valeur égale, par exemple, à : 'admin', 'public', 'spip', 'divers', etc.
  8. // optionnel (code) :
  9. 'code:options' => # Directement le code php à exécuter dans mes_options.php
  10. 'code:fonctions' => # Directement le code php à exécuter dans mes_fonctions.php
  11. 'code:spip_options' => # Directement le code php à exécuter le plus en amont possible (options SPIP en général)
  12. 'code:css' => # Directement le code des styles à insérer entre <head> et </head>
  13. 'code:js' => # Directement le code Javascript à insérer entre <head> et </head>
  14. 'code:jq' => # Directement le code jQuery à exécuter quand le DOM est prêt
  15. 'code:jq_init' => # Directement le code Javascript ou jQuery à exécuter au chargement de la page ou d'un fragment Ajax
  16. 'autoriser' => # Directement le code php à exécuter pour definir les droits de voir/manipuler l'outil en partie privée
  17. # Les deux options suivantes désactivent l'outil si la version de SPIP ne convient pas
  18. # Valeurs : 1.91, 1.92, 12691 pour SPIP 2.0, 14213 pour SPIP 2.1, etc.
  19. 'version-min' => # La version minimale de SPIP pour utiliser cet outil.
  20. 'version-max' => # La version maximale de SPIP pour utiliser cet outil.
  21. # Les traitements utilisés :
  22. 'traitement:UNEBALISE:1erMomentSpip' => # 'fonction à utiliser'
  23. 'traitement:UNEBALISE:2eMomentSpip' => # 'fonction à utiliser'
  24. etc.
  25. # Les pipelines utilisés :
  26. 'pipeline:1erPipeline' => # 'fonction à utiliser'
  27. 'pipeline:2emePipeline' => # 'fonction à utiliser'
  28. 'pipelinecode:3emePipeline' => # Directement le code php a executer pour ce pipeline
  29. etc.
  30. # Les fichiers distants placés dans couteau_suisse/lib/ :
  31. 'distant' => # 'URL du fichier à rapatrier'
  32. 'distant_pipelines' => # 'URL du fichier de pipelines à rapatrier'
  33. 'distant_prefixe1' => # 'URL du fichier 1 à rapatrier'
  34. 'distant_prefixe2' => # 'URL du fichier 2 à rapatrier'
  35. etc.
  36. ));

Télécharger

L’identifiant « id », seul paramètre indispensable, sert à plusieurs choses :

-  inclure le fichier du même nom, placé dans le dossier « outils/ » et contenant les fonctions utilisées,
-  lire les traductions du nom et de la description de l’outil. Celles-ci se trouvent dans les fichiers de langue du dossier « lang/ »,
-  inclure l’éventuel fichier de styles (.css) du même nom, placé dans « outils/ »
-  inclure l’éventuel fichier javascript (.js) du même nom, placé dans « outils/ »
-  inclure l’éventuel fichier d’options (mon_outil_options.php), placé dans « outils/ »
-  inclure l’éventuel fichier de fonctions (mon_outil_fonctions.php), placé dans « outils/ »
-  stocker dans la base de donnée l’état de l’outil : actif/inactif.

La fonction associée à chacun des pipelines utilisés doit se trouver dans un seul fichier, celui indiqué par « id ». Par exemple, si l’on déclare 'id' => 'mon_outil', et bien le fichier en question est : « outils/mon_outil.php ». Ensuite, dans tous les fichiers de langue (par exemple « lang/cout_fr.php » ou « lang/cout_it.php ») il faut bien définir les traductions comme ceci : 'mon_outil:nom' => 'Mon bel Outil', et 'mon_outil:description' => 'Ma belle description'. Enfin, si cet outil utilise les feuilles de styles, alors le fichier doit s’intituler « outils/mon_outil.css ». S’il utilise des fonctions javascript, alors le fichier doit s’intituler « outils/mon_outil.js ».

Concernant les autorisations et notamment le paramètre ’autoriser’, vous trouverez plus d’informations ici : [dev] Les autorisations du Couteau Suisse.

Le « cadre » du Couteau Suisse

Options, fonctions et pipelines

Le principe de Couteau Suisse est de compiler (lors de l’accès à la page privée de configuration du plugin, ou lorsque le rédacteur demande un calcul manuel de son article en partie publique) les options, fonctions et pipelines utilisés par les outils activés. Le plugin ne produit donc qu’un seul fichier « mes_options.php », un seul fichier « mes_fonctions.php » et un seul fichier par pipeline. N’hésitez pas à vous rendre dans le dossier « tmp/couteau-suisse » (SPIP versions 1.9.2 et suivantes) ou « ecrire/data/couteau-suisse » (pour les versions antérieures) afin de contrôler les divers fichiers ainsi créés.

Table des traitements

Si aucun pipeline n’est utilisé alors il est parfois nécessaire de créer un fichier « outils/mon_outil_fonctions.php » pour y stocker les fonctions nécessaires par exemple à un traitement automatique d’une balise SPIP (voir l’outil « decoupe »). Afin de gagner en performance et d’utiliser au maximum la personnalisation des balises SPIP, tous les traitements sont compilés au moment de l’installation des outils. Il est donc possible d’obtenir le code suivant :

grâce à la configuration suivante :

  1. // 1er outil :
  2. 'traitement:TEXTE:post_propre' => 'fonction1',
  3. // 2ème outil :
  4. 'traitement:TEXTE:post_propre' => 'fonction2',
  5. 'traitement:TEXTE:pre_propre' => 'fonction3',

Télécharger

Attention, la syntaxe suivante est interdite, la deuxième ligne écrasant la première :

  1. // Mon outil :
  2. 'traitement:TEXTE:post_propre' => 'fonction1',
  3. 'traitement:TEXTE:post_propre' => 'fonction2',

Télécharger

La bonne syntaxe (notez bien la parenthèse) est :

  1. // Mon outil :
  2. 'traitement:TEXTE:post_propre' => 'fonction1(fonction2',

Télécharger

Aide aux raccourcis

La liste des outils apportant de nouveaux raccourcis aidant à la rédaction des textes du site commence à s’allonger. Sur la page d’administration du plugin, sont maintenant listés (dans un cadre sur la gauche) les raccourcis typographiques actifs que l’on peut utiliser dans ses articles ou autres différents textes du site.

Chaque outil introduisant de nouveaux raccourcis doit prévoir une fonction « mon_outil_raccourcis() » qui renvoie l’aide en question en listant les raccourcis typographiques disponibles. Cette chaine (hors spécificités de langage !) peut-être pré-compilée lors de l’installation de l’outil, au sein de la fonction « mon_outil_installe() » en la stockant dans les données mises en cache par le Couteau Suisse (fichier tmp/couteau-suisse/mes_outils.php).

Lors de l’appel à l’aide, la chaine de langue prévue à cet effet est : ’mon_outil:aide’ et doit être présente dans les fichiers de langue (couteau_suisse/lang/). Par exemple : ’chatons:aide’ => ’Chatons : @liste@’. Le contrôle « @liste@ » sera remplacé par la liste des raccourcis préalablement calculée lors de l’installation de l’outil grâce à la fonction surchargeable chatons_installe_dist().

Au final voici comment est renvoyée l’aide aux raccourcis :

  1. function chatons_raccourcis() {
  2. $chatons = cs_lire_data_outil('chatons');
  3. return _T('couteauprive:chatons:aide', array('liste' => '<b>'.join('</b>, <b>', $chatons[0]).'</b>'));
  4. }

Télécharger

Si la fonction ’mon_outil_raccourcis’ censée traiter cette chaine de langue n’existe pas, alors la chaine de langue est utilisée telle quelle.

TODO : création d’une balise pouvant servir d’aide à la rédaction des forums.

Fonction d’exclusion de balises

La fonction cs_echappe_balises($balises, $fonction, $texte) permet aux outils utilisant des remplacements typographiques de protéger le texte situé entre certaines balises.
-  $balises est la liste de balises à ignorer. Exemple : ’html|code|cadre|frame|script|acronym|cite’
-  $fonction est la fonction de modification typographique
-  $texte est le texte d’origine à traiter

Si $balises='' alors les balises suivantes sont protégées par défaut : html|code|cadre|frame|script

Exemple simple d’utilisation :

  1. function small_caps_remplace($texte) {
  2. return preg_replace("/\<sc\>(.*?)\<\/sc\>/",
  3. "<span style=\"font-variant: small-caps\">\\1</span>", $texte);
  4. }
  5.  
  6. function small_caps($texte) {
  7. return cs_echappe_balises('', 'small_caps_remplace', $texte);
  8. }

Télécharger

Cet exemple permet à l’outil small_caps de remplacer toutes les textes entre balises <sc> et </sc> par un texte en petites capitales. Mais tout ce qui se trouve entre <html> et </html>, <code> et </code>, <cadre> et </cadre>, <frame> et </frame> ou <script> et </script> est ignoré.

Installation d’un outil

Article dédié : [dev] Les données du Couteau Suisse

Une fonction d’installation est automatiquement appelée par le plugin (si elle existe), lorsque l’utilisateur demande manuellement de recalculer une page, ou lorsqu’un administrateur consulte la page de configuration du plugin (ecrire/?exec=admin_couteau_suisse). Cette fonction intitulée mon_outil_installe_dist() (notez bien le suffixe obligatoire « _installe_dist ») doit se trouver dans le fichier « outils/mon_outil.php » (voir l’outil « smileys » par exemple).

Une surcharge de la fonction l’installation des outils natifs fournis par le Couteau Suisse est possible en l’intitulant mon_outil_installe() (notez bien le suffixe obligatoire « _installe ») . Cette fonction, placée dans le fichier config/mes_options.php, remplacera automatiquement la fonction native.

Exemples :

  1. // surcharge de la fonction d'installation de l'outil «typo_exposants»
  2. function typo_exposants_installe() {
  3. $datas = typo_exposants_installe_dist();
  4. $datas['fr'][0][] = '/exemple/';
  5. $datas['fr'][1][] = 'ex<sup>emple</sup>';
  6. return $datas;
  7. }
  8. // surcharge de la fonction d'installation de l'outil «spam»
  9. function spam_installe() {
  10. $datas = spam_installe_dist();
  11. $datas[0][0][] = 'averybadword';
  12. return $datas;
  13. }

Télécharger

Cette fonction peut être utile pour stocker à long terme des données particulières dans un fichier compilé que vous pouvez facilement consulter (tmp/couteau-suisse/mes_outils.php) afin d’accélérer le futur calcul des pages du sites.

En somme...

Cela semble assez bien tenir la route pour l’instant... J’attends vos retours d’expériences !

Pour créer un nouvel outil, le mieux est toujours de voir comment sont configurés les autres (il y en a plus de 70 en 2012...) afin de s’en inspirer. En dernier recours, le forum ci-dessous est fait pour vous.

Exemples d’outils

Lignes à placer dans config_outils.php :

  1. add_outil( array(
  2. 'id' => 'pucesli',
  3. 'auteur' => '[Jérôme]',
  4. 'categorie' => 'typo-corr',
  5. 'pipeline:pre_typo' => 'pucesli_pre_typo',
  6. ));
  7.  
  8. add_outil( array(
  9. 'id' => 'forcer_langue',
  10. 'code:options' => '$GLOBALS["forcer_lang"]=true;',
  11. 'categorie' => 'admin',
  12. ));
  13.  
  14. add_outil( array(
  15. 'id' => 'decoupe',
  16. 'traitement:TEXTE:post_propre' => 'decouper_en_pages',
  17. 'categorie' => 'typo-racc',
  18. ));

Télécharger

Lignes à placer dans lang/cout_fr.php :

  1. 'pucesli:nom' => 'Belles puces',
  2. 'pucesli:description' => 'Remplace les puces - (tiret) des articles par des puces -* (<li><ul>...</li></ul>)',

Télécharger

Les variables

Le plugin « Le Couteau Suisse » permet de manipuler facilement des variables agissant sur le fonctionnement public ou privé de SPIP. Ces variables bénéficient donc d’une entrée spécifique (<input>) sur la page de configuration du plugin (ecrire/?exec=admin_couteau_suisse), afin que l’administrateur y porte ses choix. Il y a actuellement 4 types de variables : les cases ’input’ (chaine ou nombre), les boutons "radio", les cases à cocher et les listes de sélection.

Une variable est détectée par le plugin dès qu’elle apparaît dans la chaîne de langue de l’outil ayant besoin d’une variable configurable. Le Couteau Suisse se charge ensuite de créer le formulaire adéquat. Une variable doit apparaitre en suivant le format suivant : [2]. Pour qu’une variable (champ de formulaire au final...) soit attachée au même cadre ("fieldset") que la variable précédente, utilisez le format suivant : [qq chose]. Dans ce cas, seul le label de la première variable est utilisé. Pour un retour à la ligne, utilisez le format suivant : [-].

Le label d’une variable est défini par une chaine de langue au format : ’label:ma_variable’. N’hésitez pas à lire le code du fichier lang/couteauprive_fr.php où sont centralisées toutes les descriptions d’outils du Couteau Suisse.

Voici néanmoins quelques exemples :

  1. $GLOBALS[$GLOBALS['idx_lang']] = array(
  2. 'mes_notes:description' => 'Vous pouvez définir le code ouvrant et fermant pour les notes de bas de pages. [[%ouvre_notes%]][[->%ferme_notes%]]',
  3. 'mes_pixels:description' => 'Limitez à [[%img_max% pixels au maximum]].'.
  4. 'label:ouvre_notes' => 'Votre choix :',
  5. );

Télécharger

Notez bien :
-  Une variable détectée dans une chaîne de langue, mais non déclarée par la procédure add_variable() induira une erreur d’affichage dans la description de l’outil.
-  Une variable déclarée par la procédure add_variable(), mais non détectée dans une chaîne de langue ne pourra pas être configurée et utilisée.

Syntaxe (format simpliste) des déclarations de variables (dans config_outils.php par exemple) :

  1. add_variable( array(
  2. 'nom' => # Un nom unique et sans espace
  3. 'format' => # type de variable : _format_CHAINE ou _format_NOMBRE
  4. 'defaut' => # valeur par défaut prise par la variable
  5. 'code' => # code php inline (la variable est ici représentée par %s) à insérer dans l'outil en lieu et place du raccourci %%ma_variable%%
  6.  
  7. // paramètre optionnels :
  8. 'radio' => # tableau de valeurs ('code' => 'valeur') où 'code' est un choix de réponse et 'valeur' la traduction _T('valeur') affichée dans la description de l'outil sur la page de configuration, sous forme de boutons radio
  9. 'radio/ligne' => # nombre de boutons radio par ligne
  10. 'select' => # tableau de valeurs ('code' => 'valeur') où 'code' est un choix de réponse et 'valeur' la traduction _T('valeur') affichée dans la description de l'outil sur la page de configuration, sous forme d'une liste de sélection
  11. 'check' => # label d'un bouton de type checkbox
  12. 'lignes' => # nombre de lignes (d'un textarea) nécessaires pour une variable de type _format_CHAINE
  13. 'taille' => # taille d'un champ input (en nombre de caractères) pour une variable de type _format_CHAINE
  14. 'code:condition' => # code pris en compte uniquement si 'condition' est vrai (la variable est ici représentée par %s)
  15.  
  16. // variables externes :
  17. 'externe' => # code PHP inline pour récupérer la valeur de la variable externe
  18. 'action' => # code PHP inline (la variable affectable est ici représentée par %s) pour traiter la nouvelle valeur choisie par l'utilisateur
  19. ));

Télécharger

Ces variables sont utilisées dans le code inline utilisé par les outils et le plugin les repère grâce à la syntaxe suivante : %%ma_variable%%. La valeur par défaut est la valeur attribuée à la variable lors de la toute première installation de l’outil en question ou lors d’une réinitialisation générale du plugin (ecrire/?exec=admin_couteau_suisse&reset=oui). Un outil peut sans aucun problème manipuler plusieurs varibles dans son code inline.

Voici un exemple d’outil utilisant une chaine de caractère que l’administrateur du site devra renseigner :

  1. /*
  2. Ici on demande au plugin une case input de type texte.
  3. La variable est : cookie_prefix_var.
  4. A la toute première activation de l'outil,
  5. la valeur sera : $GLOBALS["cookie_prefix"]
  6. Le code inséré dans mes_options sera :
  7.   $GLOBALS['cookie_prefix']="monprefixe";
  8. */
  9. add_variable( array(
  10. 'nom' => 'cookie_prefix_var',
  11. 'format' => _format_CHAINE,
  12. 'defaut' => "\$GLOBALS['cookie_prefix']",
  13. 'code' => "\$GLOBALS['cookie_prefix']=%s;",
  14. ));
  15. add_outil( array(
  16. 'id' => 'cookie_prefix',
  17. 'code:options' => "%%cookie_prefix_var%%",
  18. 'categorie' => 'admin',
  19. ));

Télécharger

Voici un exemple d’outil utilisant une condition simple (grâce à ’code :%s’, le plugin insère le code dans mes_options.php seulement si la variable %s est non nulle) :

  1. /*
  2. Ici on demande au plugin une case input de type texte.
  3. La variable est : forum_lgrmaxi.
  4. A la toute première activation de l'outil, la valeur sera : 0
  5. Si la valeur est différente de zéro (condition : '%s'),
  6. le code inséré dans mes_options sera par exemple :
  7.   define('_FORUM_LONGUEUR_MAXI', 1000);
  8. */
  9. add_variable( array(
  10. 'nom' => 'forum_lgrmaxi',
  11. 'format' => 'nombre',
  12. 'defaut' => 0,
  13. 'code:%s' => "define('_FORUM_LONGUEUR_MAXI', %s);",
  14. ));
  15. add_outil( array(
  16. 'id' => 'forum_lgrmaxi',
  17. 'code:options' => "%%forum_lgrmaxi%%",
  18. 'categorie' => 'admin',
  19. 'version-min' => 1.92,
  20. ));

Télécharger

Pour une condition plus poussée (ici ’code:strlen(%s)’ implique une utilisation du code si la variable %s est de longueur non nulle) :

  1. /*
  2. Ici, si la variable 'style_p' a une longueur nulle,
  3. le code inséré dans mes_options sera :
  4.   $GLOBALS['class_spip']='';
  5. et si la variable 'style_p' a une longueur non nulle,
  6. le code inséré dans mes_options sera par exemple :
  7.   $GLOBALS['class_spip']=' class="maclasse"';
  8. */
  9. add_variable( array(
  10. 'nom' => 'style_p',
  11. 'format' => _format_CHAINE,
  12. 'defaut' => 'spip',
  13. 'code:strlen(%s)' => ' class=%s',
  14. ));
  15. add_outil( array(
  16. 'id' => 'style_p',
  17. 'code:options' => "\$GLOBALS['class_spip']='%%style_p%%';",
  18. 'categorie' => 'public',
  19. 'version-min' => 1.93,
  20. ));

Télécharger

Les boutons radio (choix multiples prédéfinis) sont assez simple à définir. Il suffit de remplir le tableau ’radio’ au sein de la variable en question. Voici un exemple concernant le calcul des adresses du site :

  1. /*
  2. Ici on demande au plugin six boutons radio : _T('page'), _T('html'),
  3. _T('propres'), _T('propres2'), _T('standard'), et _T('propres-qs')
  4. La variable SPIP est : radio_type_urls3
  5. le 'defaut' => 'page' signifie que 'page' (traduit par : _T('cout:page')) sera coché
  6. par défaut à la toute première installation de l'outil.
  7. 'mavaleur' => 'matraduction' signifie que la valeur 'mavaleur' est traduite
  8. par _T('cout:matraduction') dans les fichiers de langue (tweak_spip/lang/).
  9. si l'utilisateur choisi le bouton 'html',
  10. alors le code inséré dans mes_options sera celui-ci :
  11.   $GLOBALS['type_urls']="html";
  12. */
  13. add_variable( array(
  14. 'nom' => 'radio_type_urls3',
  15. 'format' => _format_CHAINE,
  16. 'radio' => array(
  17. 'page' => 'page',
  18. 'html' => 'html',
  19. 'propres' => 'propres',
  20. 'propres2' => 'propres2',
  21. 'standard' => 'standard',
  22. 'propres-qs' => 'propres-qs'
  23. ),
  24. 'defaut' => 'page',
  25. 'code' => "\$GLOBALS['type_urls']=%s;",
  26. ));
  27. add_outil( array(
  28. 'id' => 'type_urls',
  29. 'code:options' => "%%radio_type_urls3%%",
  30. 'categorie' => 'admin',
  31. ));

Télécharger

Les listes de sélection (’select’) fonctionnent sur le même principe. Pour trouver un exemple, lisez le code de l’outil « Débogueur de développement » (fichier outils/devdebug_config.php).

Les variables externes sont des variables qui ne sont pas stockées par le Couteau Suisse. Deux paramètres sont nécessaires dans ce cas : ’externe’ et ’action’. Ceci est un peu équivalent au schéma get/set, appliqué à du code PHP inline. Exemple tiré de l’outil « SPIP et le cache… » :

  1. add_variable( array(
  2. 'nom' => 'compacte_js',
  3. 'check' => 'Compacter le Javacript',
  4. 'externe' => "\$GLOBALS['meta']['auto_compress_js']=='oui'",
  5. 'action' => "ecrire_meta('auto_compress_js', %s?'oui':non);",
  6. ));

Télécharger

Surcharge d’outils existants

Il est possible de surcharger/compléter les outils existants grâce à la fonction suivante, à placer dans config/mes_optionsphp :

  1. // Fonction reconnue par le C.S. pour étendre l'outil "mon_outil"
  2. // Forme : {id_outil}_surcharger_outil($tab)
  3. function mon_outil_surcharger_outil($tab) {
  4. $tab['cle_de_config'] = 'ma_valeur_de_config';
  5. return $tab;
  6. }

Télécharger

Voici un exemple d’extension de l’outil « Corrections automatiques ». Cette fonction permet aux balises #TITRE et #DESCRIPTIF de bénéficier également des corrections automatiques nativement réservées aux balises #TEXTE, #PS et #CHAPO :

  1. function insertions_surcharger_outil($tab) {
  2. $tab['traitement:TITRE:pre_typo,
  3. traitement:TITRE/mots:pre_typo,
  4. traitement:DESCRIPTIF'] = 'insertions_pre_propre';
  5. return $tab;
  6. }

Télécharger

Dysfonctionnements

N’hésitez pas à remonter tout type de dysfonctionnement du plugin, nous essaierons d’y répondre, dans la mesure du possible. Dans un premier temps, tentez quand même de chercher les causes de vos soucis et soyez méthodiques. Le code est gratuit et améliorable ; chacun peut apporter une pierre à l’édifice.

Dans vos messages, soyez précis. Indiquez bien les différentes versions des éléments que vous utilisez : plugin, squelette, SPIP, PHP, etc. Pour débusquer un bug et trouver la source, il faut d’abord isoler le Couteau Suisse en désactivant les autres plugins, puis isoler l’outil défaillant. Désactiver temporairement son squelette et réutiliser le squelette source de SPIP ("dist") peut également donner des informations utiles.

3 moyens de contact :
-  Le forum ci-après, histoire que tout le monde en profite
-  Les listes de diffusion comme spip.zone, sur gmane.org
-  Mail direct, si par hasard vous savez à qui vous adresser

Avant toute chose, assurez-vous d’avoir :
-  la toute dernière version du plugin
-  validé la page des plugins (admin_plugin)
-  validé la page du couteau suisse (admin_couteau_suisse)
-  vidé le cache
-  supprimé le dossier tmp/couteau-suisse

Historique

Pour l’instant, il n’y a pas d’historique officielle. Juste les logs de la version SVN disponibles ici.

L’outil "Boîtes Privées" vous permet de suivre en direct les derniers dépôts SVN. Rendez-vous sur la page de configuration (ecrire/?exec=admin_couteau_suisse).

Perpectives

Le plugin activé, mais sans aucun outil activé ne fait absolument rien de significatif. Des optimisations sont probablement encore à faire. En effet, le plugin fonctionne bien et remplit son office correctement : il précompile les outils à l’avance et facilite ensuite le calcul des pages avant la mise en cache. Mais préserver les ressources est toujours la priorité de ses auteurs et de ses utilisateurs. Ce qui est sûr, c’est qu’il vaut mieux deux outils que deux plugins !

Aujourdhui, trois façon différentes permettent d’écrire des lames. La première est décrite plus haut. Voici les deux suivantes :

1. Cas des fichiers PHP outils/*_config.php

Depuis la version 1.8.09.00 du plugin, une nouvelle façon d’écrire des lames est apparue : la définition et la configuration d’un outil grâce à un fichier PHP « outils/mon_outil_config.php ».

Plus de doc serait maintenant à écrire sur le sujet, mais un rapide coup d’oeil au fichier outils/type_urls_config.php peut donner une idée sur cette façon de faire que nous recommandons.

Quelques exemples : [dev] Le Couteau Suisse à piloter.

2. Cas des fichiers XML outils/*_config.xml

Depuis la version 1.8.10.02 du plugin, une troisième façon (encore expérimentale) d’écrire des lames est apparue : la définition et la configuration d’un ou plusieurs outils grâce à un fichier XML « outils/un_fichier_config.xml ».

Plus de doc serait également à écrire sur le sujet, mais un rapide coup d’oeil au fichier outils/interface_config.xml peut donner une idée sur cette façon de faire. SPIP ne gérant pas encore les données CDATA (indispensables pour le code PHP inline par exemple) insérées dans un fichier XML, il est sans doute utile de faire mûrir cette troisième idée.

Notes

[1N’hésitez pas à vous lancer !

[2texte avant %ma_variable% texte après

Dernière modification de cette page le 22 août 2012

Retour en haut de la page

Vos commentaires

  • Le 23 mai 2007 à 21:08, par Mikado En réponse à : Le Couteau Suisse

    Bonjour, j’ai installé le plugin et j’ai bien l’espace coureau suisse dans configuration... Mon problème est que je ne peux pas changer les données... par exemple :

    Par défaut, SPIP calcule toutes les pages publiques et les place dans le cache afin d’en accélérer la consultation. Désactiver temporairement le cache peut aider au développement du site. Désactiver le cache :
    Non


    Par défaut, la case est cochée non...dans ce cas il m’est impossible de mettre oui...

    Que dois-faire... ?

    Merci pour votre aide...

    • Le 25 novembre 2007 à 13:24, par fred En réponse à : Le Couteau Suisse

      J’ai eu le même problème :
      (192c)

      Il suffit de valider les options (là rien ne change on est d’accord) en suite clique sur valider (en haut à gauche) pour recharger le CS.

      Et normalement tes options de cache sont prise en compte.

      C’est vrai que c’est contraignant (comme si les grèves ne suffisaient pas ;) ) mais il est clair que ce bug sera corrigé dans une prochaine version du plugin ou de Spip.

    • Le 25 novembre 2007 à 18:09, par Patrice Vanneufville En réponse à : Le Couteau Suisse

      Cette petite contrainte n’a-t-elle pas été levée dans la nouvelle interface ?

    • Le 25 novembre 2007 à 22:08, par fred En réponse à : Le Couteau Suisse

      En effet, sur la version que j’ai récupéré aujourd’hui il semblerait que ce soit résolu. Je dis ça parce que j’ai un erreur http302 qui s’immisce dans la manip. Cependant je ne crois pas que ce soit le fait du CS car j’ai cette erreur sur tout le site (notamment lors des sauvegardes/restaurations de la DB. Donc je penche plus du coté de free pour cette erreur

    Répondre à ce message

  • Le 31 août 2007 à 12:55, par JFB En réponse à : Petite proposition pour Glossaire dans Couteau Suisse

    Bjr, Glossaire prend « ses » mots dans le groupe de Mots-Clé « glossaire », ce qui est un bon choix fonctionnel (on peut facilement rajouter des mots) mais peut être assez limitant. Pourrait-on « offrir un choix de personnalisation plus poussé » ( changer le titre du groupe de MC, proposer plusieurs groupes comme source des mots, ne pas avoir à créer de doublon inutile)

    Il est certes possible de modifier le         $r = spip_query("SELECT id_mot, titre, texte FROM spip_mots WHERE type='Glossaire' "); , mais forcément la MAJ suivante fera perdre le minitrunk-là ;:O)

    Perso j’aimerais que le Glossaire soit cohérent avec mon groupe « Dossiers du site » que j’ai donc renommé en « Glossaire » et qui est cohérent avec l’affichage de la page=motxx, mais j’aimerais rajouter une série de mot « définition » (pas de lien vers article) et ne pas avoir à mettre tous mes mots-clé dans le mêm groupe

    Perso il me faudrait aboutir à un         $r = spip_query("SELECT id_mot, titre, texte FROM spip_mots WHERE type='Glossaire' OR type='Programmation' OR type='Definitions'"); ou qqchose d’approchant

    -  site d’exemple Merci

    Répondre à ce message

  • Le 8 juin 2007 à 20:21, par Loiseau2nuit En réponse à : Le Couteau Suisse pour les développeurs

    Eh ben Pat’, je vois que ton plugin a fait du chemin, c’est cool :)

    Là j’ai du pauser un peu mes travaux spipiens mais attend toi à ce que je te rebalance feedbacks sur feedbacks qd je m’y serais remis :P

    Bonne continuation à toi et merci pour tout ce taff que tu abats

    Répondre à ce message

  • Le 2 mai 2007 à 10:27, par ? En réponse à : Le Couteau Suisse pour les développeurs

    bonjour,
    une petite remarque sur les présentations en passant :

    (à croire que personne imprime... )
    les portions de code dans les ascenceurs sont 3 fois sur quatre incomplet à l’impression.

    des fois le code peut être réduit en taille, ici c’est pas le cas...

    (j’ai pas dit merde...!) ;-)

    sur ce,
    bonne continuation à tous les couteaux et à tous les suisses...

    Répondre à ce message

Répondre à cet article

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 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à