Plugin Fil d’Ariane

Ce plugin est destiné à faciliter la création du petit menu de navigation, communément appelé « fil d’Ariane » et permettant de situer un objet éditorial dans un site SPIP.

Il s’emploie dans les squelettes et évite de faire des boucles compliquées pour parvenir à créer un fil d’Ariane uniforme pour tout un site. L’idée est de déporter toute la complexité dans le plugin !

L’intégrateur appelle juste une balise #FIL_ARIANE dans son squelette, et le plugin se charge de récupérer le type d’objet et son identifiant, à partir du contexte, et de créer un magnifique fil d’Ariane sans avoir eu à écrire une seule ligne de code !

Par exemple, dans une boucle « article », et pour un article situé dans une sous_rubrique, la balise suivante #FIL_ARIANE provoquera l’affichage suivant :
Racine du site > Rubrique > Sous rubrique > Titre de l’article

Pour mémoire, voici le code SPIP [1] qui permet de parvenir à un résultat équivalent, et que la balise #FIL_ARIANE peut tout à fait remplacer [2] :

<div id="hierarchie"><a href="#URL_SITE_SPIP/"><:accueil_site:></a><BOUCLE_ariane(HIERARCHIE){id_article}> &gt; <a href="#URL_RUBRIQUE">[(#TITRE|couper{80})]</a></BOUCLE_ariane>[ &gt; <strong class="on">(#TITRE|couper{80})</strong>]</div>

Installation

Dans sa version 0.1 le plugin contient à la fois un fichier plugin.xml et un fichier paquet.xml. Il est donc compatible SPIP 2.1 et SPIP 3.0. Il s’installe comme n’importe quel plugin SPIP (voir les procédures d’installation recommandées).

Utilisation

Comme pour une boucle « articles » on peut utiliser la balise #FIL_ARIANE au sein d’une boucle « rubrique ». Ainsi au sein d’une boucle « rubriques » la balise #FIL_ARIANE affichera :
Racine du site > Rubrique > Sous rubrique > Titre de la rubrique

Le cas des organisations [3] a déjà été traité, permettant de retrouver la hiérarchie d’une organisation en tenant compte des mères et des filles. Une balise #FIL_ARIANE au sein d’une boucle « organisations » donnera l’affichage suivant :
Racine du site > Maison mère > Filiale

Les mots ont été traités aussi ; mais pas encore les sites [4].

Utilisation en dehors d’une boucle

Il est possible d’indiquer manuellement à la balise #FIL_ARIANE les éléments du fil. Chaque élément du fil est constitué d’un couple (titre + lien). Les éléments (donc les couples titre + lien) sont passés sous forme de tableau SPIP, en paramètre de la balise.

Pour que le 1er élément après le lien vers l’accueil soit par exemple le texte « Le monde » avec un lien vers la page « le_monde », on écrira d’abord un tableau SPIP sous cette forme :

#ARRAY{'Le monde',#URL_PAGE{le_monde}}

puis on placera ce tableau en paramètre de la balise comme ceci : [(#FIL_ARIANE{[(#ARRAY{'Le monde',#URL_PAGE{le_monde}})]})]

Il en va de la même logique pour insérer d’autres éléments dans le fil : des couples (titre/lien) que l’on placera dans un tableau SPIP en paramètre de la balise. Le dernier élément apparaîtra en gras. On peut ainsi imaginer le fil d’Ariane suivant :

[(#FIL_ARIANE{ [(#ARRAY{ 'Journaux', #URL_PAGE{les_journaux}, 'Le monde', #URL_PAGE{le_monde}, 'Page sports', #URL_PAGE{sports} })] })]

qui donnera l’affichage suivant :
Racine du site > Journaux > Le monde > Page sports

Paramétrages (optionnels)

Il n’y a rien d’autre à faire pour utiliser la balise #FIL_ARIANE que d’installer le plugin et mettre la balise dans un squelette. Cependant, quelques paramétrages optionnels sont disponibles pour adapter finement le comportement de la balise aux souhaits du webmestre qui l’utilise.

La constante _FIL_ARIANE_ACCUEIL permet de définir si le fil d’Ariane doit commencer ou non par un lien vers la page d’accueil. Par défaut le fil d’Ariane contient le lien vers la page d’accueil. Pour que le fil d’Ariane commence au 1er élément (sans l’accueil donc) il faut redéfinir la constante _FIL_ARIANE_ACCUEIL dans les options du site (le fichier mes_options.php) qui est par défaut à true, de cette manière :

  <?php
  define('_FIL_ARIANE_ACCUEIL',false);
  ?>

Ainsi notre exemple de fil d’Ariane dans une boucle article donnerait le résultat suivant :
Rubrique > Sous rubrique > Titre de l’article

Depuis la version 0.1.6 la constante _FIL_ARIANE_LIEN permet de définir si le dernier élément doit être un lien ou non. La constante est à false par défaut. Pour mettre le lien sur le dernier élément, il faut redéfinir la constante de cette manière :

  <?php
  define('_FIL_ARIANE_LIEN',true);
  ?>

Avec une constante _FIL_ARIANE_LIEN définie à true, la balise #FIL_ARIANE dans une boucle article donnerait le résultat suivant :
Accueil du site > Rubrique > Sous rubrique > Titre de l’article

Les 2 autres paramétrages possibles sont la classe CSS et le caractère séparateur . Par défaut le conteneur du fil porte la classe CSS fil_ariane hierarchie breadcrumb mais celui-ci peut etre changé avec la constante _FIL_ARIANE_STYLE. Par défaut le séparateur est le code "&gt;" permettant d’afficher le signe « > » mais celui-ci peut etre changé avec la constante _FIL_ARIANE_SEP.

À l’attention des développeurs

Il est possible de définir un fil d’Ariane particulier pour un objet éditorial SPIP donné. Pour cela il suffit d’écrire une fonction fil_ariane_monobjet_dist(). Le rôle de cette fonction est d’appeler la fonction qui génère le tableau de couples (titre/lien) constituant le fil d’Ariane. Il faut préciser 4 paramètres :

  • le nom de l’objet
  • la valeur de la clé primaire de l’objet
  • le nom du champ contenant le ’titre’ de l’objet
  • ainsi que le nom du champ contenant le parent de l’objet.

Voici l’exemple pour les organisations :

  function fil_ariane_organisation_dist($id_organisation) {
    return fil_ariane_hierarchie_objet('organisation', $id_organisation, 'nom', 'id_parent');
  }

À partir de la version 0.1.8 le plugin traite l’objet produit et affiche la hiérarchie des rubriques parentes d’un produit.

Styles

Le fil d’Ariane ainsi construit porte par défaut la class « fil_ariane ». Le plugin ajoute une petite feuille de style fil_ariane.css permettant de styler les éléments. L’intégrateur pourra facilement surchargerr ces styles dans ses propres feuilles de style.

Évolutions

On peut imaginer de pouvoir préciser le « contenant » du fil d’Ariane : par défaut il s’agit d’un bloc div portant la class « fil_ariane », contenant lui même une suite de liens ; mais cela pourrait très bien être un bloc de liste <ul> avec des éléments de liste <li>.

On pourrait aussi préciser la classe CSS du contenant : par défaut il s’agit de class=« fil_ariane », mais ça pourrait être aussi class=« hierarchie ».

À partir de la version 0.1.9 le conteneur du fil d’Ariane comporte par défaut les classes CSS « fil_ariane », « hierarchie », et « breadcrub » [5]. Il est possible de modifier ces classes dans la constante _FIL_ARIANE_STYLE. Par défaut le fil d’Ariane est contenu par un <div class="fil_ariane hierarchie breadcrumb">

On pourrait enfin préciser le caractère de séparation entre les éléments du fil ; par défaut il s’agit du caractère « > » mais ça pourrait aussi très bien être un « | », ou même une imagette.

À partir de la version 0.1.9 on peut préciser le caractère séparateur (par défaut " &gt ") dans la constante _FIL_ARIANE_SEP. De plus, ce séparateur est contenu par un élément pourvu des classes CSS « sep » et « divider » ; par défaut le séparateur est <span class="sep divider"> &gt; </span>.

On pourrait aussi mettre dans les options du site, si l’on souhaite ou non un lien sur le dernier élément du fil (par défaut il y en a un).

fait à partir de la version 0.1.7

Notes

L’objectif de ce plugin est de rendre le plus automatique possible la création d’un fil d’Ariane. Au pire si le plugin n’est capable de rien trouver (pas appelé dans une boucle, aucun paramètre passé, etc.) il affichera quand même a minima la racine du site avec un lien.

Notes

[1issu de la dist de SPIP 2.1

[2tout en ajoutant des styles complémentaires sur le séparateur et sur le contenant du fil

[3Voir le plugin Contacts & Organisations

[4en date du 19/9/2012

[5pour bootsrtap

Discussion

7 discussions

  • Bonjour,
    Est-ce qu’une mise à jour du Fil d’Ariane est prévue pour Spip 3.2.8 ? Merci, bien cordialement, Thierry

    Répondre à ce message

  • 1
    obiwanriko

    Bonjour
    Intéressé par ce plugin, je souhaiterais savoir si il peut répondre à un besoin spécifique :
    N’afficher que la rubrique parent de l’article où sera appelé #FIL_ARIANE
    Est-ce possible ?

    • Bonjour

      En fait il suffirait de plutot utiliser la balise #INFO_TITRE{rubrique,#ID_rubrique}
      Pas la peine de complexifier ce plugin..

    Répondre à ce message

  • Christophe Noisette

    Bonjour
    merci pour ce plugin qui facilite l’écriture du fil d’ariane. En revanche, je n’ai pas compris comment appliqué mes class sur les liens... J’aimerais que accueil et les rubriques s’affichent en utilisant la class=« lienmenu ». J’ai essayé de modifier le fichier fil_ariane_fonctions.php... en vain
    En revanche, j’ai réussi à mettre la class que je voulais sur le dernier terme de ce fil.
    Cordialement
    Christophe

    Répondre à ce message

  • 1
    Alexandra

    Coucou, Cyril et Mathieu
    Comment fait on pour intégrer une chaine de langue dans l’array pour les type page speciale.
    ce code ne marche pas

    [(#FIL_ARIANE{[(#ARRAY{'<:plan_site:>',#URL_PAGE{plan}})]})]

    Merci

    • Alexandra

      Je me répond au cas où ca puisse servir à d’autres, enfin Kent1 me souffle la réponse :-)

      [(#FIL_ARIANE{[(#ARRAY{[(#VAL{diplonet:plan_site}|_T)],#URL_PAGE{plan}})]})]

    Répondre à ce message

  • Bonjour,

    Un élément de documentation supplémentaire ou du moins un exemple d’utilisation du plugin.

    Si vous êtes amenés comme moi à utiliser fil d’ariane avec spipr-dist (ce n’est qu’un exemple) où vous avez un inclure qui gère le fil d’ariane (au sens propre à SPIP), il vous faut passer le nom de l’objet et l’id_objet de cette façon :
    #FIL_ARIANE{#GET{objet},#GET{id_objet}}

    Soit un code au complet :

    	#SET{objet,''}#SET{id_objet,''}
    
    	[(#ENV{id_rubrique}|oui)#SET{objet,rubrique}#SET{id_objet,#ENV{id_rubrique}}]
    	[(#ENV{id_syndic}|oui)#SET{objet,site}#SET{id_objet,#ENV{id_syndic}}]
    	[(#ENV{id_breve}|oui)#SET{objet,breve}#SET{id_objet,#ENV{id_breve}}]
    	[(#ENV{id_article}|oui)#SET{objet,article}#SET{id_objet,#ENV{id_article}}]
    	[(#ENV{id_objet}|oui)#SET{objet,#ENV{objet}}#SET{id_objet,#ENV{id_objet}}]
    
    	[(#GET{objet}|oui)
        #FIL_ARIANE{#GET{objet},#GET{id_objet}}
    	][(#GET{objet}|non)
    	<li><a href="#URL_SITE_SPIP/"><:accueil_site:></a><span class="divider"> &gt; </span></li>
    	]

    Répondre à ce message

  • 3

    Il serait intéressant de bien mettre en valeur dans l’article les avantages par rapport à la boucle hierarchie, déjà prévue pour cela, et implémentée dans la dist.
    Bref de vendre le produit :-)
    En effet c’est un peu flou et la simplicité présenté au début est contre-balancée par la masse de paramètres à bidouiller dans le fichier « mes fonctions »
    Or, un plugin, c’est surtout fait pour ne pas mettre les mains dans le camboui et ajouter/gérer les options de manière graphique.
    Bonne journée

    • Merci pour ce commentaire.

      La balise #FIL_ARIANE n’est pas à vendre ! En revanche, elle est donnée de bon coeur.

      A l’usage, écrire #FIL_ARIANE dans un squelette me semble plus facile que son équivalent en code SPIP :

      <p id="hierarchie"><a href="#URL_SITE_SPIP/"><:accueil_site:></a><BOUCLE_ariane(HIERARCHIE){id_article}> &gt; <a href="#URL_RUBRIQUE">[(#TITRE|couper{80})]</a></BOUCLE_ariane>[ &gt; <strong class="on">(#TITRE|couper{80})</strong>]</p>

      Il n’y a rien d’indispensable à régler dans mes_options, seulement des « options » : avec/sans « Accueil » en premier élément (avec par défaut), et avec/sans lien sur le dernier élément (sans par défaut).

      De plus le plugin est facilement adaptable pour tout nouvel objet éditorial disposant d’une hiérarchie, tel que par exemple l’objet produit. Et là, oui, il faut mettre (un tout petit peu) les mains dans le camboui et ajouter une fonction qui gère le nouvel objet.

      Bonne utilisation !

    • Hirondelline

      Je ne comprends toujours pas.

      Le code SPIP pour le fil d’Ariane est écrit automatiquement, nous n’avons pas à l’écrire manuellement. Alors où est l’intérêt d’installer un plug-in pour « simplifier » quelque chose d’automatique dont nous n’avons déjà pas à nous occuper et qui fonctionne parfaitement bien comme ça ? Autre que pour une question purement esthétique, je ne vois pas.

      Je crois que c’est ce dont jfd parle.

    • Bonjour,

      Effectivement, il y a déjà du code SPIP qui génère une hiérarchie, dans les différent squelettes distribués (la « dist »). En revanche pour l’écriture de squelettes sur mesure, j’ai trouvé plus facile (sans parler d’esthétique) d’utiliser une balise automatique, plutôt que de recopier le code de la dist.

      Les développeurs de squelettes ont à leur disposition deux solutions (balise #FIL_ARIANE ou recopie de 4 lignes de code qui font la même chose) qu’ils peuvent utiliser librement selon leurs besoins ou leurs envies.

    Répondre à ce message

  • Merci Rastapopoulos pour la relecture, les corrections et les améliorations :-)

    Répondre à ce message

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