SPIP-Contrib

SPIP-Contrib

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

286 Plugins, 197 contribs sur SPIP-Zone, 229 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 ?
  • [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 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

  • Un retour d’expérience d’utilisation de Formidable

    26 octobre – commentaires

    Il s’agissait de créer un formulaire d’inscription à un évènement modérer les inscriptions dans le privé publier les inscriptions dans le public Nous avons discuté de cette présentation lors de l’apéro SPIP du 15 février 2016 à la Cantine (...)

  • Métas +

    3 décembre – 14 commentaires

    Améliorez l’indexation de vos articles dans les moteurs et leur affichage sur les réseaux sociaux grâce aux métadonnées Dublin Core, Open Graph et Twitter Card. Installation Activer le plugin dans le menu dédié. Dans le panel de configuration, (...)

  • Adaptive Images

    15 novembre 2013 – 69 commentaires

    Un plugin pour permettre aux sites responsive d’adapter automatiquement les images de la page à l’écran de consultation. Adaptive Images, que l’on pourrait traduire par Images adaptatives, désigne la pratique qui vise à adapter les taille, (...)

  • Social tags

    8 septembre 2008 – 428 commentaires

    Le plugin Social Tags permet d’ajouter des icônes de partage de liens vers les sites tels que Digg, Facebook, Delicious.... Une fois le plugin installé et activé (voir doc.), le choix des sites se fait via un menu de configuration. Insertion (...)

  • Module de Paiement Stripe

    17 octobre – commentaires

    Stripe est un prestataire de paiement externe https://stripe.com/fr qui propose une API moderne et une interface de paiement extrêmement conviviale et efficace. Ce module permet les paiements à l’acte et les paiement récurrents. Configuration (...)

Ça spipe par là