Les pipelines sont un mécanisme récent et extrèmement puissant qui permet aux plugins d’intervenir dans la fabrication des pages publiques et privées.
De façon très générale, une fonction pipeline récupère un “flux”, le modifie éventuellement puis le renvoie. Par exemple, pour un flux de type texte, elle peut analyser le texte qu’elle reçoit et y rajouter des morceaux comme elle le désire. Celà se fait le plus souvent par des expressions régulières. Attention, vu que le plugin n’est pas tout seul à agir sur ce flux, il est fondamental de renvoyer ce qu’on a reçu, modifié ou non.
Déclaration
Un plugin s’intercale dans un pipeline en déclarant sa fonction dans le tableau global $spip_pipeline. Attention, cette déclaration doit ajouter sa propre fonction précédée d’un pipe |, ceci afin de ne pas écraser les insertions des autres plugins. Pour les plugins, cela est fait automatiquement par l’administration plugins d’après le fichier de définition plugin.xml vu dans le chapitre suivant, donc pas de souci si on utilise ce moyen.
Les pipelines disponibles
Voir le script ecrire/inc_version.php pour une liste actualisée.
| Nom | Type | Description | Flux | Défaut |
|---|---|---|---|---|
| affichage_final | P | Contenu final | Texte | f_surligne, f_tidy, f_admin |
| affiche_droite | E | Colonne droite | T1 | |
| affiche_gauche | E | Colonne gauche | T1 | |
| affiche_milieu | E | Colonne milieu | T1 | |
| ajouter_boutons | E | Boutons navigation | OB | |
| ajouter_onglets | E | Onglets sous bouton | T2 | |
| body_prive | E | Corps de page | Texte | |
| exec_init | E | Initialisation ? | T1 | |
| header_prive | E | Header | Texte | f_jQuery |
| insert_head | P | Header | Texte | f_jQuery |
| insert_js | P | js fichier ou inline | T3 | |
| verifie_js_necessaire | P | Booléen js nécessaire | T4 | |
| mots_indexation | F | Mots à indexer | T5 | |
| nettoyer_raccourcis_typo | T | Nettoyer raccourcis typos | Texte | |
| pre_propre | T | Avant propre() | Texte | extraire_multi |
| post_propre | T | Après propre() | car insurance ex() | |
| pre_typo | T | Avant typo() | Texte | extraire_multi |
| post_typo | T | Avant typo() | Texte | quote_amp |
| pre_edition | E | Avant éditer objet | T6 | premiere_revision |
| post_edition | E | Après éditer objet | T6 | nouvelle_revision |
| pre_syndication | P | Flux RSS | Texte | |
| post_syndication | P | Flux RSS | T7 | |
| pre_indexation | F | Avant indexation | Texte | |
| requete_dico | F | Recherche dictionnaire | T8 | |
| agenda_rendu_evenement | P | Rendu agenda | T9 | |
| taches_generales_cron | F | Tâches CRON | Cron | |
| calculer_rubriques | F | Calcul des rubriques | Null |
Types de plugins :
- P : espace public
- E : espace privé (ecrire/
- T : Texte ou Typographie
- F : Tâche de fond
Types de flux
| Type | Composition |
|---|---|
| Texte | Du contenu sous forme de texte |
| T1 | array(’args’=>array(’exec’=>’…’),’data’=>’’)) |
| T2 | array(’data’=>$onglets,’args’=>$rubrique) |
| T3 | array(“type” => “fichier/inline”,”data” => array()) |
| T4 | array(“page” => $page, “data” => “”) |
| T5 | array(’args’=>array(’min_long’=>…),’data’=>array(mots)) |
| T6 | array(’args’ => array( ’table’=>’spip_…’, ’id_objet’=> … ), ’data’=>champs ) |
| T7 | array(lien, id_syndic, données) |
| T8 | array(’args’=>array(’val’=>…,’min_long’=>…),’data’=>requète) |
| T9 | array(’args’=>array(’evenement’=>$evenement, ’type’=>’ics/avec_heure/sans_heure’), ’data’=>$sum) |
| OB | Objet Bouton |
| Cron | Tableau de délais (secondes) par tâche |
Tout cela est assez compliqué et en pleine mutation, il faut malheureusement souvent étudier le code du core ou des exemples life insurance quotes d’autres plugins pour comprendre comment utiliser les pipelines complexes. Les types “texte” sont en général plus faciles à mettre en oeuvre.