SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

286 Plugins, 197 contribs sur SPIP-Zone, 284 visiteurs en ce moment

Accueil > Squelettes > Outils pour squelettes > Squelettes selon contexte > Définir le type de tri d’une rubrique avec des mots-clés

Définir le type de tri d’une rubrique avec des mots-clés

25 août 2005 – par François Schreuer – commentaires

1 vote

Problème et objectif

Dans certains sites sous SPIP, comme par exemple un webzine ou un blog, les rubriques et sous-rubriques ne jouent qu’un rôle de classement d’informations de nature homogène en différents groupes.

Sur d’autres sites, plus complexes, les rubriques serviront aussi à différencier la nature des éléments qui y sont rangés. Par exemple, le site d’une association mettra dans une rubrique les comptes-rendus des réunions, dans une autre une présentation de ses principaux projets, dans une troisième seront placés des articles « statiques » [1] présentant l’association, son histoire ou ses objectifs, tandis que dans une dernière rubrique on retrouvera la liste de ses membres.

Lors de leur affichage sur le site public, ces données ne doivent pas nécessairement toutes être triées selon le même ordre. Par exemple, on souhaitera classer les compte-rendus de réunion par ordre antichronologique, la rubrique de présentation sera quand à elle triée selon l’ordre arbitraire que permettent le critère {par num titre} et le filtre supprimer_numero, en numérotant les titres des articles pour préciser cet ordre. La liste des membres sera ordonnée selon l’ordre alphabétique des noms de famille ; enfin, en hésite encore sur l’ordre qu’il convient d’utiliser pour la rubrique présentant les projets et l’on souhaite donc conserver la possibilité d’en changer facilement.

La solution a priori la plus évidente que propose SPIP consiste à créer autant de squelettes qu’il est nécessaire, chaque rubrique disposant de son squelette rubrique-xx.htmlxx est son identifiant [2]. Si cette solution est entièrement suffisante dans la plupart des cas, elle présente quand même quelques inconvénients :

  • Il n’est tout d’abord pas évident, avec le système standard de SPIP, de partager un même squelette entre deux rubriques dont l’une n’est pas la sous-rubrique de l’autre [3].
  • Notamment en conséquence du point précédent, dans le cas d’un site de taille importante, aux contenus variés, l’inflation du nombre de squelettes à maintenir risque de rendre l’ensemble assez rapidement ingérable. Même en utilisant abondamment l’inclusion de morceaux de squelettes (avec <INCLURE>) pour ne pas (trop) dupliquer de code.
  • Enfin, l’usage des squelettes spécifiques aux rubriques ne permet pas de réutiliser facilement un jeu de squelette sur un nouveau site (sinon, bien sûr en renommant de façon adéquate lesdits squelettes) ni encore moins de partager un même jeu de squelettes entre deux sites en ce qu’il crée un lien regrettable entre le code des squelettes et la base de données. Nous visons plutôt ici à paramétrer les squelettes pour rendre leur usage plus générique.

Méthode

Voici donc une solution alternative au problème, dans laquelle nous allons nous contenter d’un seul squelette rubrique.html pour gérer l’ensemble des tris différents évoqués plus haut. Dans un usage un peu détourné, nous allons ici nous servir des boucles comme de structures conditionnelles.

Nous avons retenu ici trois types de tri différents ({!par date} [4], {par titre} et {par num titre}), mais il est parfaitement possible d’utiliser d’autres types de classements.

1. Première étape, créez un groupe de mots-clés que vous nommerez par exemple « Type de tri des rubriques ». Entrez dans la configuration avancée du groupe de mot-clé [5] pour préciser que ce mot-clé ne portera que sur des rubriques ainsi que pour faire en sorte qu’il ne soit possible de lier à chaque rubrique qu’un seul mot de ce groupe à la fois (par la même occasion, vous pouvez aussi restreindre les droits sur ce groupe aux seuls administrateurs, ce qui évitera sans doute l’une ou l’autre surprise).

