Accueil > Articles et ressources > Bac à sable > Exemple d’utilisation d’un pipeline SPIP

Exemple d’utilisation d’un pipeline SPIP

Une brève procédure pour expliquer l’utilisation d’un pipeline SPIP. Un pipeline est une fonctionnalité du le gestionnaire de contenu SPIP. Ce système de points d’entrée permet d’ajouter des traitements (calcul, affichage d’infos spécifiques, etc...) à SPIP sans modifier une seule ligne de code au coeur de l’application.

Un rédacteur a besoin de connaitre le nombre de caractères du texte d’un article avant de le publier. Ce calcul et l’affichage n’étant pas prévu par SPIP dans sa version officielle, il va falloir mettre les mains dans le camboui :)

On pourrait directement trouver la page concernée dans l’espace privé et la modifier dans le code de SPIP. Seulement, ces modifications risquent d’être écrasées lors d’une mise à jour du logiciel. Pour éviter cela, SPIP offre aux développeurs un mécanisme qui permet de surcharger les fonctions existantes ou en ajouter d’autres plus spécifiques.

Comme indiqué précisément, le système des pipeline va être utilisé. Le pipeline "affiche_milieu" convient parfaitement pour ajouter une information dans les pages d’affichage des articles dans l’espace privé (le back office du site).

Appel du pipeline

Les "pipeline" sont en général utilisés par un plugin dans lequel le fichier de configuration "plugin.xml" permet de les déclarer. Ici, une autre méthode est utilisée : l’utilisation du fichier "mes_options.php" à placer dans le répertoire config du site.

Déclaration du pipeline :

$GLOBALS['spip_pipeline']['affiche_milieu'] .= "|nombre_caracteres_article";

On voit que la déclaration du pipeline s’effectue en modifiant un tableau $GLOBALS[’spip_pipeline’] qui est géré par SPIP.
La chaine |nombre_caracteres_article indique qu’on va envoyer le flux qui contient les données à la fonction nombre_caracteres_article.

Fonction de traitement

Il faut maintenant créer la fonction qui va exécuter le traitement. Voici le code, à placer dans le fichier squelettes/mes_fonctions.php :

function nombre_caracteres_article($flux){
   // La fonction s'exécute si on est sur l'url ecrire/?exec=articles&id_article=XXX
    $exec = $flux["args"]["exec"];
   if ($flux['args']['exec'] == "articles") {
       
        $id_article = $flux["args"]["id_article"];
        // Récupère le texte de l'article et le nettoie
        $texte = attribut_html(sql_getfetsel('texte', 'spip_articles',"id_article=$id_article"));
        // Compte le nombre de caractères dans la chaine
        $nb_car = strlen($texte);
        // le code html à retourner
        $ret = '<div class="nombre_caracteres_article"><strong>Longueur du texte : '.$nb_car.' caractères</strong>.</div>';
        $flux["data"] .= $ret;
    }
    return $flux;
}

Sauvegarder le fichier et vider le cache du site.
La longueur du texte de l’article s’affiche maintenant sur les pages articles dans l’espace privé :)

favicon Liste des pipelines SPIP

4 Messages

Répondre à cet article