SPIP - Contrib

SPIP - Contrib

[ar] [en] [es] [fr] [it]

66 visiteurs en ce moment

fontsizeup fontsizedown
Accueil du site > Contribs > Documentation > Archives documentation > Bidouilles pour avant SPIP 1.9 > Obtenir le niveau d’imbrication d’une rubrique

Obtenir le niveau d’imbrication d’une rubrique

dimanche 16 février 2003, par Philippe Allart

  • Digg
  • Del.icio.us
  • Facebook
  • Google
  • Technorati

Si vous souhaitez adapter la charte graphique d’un article ou d’une rubrique en fonction de son niveau de profondeur dans la hiérarchie, voici une fonction qui pourra vous aider.

L’origine de mon problème était d’afficher sur la page d’accueil le plan complet du site, en changeant la couleur des titres de rubriques en fonction de leurs niveaux d’imbrication.

Les initiés diront qu’il suffit de gérer une variable $niveau, et de placer un $niveau+=1 et un $niveau-=1 aux bons endroits dans une boucle récursive. C’est bien ce que j’ai fait, dans le sommaire, en initialisant cette variable à 1.

Mais le problème se pose si, dans le squelette d’une rubrique, on veut afficher le sous-arbre, en lui donnant les mêmes couleurs que dans le sommaire. Il faut alors initialiser la variable non plus à 1, mais avec le niveau d’imbrication courant. Et tant qu’à faire, puisqu’une rubrique est affectée d’une couleur dans l’affichage du plan, on pourrait reprendre celle-ci comme dominante dans la page qui lui est consacrée.

Le code

Voici une fonction qui calcule le niveau de profondeur en fonction de l’identifiant de la rubrique :

Copiez ce code dans votre fichier mes_fonctions.php3.

Comme vous pouez le voir, la fonction calcule le niveau en remontant la hiérarchie. Le niveau est incrémenté à chaque itération.

La fonction renvoi la valeur 1 pour les rubriques principales, puis 2 pour leurs sous-rubriques, etc... Attention, normalement il n’y a pas de niveau 0, et si c’était le cas, il serait de toutes façons remplacé par une chaîne vide à la sortie du filtre.

Un petit disjoncteur interrompt la boucle quand le niveau 10 est atteint. C’est pour éviter une boucle infinie en cas de bug quelque part.

Comment utiliser ce filtre

Pour utiliser cette fonction, c’est très simple, appliquez-la comme un filtre à la balise #ID_RUBRIQUE, de la façon suivante :

Par exemple si vous souhaitez changer une couleur de fond en fonction du niveau de profondeur :

Ici, on initialise un tableau avec des éléments qui varient en fonction du niveau. Le premier élément est vide et ne sera pas utilisé. Le second élément correspond aux rubriques principales. Il serait judicieux de placer cette initialisation dans un fichier à inclure, de façon à pouvoir l’utiliser dans le sommaire, les rubriques, et pourquoi pas les articles.

Les limites de cette astuce

Avec ce filtre vous pourrez faire varier toutes les valeurs que vous voudrez dans le code HTML généré par un squelette, mais il ne semble pas possible de sélectionner le squelette lui-même.

En effet, SPIP fonctionne sur deux niveaux d’exécution : un premier niveau ou les squelettes sont sélectionnés et les commandes SPIP interprétées pour générer des pages en PHP natif, et un second niveau ou le PHP natif est exécuté. C’est seulement pendant cette seconde phase que la variable $niveau est utilisée.

Répondre à cet article

Retour en haut de la page

Ça discute par ici

SPIP | Squelette | | Plan du site | Suivre la vie du site RSS 2.0