2. Dans ce groupe, créez trois mots-clés que vous nommerez respectivement (en minuscules et sans espace) : par_num_titre, par_titre et par_date_inverse. Point n’est besoin d’être grand clerc pour deviner à quoi ils vont servir. Notez que le mot par_date_inverse n’est pas nécessaire (il s’agit ici du classement par défaut) mais il servira d’utile aide-mémoire et permettra, si vous changez le type de tri par défaut, de ne pas avoir à faire de modification sur la base de données.

3. Enfin, insérer dans votre squelette rubrique.html le morceau de code que vous trouverez en à la fin de cette page. En voici la structure :

Le concept est tout simple : en plaçant deux critères potentiellement contradictoires (l’identifiant de la rubrique — lequel implique que la boucle ne peut renvoyer qu’un ou zéro résultat —, puis un des mots-clés créés plus haut), on fait jouer à des boucles spip exactement le même rôle qu’un « if { ... } else { ... } » en php.

Vous remarquerez peut-être — avec raison — qu’alors que j’introduisais mon article en prétendant réduire le code redondant, la construction utilisée ici implique la répétition d’un même morceau de code à trois reprises !

On peut facilement résoudre ce problème en plaçant le morceau de code dans un squelette séparé, nommé par exemple item.inc.html (le fichier php correspondant étant nommé item.inc.php.

Schématiquement, ce fichier item.inc.html contiendra quelque chose comme ceci :

On l’appelera (à trois reprises) dans rubrique.html :

Enfin, on peut pousser la logique jusqu’au bout en modulant l’affichage du squelette item.inc.html en fonction du type de tri choisi. Prenons un exemple simple : faire en sorte que la date ne soit affichée que quand on se trouve dans un classement de type {!par date}, mais pas dans les autres — considérant que c’est là le seul endroit où il est pertinent d’afficher cette information.

Pour ce faire, nous devons passer un paramètre supplémentaire à notre squelette inclus, ce qui nous allons faire en remplaçant la première instruction d’inclusion :

par une instruction de ce type-ci :

Ensuite, comme prévu, nous affichons ou pas la date en fonction du paramètre tri passé dans l’inclusion :

Résultat final

Au final (on a plus ajouté ici la gestion d’une liste à puce), nous obtenons donc le code suivant à inclure dans notre squelette rubrique.html :

Le squelette item.inc.html ressemble quand à lui finalement à ceci :

Tout ceci est bien sûr à agrémenter selon votre goût ; on ne fournit ici qu’un canevas assez schématique.

Un exemple de réalisation ? Le site mocliege.be, malgré des données assez variées, n’utilise qu’un seul squelette pour l’affichage de toutes ses rubriques : vous pouvez le consulter à l’adresse : http://mocliege.be/layout/rubrique.html, de même que le squelette inclus : http://mocliege.be/layout/item.inc.html [6].

Bon amusement.

Notes

[1C’est-à-dire destinés à ne pas bouger, au contraire des rubriques dont le contenu se présente comme un flux d’informations.

[2Lire à ce sujet le paragraphe intitulé « Une interface différente dans le même site » sur la page Principe général de la documentation officielle.

[3Avec un système de type UNIX, un lien symbolique est néanmoins une manière assez rapide et afficace de procéder.

[4Equivalent à {par date}{inverse}.

[5Vous devez l’avoir préalablement activée via la configuration du site.

[6attention, toutefois, ce squelette est un peu plus complexe que ce qui est présenté ici ; la partie qui nous intéresse dans le cadre de cette contrib commence à la ligne 48, avec la boucle _test_tri).

Dernière modification de cette page le 21 octobre 2007

Retour en haut de la page

Vos commentaires

  • Le 26 février 2007 à 16:01, par John En réponse à : Définir le type de tri d’une rubrique avec des mots-clés

    Bonjour,

    Je suis intéressé pour classer mes rubriques et sous-rubriques par numéro de titre.

    J’ai bien créer le fichier item.inc.php à la racine de Spip.
    J’ai également modifié le fichier rubrique.html comme indiqué.

    Par contre, je ne comprends pas comment faire en sorte que le numéro de la rubrique ne s’affiche pas dans le menu.
    Comment saisir le numéro de rubrique. Par exemple pour une rubrique « Contacts » en 5éme position, dois-je saisir « 5-Contacts » dans le champ Titre de la rubrique.

    Y-a-t-il autre chose à modifier ?

    Merci pour vos éclairages.

    • Le 11 février 2008 à 15:45, par Mars En réponse à : aficher/masquer le numero de rubrique

      Je maîtrise pas suffisament ce qui est décrit dans cet article par contre j’ai travaillé sur un site multilingue et je me suis posé ce problème d’afficher ou non les numéros de rubriques, je crois que tu as ta réponse chez Paris-Beyrouth avec un système de filtres.

    Répondre à ce message

  • Le 29 décembre 2005 à 21:45, par val En réponse à : Définir le type de tri d’une rubrique avec des mots-clés

    je n’ai pas le fichier item.inc.php ....je suis obligé de télécharger tous le programme spip chaque fois qu’il me manque un élément d’un exemple ....ou il y a un endroit ou on peut prendre juste une page manquante......et j’en proffite pour signaler une petite erreur ds les explications....

    BOUCLE_par_num_titre(ARTICLES)id_rubriquepar num titre
    INCLURE(item.inc.php)id_article
    /BOUCLE_par_titre
    (la boucle fermante correct est /BOUCLE_par_num_titre désolée j’ai enlevé les sigles plus petit et plus grd sans quoi l’exemple de code ne passe pas)

    • Le 4 janvier 2006 à 18:33, par François Schreuer En réponse à : Définir le type de tri d’une rubrique avec des mots-clés

      Salut,

      je n’ai pas le fichier item.inc.php ...

      C’est juste un bête fichier de squelette qu’il te faut ; par exempe ceci :

      je suis obligé de télécharger tous le programme spip chaque fois qu’il me manque un élément d’un exemple

      Il n’y a pas de fichier item.inc.php dans la distribution.

      BOUCLE_par_num_titre(ARTICLES)id_rubriquepar num titre INCLURE(item.inc.php)id_article /BOUCLE_par_titre (la boucle fermante correct est /BOUCLE_par_num_titre désolée

      Merci, je regarde.

      j’ai enlevé les sigles plus petit et plus grd sans quoi l’exemple de code ne passe pas)

      Il y a des raccourcis spip pour cela, en particulier <cadre></cadre> est très utile.

      FS

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?

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 Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Bazar

    8 octobre 2015 – 21 commentaires

    Un squelette pour étaler son bazar sur l’accueil. Bazar est un squelette HTML5/CSS3 issu du squelette neo-dist (http://zone.spip.org/trac/spip-zone/browser/_core_/plugins/neo-dist) : c’est un choix fait au départ, qui à l’avantage d’intégrer (...)

  • LinkCheck : vérificateur de liens

    13 février 2015 – 70 commentaires

    Ce plugin permet de chercher et tester l’ensemble des liens présents dans les objets. Vous pourrez donc en quelques clics connaître les liens brisés ou défectueux qui se sont immiscés dans le contenu de votre site SPIP. La vérification s’effectue en (...)

  • Dublin Core

    21 septembre 2010 – 28 commentaires

    Un petit squelette pour l’insertion de méta-données Dublin Core dans la partie head des articles. Le Dublin Core « Le Dublin Core est un schéma de métadonnées générique qui permet de décrire des ressources numériques ou physiques et d’établir des (...)

  • Le plugin ZotSpip

    28 mai 2012 – 136 commentaires

    Synchronise Spip avec une bibliothèque (personnelle ou partagée) de références bibliographiques Zotero. Utilisez Zotero pour gérer / importer / rédiger vos références bibliographiques, puis incorporez vos références bibliographiques dans votre Spip avec (...)

  • Newsletters

    16 janvier 2013 – 410 commentaires

    Ce plugin permet de composer des Info-lettres. Par info-lettre, on désigne ici le contenu éditorial qui va être composé et envoyé par courriel à une liste d’inscrits. Le plugin permet de composer une info-lettre à partir d’un modèle pré-composé, (...)