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

grâce à cfg !

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

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

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

function gis_insertar_maparticle($flux){
	if (_request('exec')=='articles'){
include_spip('inc/parte_privada');
$flux['data'] .= gis_cambiar_coord($flux['arg']['id_article']);
	}
return $flux;
}

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 :

#CACHE{0}
<form method="post">[(#ENV{_cfg_}|form_hidden)]
[(#REM) descriptif=
<h4>GIS sur quels objets?</h4>
Quel est l'objet qui doit &ecirc;tre trait&eacute;
<br />
<a href="http://www.spip-contrib.net/Plugin-Gis-escoitar" class="spip_out">Documentation GIS</a>
]

[(#REM) titre=GIS]

#SET{wichrub,#CONFIG{gis/rubriques_gis,'',''}}
<h4>Afficher la carte GIS sur quels objets?</h4>
<fieldset>
<legend>Quelle rubrique?</legend>
  <label>Choix de la ou des rubriques &agrave; utiliser:</label>
  <select name="rubriques_gis[]" multiple="multiple" size="5">
<option value="" [(#GET{wichrub}|?{'',' '})selected="selected"]>
aucunes
</option>
  <BOUCLE_secteurs(RUBRIQUES) {racine} {par titre}>
<option value="#ID_RUBRIQUE" [(#ID_RUBRIQUE|in_array{#GET{wichrub}}|?{' selected="selected"'})] style="font-weight: bold;">
<strong>racine #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;rubrique #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>

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)

function gis_insertar_maparticle($flux){
if (_request('exec')=='articles'){
//on teste si cfg est actif
 if (function_exists(lire_config)) {
$arracfgrubriques_gis=lire_config("gis/rubriques_gis",' ');
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/parte_privada');
$flux['data'].= gis_cambiar_coord($flux['arg']['id_article']);
		}
	} 
 }else {
 include_spip('inc/parte_privada');
 $flux['data'].= gis_cambiar_coord($flux['arg']['id_article']);	 
 }
}
return $flux;
}

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.

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

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

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