SPIP-Contrib

SPIP-Contrib

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

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

Accueil > Outils pour plugins > Config (CFG) > Insérer un plugin dans une rubrique spécifique.

Insérer un plugin dans une rubrique spécifique.

grâce à cfg !

10 octobre 2007 – par touti – 14 commentaires

4 votes

Une demande récurrente

Les utilisateurs chevronnés de SPIP ont souvent besoin d’ajouter un plugin spécifique à une rubrique dans l’espace privé.

Par exemple, la rubrique 66 doit faire office d’agenda, on aimerait donc avoir le formulaire de gestion des évènements uniquement si l’article appartient à cette rubrique 66, et quant au groupe de mots-clefs 5, il faudrait que ses mots clefs et ceux-là uniquement permettent de configurer une carte google.

Ici, nous allons seulement montrer comment modifier l’appel du pipeline du plugin GIS pour l’appliquer uniquement sur la ou les rubriques au choix du (ou de la) webmestre.

Qu’est ce qu’un pipeline ?

Lors de la création d’un plugin SPIP, vous avez par exemple besoin d’insérer une boite à gauche, en haut, du code dans le head, ou un formulaire au milieu...on se sert alors d’un pipeline.

Au départ, on pense plutôt à un tuyau, et on a pas vraiment tort, puisque le pipeline va agir sur le flux de la page générée par SPIP.

Les explications et références directes sur les pipelines sont ici !

Chouette ! les devs de SPIP ont installés des points d’entrée le long du flux SPIP, et voila ! vous pouvez donc utiliser affiche_milieu ou post_typo et bien d’autres pipelines pour glisser votre code dans SPIP sans recopier toute la page pour la modifier.

Tout ça c’est du pipeline

Le plugin GIS joue très bien du pipeline, pour savoir où précisement, il faut aller voir dans le dossier /gis le fichier plugin.xml ou sont les définitions des entrées.

Lignes 58 de plugins/GIS/plugin.xml

  1. <!-- Definitions des fonctions qui s'inserent dans les pipelines -->
  2. <pipeline>
  3. <nom>affiche_droite</nom>
  4. <inclure>gis_pipeline.php</inclure>
  5. </pipeline>

Télécharger

Ouvrons ce gis_pipeline.php pour y trouver la fonction d’inclusion qui nous intéresse.

  1. function gis_insertar_maparticle($flux){
  2. if (_request('exec')=='articles'){
  3. include_spip('inc/parte_privada');
  4. $flux['data'] .= gis_cambiar_coord($flux['arg']['id_article']);
  5. }
  6. return $flux;
  7. }

Télécharger

On décortique, et on voit que l’appel se fait uniquement si l’url comporte exec=articles
l’autre bonne idée ici, c’est l’appel d’un autre fichier (include_spip('inc/parte_privada');) qui s’executera alors, c’est ici qu’il faut poser nos conditions !

Ah ah, vous commençez à comprendre que c’est en amont qu’il va falloir jouer maintenant, comment en effet, demander à la fonction gis_insertar_maparticle de choisir les articles de la rubrique que nous voulons ?

Comment CFG entre dans la danse du pipeline

Une fois la fonction de pipeline repérée, on crée le fichier cfg_gis.html pour permettre de choisir les rubriques.

Attention à le mettre dans le dossier fonds comme ceci plugins/gis/fonds/cfg_gis.html

Voici le formulaire et les boucles SPIP adequates :

Ce qui nous importe ici c’est d’avoir définit l’array de la ou des rubriques pour lesquelles nous souhaitons que les articles aient une carte GIS :#SET{wichrub,#CONFIG{gis/rubriques_gis,'',''}}
on remplit donc l’array en validant le formulaire !

le résultat à l’appel du fichier /ecrire/?exec=cfg&cfg=gis

Transformation de la fonction d’appel

Voila maintenant ce que devient la fonction gis_insertar_maparticle($flux)

  1. function gis_insertar_maparticle($flux){
  2. if (_request('exec')=='articles'){
  3. //on teste si cfg est actif
  4. if (function_exists(lire_config)) {
  5. $arracfgrubriques_gis=lire_config("gis/rubriques_gis",' ');
  6. global $id_article;
  7. if ($id_article!=''){
  8. //on cherche la rubrique de l'article
  9. $s = spip_query("SELECT id_rubrique FROM spip_articles WHERE id_article=$id_article");
  10. $row = spip_fetch_array($s);
  11. $id_rubrique = $row['id_rubrique'];
  12. //et si la rubrique est dans l'arrayrub
  13. if (in_array($id_rubrique, $arracfgrubriques_gis)) {
  14. include_spip('inc/parte_privada');
  15. $flux['data'].= gis_cambiar_coord($flux['arg']['id_article']);
  16. }
  17. }
  18. }else {
  19. include_spip('inc/parte_privada');
  20. $flux['data'].= gis_cambiar_coord($flux['arg']['id_article']);
  21. }
  22. }
  23. return $flux;
  24. }

