Un pipeline c’est quoi ?

Au-dela du principe du pipeline conceptuellement simple à imaginer, et de la documentation de l’existant, quelques explications plus pratiques.

Article publié le 31 décembre 2021, et actualisé en décembre 2021

 
 
 
 
 
 
 
 
 
 
 
 

 Un concept simple

Si le vocable utilisé —pipeline— reprend l’image des ’pipes’ linux ou oléoducs,pour évoquer l’enchainement de fonctions de transformation successives appliqués à un donnée native (quelque part... dans les internes de SPIP), les architectes de SPIP ont développé un concept un peu plus général, en prévoyant non seulement des ’points de dérivation’ dans le source core de Spip, destinés à pouvoir y brancher un ’traitement’ (une fonction PHP de transformation) programmable externe, mais aussi tout le système d’activation pour déclencher le traitement, ciblant essentiellement l’intégration dans un plugin, donc un paramétrage à implanter dans le paquet.xml.

Donc un pipeline repose sur un trépied :

  1. le traitement : il faut décrire le traitement voulu, à coder dans la fonction de process du pipeline codé dans cette fonction, toujours appelée dès l’activation dans SPIP [1]
  2. l’activation : désigne au pipeline ciblé, l’appel de la fonction ’traitement’ voulue, programmée ci-dessus qui va venir ’dériver’ le flux normal SPIP,
  3. le point de branchement : c’est ce point nommé de pipeline, introduit dans le core de SPIP, qui doit être préparé pour appliquer ces fonctions de traitement externes au cours du flux de traitement de SPIP : plusieurs plugins peuvent demander des traitements complémentaires ’enchaînés’ à la suite au moment de traiter un type d’opération éligible en pipelinable..
    Cet enchainement/empilement de diverses fonctions d’origines étendues (selon plusieurs pipelines) justifie bien l’image des ’tuyaux emmanchés’, à charge à chacune des fonctions de traitement de commencer par vérifier ses propres conditions d’application, avant d’appliquer son traitement complémentaire (sur la situation peut-être déjà modifiée par une autre fonction de pipeline).

 Pourquoi

Spip se distingue déjà par la diversité des moyens de personnalisation : formalisation des squelettes ’templates’ de pages, paramétrages par variables dans l’URL, modularité en noisettes, individuellement surchargeables, ajouts de plugins permettant l’insertion de nouveaux traitements ou pages, surcharge des fonctions... Et il en faut encore ?
Prenons un exemple —d’actualité— : on voudrait, pour faciliter l’ergonomie de gestion de la médiathèque dans l’espace privé, rajouter aux options de sélection (nombreuses /voyez ci-dessous) un tri alphabétique des images par nom de fichier (histoire de ré-organiser les nombreux ’doubles’ dans les photos d’illustration des articles...) sachant que SPIP garanti le non-ecrasement des document joints en gérant l’unicité du nom enregistré !
Pour trier la boucle d’affichage, SPIP 3+ dispose d’un critère {tri ..} interactif : plus précisément il suffirait d’ajouter juste cecode [(#TRI{fichier,<:medias:par_nom_du_fichier :>}) |] pour...
Effectivement, on pourrait effectuer une surcharge de la noisette concernée dans ./squelettes/prive/squelettes/inclure/mediatheque-galerie-.html, sauf qu’il est probable que certaines lignes de code changent lors des prochains releases de la Mediathèque, avec risques de dé-synchronisation entre les sources...

Si un pipeline permettait d’insérer du code SPIP-HTML avant la première étape de compilation SPIP cela permettrait de se dégager de ces contraintes ; mais il n’existe actuellement qu’un pipeline récuperer_fond qui intervient après cette première compilation : il y a bien aussi le plugin pre_boucle ,mais celui-ci nécessite la maitrise de l’analyse des boucles issues du compilateur SPIP...

On peut envisager un autre type de besoins : il existe déjà un plugin affiche_milieu pour modifier un écran de l’espace privé, utilisé par le plugin-dist Mots (standard sous SPIP) pour insérer un formulaire pour ajouter la gestion des mots-clés : le pipeline rajoute le recuperer_fond() de ce formulaire concaténé à la fin, celui-ci est rejeté dissimulé tout en bas de l’écran, or l’ergonomie des mots-clés utilisés pour qualifier les images s’attendrait à le voir apparaitre juste en-dessous de l’affichage des caractéristiques...
Impossible alors, sauf a refaire des surcharges (et retomber dans les risques d’incompatibilités entre plugins, bien connus à la naissance de ce site. (années 2010 : entre SPIP 2 et SPIP 3)..

Avec l’existence d’un plugin patcher_fond, capable d’insérer à la lecture du fichier squelette original, ses éléments HTML juste avant ou après une chaine de texte-repère passée en paramètre, toutes ces ambitions seront mises a la portée d’un simple webmestre, le risque étant seulement que le compilateur SPIP refuse le squelette patché... Cela ne remettra pas en cause la solidité et la pérennité de l’applicatif ergonomiquement construit autour de SPIP.
Encore une autre solution apportée : voulant remplacer dans toutes les Saisies le qualificatif "Obligatoire" par la simple astérisque (*) rouge déjà utilisée dans les logiciels de la structure, je n’ai su trouver d’autre solution que de surcharger les noisettes de Saisies : mission impossible, vu le rythme de mises à jour qu’a connu ce plugin.... Je crois qu’ils ont rajouté un pipeline interne...


Vous êtes convaincus de l’utilité et de la souplesse d’un pipeline ?
Ne reste plus qu’à implémenter les trois points-pieds !


 1. La fonction de traitement

Le pipeline déclenche l’appela votre fonction, avec les paramètres contextuels, dans tous les cas possibles ! Si vous souhaitez cibler certains cas,votre fonction devra commencer par vérifier les conditions d’éligibilité du contexte a votre traitement prévu ;puis vous programmerez les actions voulues...

 2. Paramétrage de l’activation

Normalement ! l’ ctivation d’un pipeline s’opère par une description dans le[paquet.xml] d’un plugin, une ligne pour associer le nom de votre fonction de traitement (à stocker dans plugin_pipeline_fonctions.php) au nom du pipeline concerné. En fait cette interface va surtout prè-coder l’ajout du nom de fonction (son fichier source) en concaténation à la chaine valeur à l’une des variables globales tableau, à l’indice du nom du pipeline : au point de branchement d’appliquer l’appel de chacune des fonctions fournies.

 3. Trouver le point de branchement

Là, pas de mystère : soit il existe déjà (et vous pouvez vous reporter au source SPIP pour comprendre le contexte d’usage, surtout s’il s’agit d’un filtre de contenu), soitvous rajoutez une fonction d’appel dans votre code de plugin (dans le source SPIP, c’est..... X ).


Merci de nous signaler les coquilles, imprécisions ou erreurs qui figureraient dans cette page.

[1D’où, il manque encore une manipulation "console" de SPIP /j’entends, facile à déclencher pour un Webmestre limité à Skeleditor/ désactiver-ré-activer rapidement un plugin avec une simple URL en ligne de commande, analogue à spip_loader ! Si cela existe ?


Liens A2A visibles seulement pour les inscrits.
Liens visibles seulement pour les inscrits.

Article publié le 31 décembre 2021, et actualisé en décembre 2021 .

Répondre à cet article