Télécharger

Si cfg n’est pas actif, car parfois les utilisateurs ne l’ont pas, on ignore nos modifications, sinon on utilise ce fameux array $arracfgrubriques_gis=lire_config("gis/rubriques_gis",' '); et si l’article appartient à la rubrique de l’array, on modifie le flux.

Conclusion

Chaque développeur de plugins devrait intégrer ainsi ce merveilleux outil que Toggg a développé pour SPIP.

Dernière modification de cette page le 24 octobre 2013

Retour en haut de la page

Vos commentaires

  • Le 11 janvier 2010 à 00:20, par Augier Guillaume En réponse à : Souci affichage dans les articles sélectionnés

    Bonsoir,

    Voila je viens d’effectuer toutes les étapes dans l’article pour afficher la carte gis que dans une rubrique spécifique. Mais je rencontre un problème la carte apparait sur tous les articles de mon site. Alors que j’ai bien suivi à la lettre les instructions de l’article pourriez vous m’éclairer car je suis un peu désespéré que ça ne fonctionne pas.

    Ce que je souhaiterai en fait ça serait que la carte n’apparaisse que dans les articles de la rubrique TEST GIS de mon site.

    Je travail en local avec un SPIP 2.0.10, un squelette Soyez Créateurs à jour. Je suis un débutant sous SPIP.

    En vous remerciant par avance d’une quelconque aide de votre part.

    Merci

    Répondre à ce message

  • Le 8 janvier 2010 à 15:08, par ? En réponse à : Insérer un plugin dans une rubrique spécifique.

    Bonjour,

    Merci pour cet article !

    Voila je débute dans SPIP et je voudrais faire ceci :

    Donc j’ai une rubrique qui utilise GIS et je voudrais qu’en en appelant le modèle il n’y est que cette rubrique et ses articles qui fassent apparaitre la carte ? (je voudrais éviter de faire un forçage sur l’id de la rubrique)

    Pourriez-vous m’aider ?

    Je suis en local avec un SPIP 2.0.10 et un squelette Soyez Créateurs.

    Merci par avance

    Guillaume

    Répondre à ce message

  • Le 27 février 2008 à 16:05, par touti En réponse à : PB_charts avec mot-clef spécifique

    Merci à Arno* pour son plugin
    http://www.paris-beyrouth.org/Le-plugin-PB-Charts

    J’ai ajouté un fichier pour, je l’espère, une optimisation de ses fonctionnalités.
    Soit un CFG qui permet de choisir le mot clef à attacher aux articles qui sont à traiter par ce plugin,
    cela evite de passer le traitement sur toutes les pages.
    Et si CFG n’est pas installé, ça tourne comme avant.

    +modif de pb_charts_actions.php sur function pb_charts_traiter_charts

    Si vous souhaitez le tester, c’est par là

    http://grainesdimages.com/modifs-ZIP-graines/

    • Le 2 octobre 2008 à 13:25, par Horetol En réponse à : PB_charts avec mot-clef spécifique

      Bonjour,

      Le lien ne semble plus fonctionner. Je souhaitais m’en inspirer pour les mots clefs spécifiques à l’agenda.

      Peut-on le trouver ailleurs ?

      Merci

    • Le 2 octobre 2008 à 14:34, par touti En réponse à : PB_charts avec mot-clef spécifique

      Et voila, le client a repris la main et supprimé le dossier... pas très sympa... j’ai retrouvé les codes, je te les colle là, il faudra peut être les modifier :

      Pour cfg dans fonds/cfg_pbcharts.html

      dans pb_charts_actions.php

      1. function pb_charts_traiter_charts ($texte) {
      2. global $id_article;
      3. if (!$id_article)
      4. #return "on est pas dans un article";
      5. return $texte; // Echec silencieux
      6. //print $id_article;
      7. //si l'article possède le mot clef définit dans cfg, alors on met la pb_charte dessus
      8. if (function_exists(lire_config)) {
      9. $arracfgmot_chart=lire_config("pbcharts/mot_pbcharts",' ');
      10.  
      11. $id_mot=$arracfgmot_chart[0];
      12. //print $id_mot; //s'affiche 2 fois??
      13. if ($id_mot!=' '){
      14. //on cherche si le mot est attache a l'article
      15. $s = spip_query("SELECT id_mot FROM spip_mots_articles WHERE id_mot=$id_mot AND id_article=$id_article");
      16. $row = spip_fetch_array($s);
      17. if (!$row) //l'article n'est pas lie.
      18. #return "il n'y a pas le mot clef attache a cet article";
      19. return $texte; // Echec silencieux
      20.  
      21. else{
      22. #return "le mot est attache on demarre la charte";
      23. return pb_charts_original($texte);
      24. };
      25. }
      26.  
      27. }else{
      28. #return "pas de cfg, on laisse rouler comme avant";
      29. return pb_charts_original($texte);
      30. }
      31. #return "la sortie est par là";
      32. return pb_charts_original($texte);
      33. }

      Télécharger

    Répondre à ce message

  • Le 12 octobre 2007 à 13:25, par Rainer En réponse à : Insérer un plugin dans une rubrique spécifique - Plugin Agenda avec traduc en en

    Bonjour,

    merci pour cette contribution que je viens d’adapter au plugin Agenda en ajoutant des balises multilingues pour des traductions en anglais

    Voici le fichier : agenda_1_9_2\fonds\cfg_agenda.html :

    <script>
    #CACHE{0}
    <form method="post">[(#ENV{_cfg_}|form_hidden)]
    [(#REM) descriptif=
    <h4><multi>Agenda in which sections ?</multi></h4>
    <multi>Which section will be used?</multi>
    <br />
    <a href="http://www.spip-contrib.net/Plugin-Agenda" class="spip_out">Documentation Agenda</a>
    ]

    [(#REM) titre=Agenda]

    #SET{wichrub,#CONFIG{agenda/rubriques_agenda,'',''}}
    <h4><multi>[en]Show the agenda in the follwong sections?[fr]Afficher l'Agenda pour les articles de quelle rubrique?</multi></h4>
    <fieldset>
    <legend><multi>[en]Which section?[fr]Quelle rubrique?</multi></legend>
    <label><multi>[en]Selection of the section to use :[fr]Choix de la ou des rubriques &agrave; utiliser:</multi></label>
    <select name="rubriques_agenda[]" multiple="multiple" size="5">
    <option value="" [(#GET{wichrub}|?{'',' '})selected="selected"]>
    <multi>[en]none[fr]aucunes</multi>
    </option>
    <BOUCLE_secteurs(RUBRIQUES) {racine} {par titre}>
    <option value="#ID_RUBRIQUE" [(#ID_RUBRIQUE|in_array{#GET{wichrub}}|?{' selected="selected"'})] style="font-weight: bold;">
    <strong><multi>[en]root[fr]racine</multi> #ID_RUBRIQUE : #TITRE</strong>
    </option>

    <BOUCLE_rubriques(RUBRIQUES) {id_parent} {par titre}>
    <option [(#ID_RUBRIQUE|in_array{#GET{wichrub}}|?{' selected="selected"'})] value="#ID_RUBRIQUE">
    &nbsp;&nbsp;<multi>[en]section[fr]rubrique</multi> #ID_RUBRIQUE : #TITRE
    </option>
    <BOUCLE_sous_rubriques(BOUCLE_rubriques)></BOUCLE_sous_rubriques>
    </BOUCLE_rubriques>
    </BOUCLE_secteurs>
    </select>
    </fieldset>

    <input type="submit" name="_cfg_ok" value="<:OK:>" />
    <input type="reset" value="<:Reset:>" />
    <input type="submit" name="_cfg_delete" value="<:Supprimer:>" />
    </form>
    </script>

    et dans : \plugins\agenda_1_9_2\agenda.php la fonction Agenda_affiche_milieu (ligne 46) :

    <script>function Agenda_affiche_milieu($flux) {
    if (_request('exec')=='articles'){
    //on teste si cfg est actif
    if (function_exists(lire_config)) {
    $arracfgrubriques_gis=lire_config("agenda/rubriques_agenda",' ');
    global $id_article;
    if ($id_article!=''){
    //on cherche la rubrique de l'article
    $s = spip_query("SELECT id_rubrique FROM spip_articles WHERE id_article=$id_article");
    $row = spip_fetch_array($s);
    $id_rubrique = $row['id_rubrique'];
    //et si la rubrique est dans l'arrayrub
    if (in_array($id_rubrique, $arracfgrubriques_gis)) {
    include_spip('inc/calendar');
    include_spip('inc/agenda_gestion');
    $id_article = $flux['args']['id_article'];
    $flux['data'] .= Agenda_formulaire_article($id_article, article_editable($id_article),'articles');
    }
    }
    }else {
    include_spip('inc/calendar');
    include_spip('inc/agenda_gestion');
    $id_article = $flux['args']['id_article'];
    $flux['data'] .= Agenda_formulaire_article($id_article, article_editable($id_article),'articles');
    }
    }
    return $flux;
    }</script>

    et ajouter

    <script>'supprimer' => 'delete',</script>

    dans squelettes/lang/local_en.php

    Je ne suis pas certain que mon adaptation est parfaite. Notamment dans

    <script>[(#REM) descriptif=
    <h4><multi>Agenda in which sections ?</multi></h4>
    <multi>Which section will be used?</multi>
    <br />
    <a href="http://www.spip-contrib.net/Plugin-Agenda" class="spip_out">Documentation Agenda</a>
    ]</script>

    ou je n’ai pas résussi à mettre la traduction en français, car dés que je mets les

    <script>[]</script>

    il y a tout qui foire et si je mets

    <script><:agenda_section:></script>

    avec des traductions dans les fichiers langues dans squelettes/lang, les trad ne s’affichent pas. Je les ai donc laissé en anglais.

    Salutations

    Rainer

    • Le 17 octobre 2007 à 00:01, par touti En réponse à : Insérer un plugin dans une rubrique spécifique - Plugin Agenda avec traduc en en

      Ah ! super ! Je crois que le fichier de lang doit être nommé ainsi

      plugins/tonplugin/lang/tonplugin_fr.php

      tu l’utilises alors comme cela dans le code d’un squelette <:tonplugin:phrasetraduite:>

    • Le 27 juin 2008 à 09:10, par touti En réponse à : Insérer un plugin dans une rubrique spécifique - Plugin Agenda avec traduc en en

      Pour SPIP 1.9.3 svn (juin 2008) voici le code pour l’agenda

      1. function Agenda_affiche_milieu($flux) {
      2. if (_request('exec')=='articles'){
      3. //on teste si cfg est actif
      4. if (function_exists(lire_config)) {
      5. $arracfgrubriques=lire_config("agenda/rubriques_agenda",' ');
      6. $id_article = $flux['args']['id_article'];
      7. if ($id_article!=''){
      8. //on cherche la rubrique de l'article
      9. $row = sql_fetsel("id_rubrique", "spip_articles", "id_article=$id_article");
      10. $id_rubrique = $row['id_rubrique'];
      11. //et si la rubrique est dans l'arrayrub
      12. if (in_array($id_rubrique, $arracfgrubriques)) {
      13. include_spip('inc/calendar');
      14. include_spip('inc/agenda_gestion');
      15. $flux['data'] .= Agenda_formulaire_article($id_article, article_editable($id_article),'articles');
      16. }
      17. }
      18. }else {
      19. include_spip('inc/calendar');
      20. include_spip('inc/agenda_gestion');
      21. $flux['data'] .= Agenda_formulaire_article($id_article, article_editable($id_article),'articles');
      22. }
      23. }
      24. return $flux;
      25. }

      Télécharger

    • Le 7 juillet 2008 à 17:30, par touti En réponse à : Insérer un plugin dans une rubrique spécifique - Plugin Agenda avec traduc en en

      cette fonction est intégrée dans agenda 1_9_3

    Répondre à ce message

  • Le 18 octobre 2007 à 17:15, par ivandps En réponse à : selon mots clés

    Bonjour

    merci pour la contribe
    peut-on imaginer d’insérer le plugin sur les articles qui ont tel et tel mot clé ?

    • Le 18 octobre 2007 à 17:26, par touti En réponse à : selon mots clés

      Oui, je l’ai fait aussi sur GIS, je ne voulais pas que l’article soit illisible, le principe est le même, donc inutile que tu t’y recolles ! voici la boucle à insérer dans fonds/cfg_gis.html

      1.  
      2. #SET{wichgroup,#CONFIG{gis/groupes_gis,'',''}}
      3. <fieldset>
      4. <legend>Quel groupe de mots?</legend>
      5. <label>Choix du groupe de mots &agrave; utiliser :</label>
      6. <select name="groupes_gis[]" multiple="multiple" size="5">
      7. <option value="" [(#GET{wichgroup}|?{'',' '})selected="selected"]>aucuns</option>
      8. <BOUCLE_gpmots(GROUPES_MOTS){par titre}>
      9. <option value="#ID_GROUPE" [(#ID_GROUPE|in_array{#GET{wichgroup}}|?{' selected="selected"'})]>&nbsp;&nbsp;&nbsp;&nbsp;#ID_GROUPE . #TITRE</option>
      10. </BOUCLE_gpmots>
      11. </select>
      12. </fieldset>

      Télécharger

      et pour récupérer les mots choisis, dans gis_pipeline.php

      1. function gis_gismot($flux){
      2. if (_request('exec')=='mots_edit'){
      3. //on teste si cfg est actif
      4. if (function_exists(lire_config)) {
      5. $arracfggroupes_gis=lire_config("gis/groupes_gis",' ');
      6.  
      7. global $id_mot;
      8. if ($id_mot!=''){
      9. //on cherche le groupe du mot
      10. $s = spip_query("SELECT id_groupe FROM spip_mots WHERE id_mot=$id_mot");
      11. $row = spip_fetch_array($s);
      12. $id_groupe = $row['id_groupe'];
      13. //si le groupe est dans l'array
      14. if (in_array($id_groupe, $arracfggroupes_gis)) {
      15. include_spip('inc/parte_privada');
      16. $flux['data'] .= gis_mots($flux['arg']['id_mot']);
      17. }
      18.  
      19.  
      20. }
      21.  
      22. }else{
      23.  
      24. include_spip('inc/parte_privada');
      25. $flux['data'] .= gis_mots($flux['arg']['id_mot']);
      26. }
      27. return $flux;
      28. }
      29. }

      Télécharger

      ça marche bien !

    • Le 18 octobre 2007 à 17:39, par touti En réponse à : selon mots clés

      Arf, j’ai lu trop vite,

      Il faut rester générique, ç’est ça qui est intéressant, et choisir le groupe que l’on veut.

      J’ai pour ma part opté pour un groupe « lieu » dans lequel au surprise les mots clefs sont des lieux avec carte configurée, je demande à cfg de n’appliquer la carte que sur ce groupe (grace au code précédent) et je désactive la carte sur les articles (cfg= aucune rubrique), puis j’affilie le mot clef à l’article que je veux.

      ça marche ici http://www.contrelesaddictions.fr/ en un peu plus poussé encore puisque j’ai modifié le squelette pour faire apparaitre les évènements d’un lieu donné. Le groupe lieu est lié alors uniquement aux évènements.

    • Le 18 octobre 2007 à 18:21, par ivandps En réponse à : selon mots clés

      Excellent !

      Et en plus le squelette du site est très sympa.
      Il n’est pas sur la zone par hasard ? ;-)

      Merci !

    • Le 18 octobre 2007 à 18:37, par touti En réponse à : selon mots clés

      Je n’ai pas remercié ici les créateurs du squelette multi-saisons pour SPIP, dont je me suis servi largement http://www.art-logic.info/multi_saisons/

      pas le temps d’envoyer toutes mes modifs depuis, merci encore à eux

      pour le squelette de la carte glouglou special events, faut piocher !

      un de ces 4 je le ferais ;) mais je le réserve à art-logic si ils le veulent ;)

    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

  • Le plugin FreeRadio 1.0

    25 mai 2011 – 29 commentaires

    Le plugin SPIP FreeRadio est un lecteur de flux audio gratuit à intégrer dans le corps des articles. Il permet de se mettre « à l’écoute » de WebRadios ou de sons à partir de leurs URL. FreeRadio est écrit en actionscript. Facile à intégrer, il est (...)

  • Mailsubscribers

    16 janvier 2013 – 274 commentaires

    Ce plugin permet de gérer les inscriptions (ou abonnements) à la diffusion de contenu par email. Mailsubscribers permet de gérer les inscriptions par Opt-in simple ou double et la désinscription par URL. Ce plugin gère également plusieurs listes (...)

  • noiZetier v2

    9 novembre 2012 – 36 commentaires

    Le noiZetier offre une interface d’administration permettant d’insérer au choix des éléments modulaires de squelettes (noisettes) et de les ajouter ainsi à ses squelettes. Compatibilité La version 2 du noizetier fonctionne sous SPIP 3. Elle est (...)

  • cirr : plugin « rédacteur restreint »

    29 octobre 2010 – 60 commentaires

    Ce plugin « cirr : rédacteur restreint » permet d’affecter des rubriques aux rédacteurs et modifie les droits afin qu’un rédacteur restreint (ou un administrateur restreint) voit dans l’espace privé uniquement les rubriques qui lui sont affectées (et leur (...)

  • Un retour d’expérience d’utilisation de Formidable

    26 octobre – commentaires

    Il s’agissait de créer un formulaire d’inscription à un évènement modérer les inscriptions dans le privé publier les inscriptions dans le public Nous avons discuté de cette présentation lors de l’apéro SPIP du 15 février 2016 à la Cantine (...)

Ça spipe par là