SPIP-Contrib

SPIP-Contrib

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

289 Plugins, 197 contribs sur SPIP-Zone, 94 visiteurs en ce moment

Accueil > Documentation > Tutoriels pour webmasters > Utiliser |unique dans un modèle

Utiliser |unique dans un modèle

19 mai 2012 – par Joseph – commentaire

8 votes

L’utilisation du filtre |unique peut parfois réserver quelques surprises. Petite astuce pour un bon fonctionnement.

Contexte

Supposons que l’on souhaite réaliser un modèle « artrecents » listant les derniers articles publiés dans une rubrique passée en paramètre, en séparant les articles selon leur mois de publication.

On va donc créer un fichier modeles/artrecents.html contenant :

  1. <BOUCLE_art(ARTICLES){id_rubrique=#ENV{id}} {par date} {inverse}>
  2.  [<h3 class="SPIP">(#DATE|affdate_mois_annee|unique)</h3>]
  3. <p> #TITRE</p>
  4. </BOUCLE_art>

Il ne reste alors plus qu’à ajouter dans le texte d’un article l’appel suivant : <artrecents10> pour afficher la liste des derniers articles publiés dans la rubrique 10.

Après validation des modifications de l’article, on obtient bien dans l’interface privée le résultat suivant :

mars 2012

Article AAA

Article BBB

février 2012

Article CCC

Article DDD

Le problème

Le modèle semble fonctionner sans problème. Content de vous, vous validez l’article et aller le consulter côté public. Et là, patatra, seuls les titres des articles sont présents, les mois / années ayant disparus :

Article AAA

Article BBB

Article CCC

Article DDD

comme si le filtre |unique ne renvoyait rien tout.

L’orgine du souci n’est pas forcément évidente à première vue, mais il y a fort à parier que le modèle a été exécuté plus d’une fois lors du calcul de la page. Vérifiez votre squelette. La plupart, dont la dist, prévoit dans l’en-tête html de la page le code suivant :

  1. [<meta name="description" content="(#INTRODUCTION{150}|attribut_html)" />]

Lors de l’appel de la balise #INTRODUCTION, le texte de l’article, incluant de fait le modèle, est calculé une première fois, puis transformé en texte brut et coupé à 150 caractères.

Dès lors, lorsque la balise #TEXTE est appelée dans le squelette, le modèle est recalculé une seconde fois. Sauf que les valeurs mois année ayant déjà été rencontrées plus tôt (au moment du calcul de #INTRODUCTION), le filtre |unique ne renvoit donc rien, d’où problème.

Une solution

D’une certaine manière, on souhaite que le filtre |unique soit en quelque sorte réinitialisé à chaque appel du modèle. D’après la documentation du dit filtre, il faut passer un paramètre au filtre afin de différencier des utilisations indépendantes, paramètre qui a besoin d’être différent à chaque calcul du modèle.

Le plus simple est alors de générer une valeur aléatoire à chaque appel du modèle, valeur qui sera ensuite transmise à |unique, ce qui permet de le "réinitialiser".

Le code du modèle sera alors modifié comme suit :

  1. #SET{alea, #EVAL{rand()}}
  2. <BOUCLE_art(ARTICLES){id_rubrique=#ENV{id}} {par date} {inverse}>
  3.  [<h3 class="SPIP">(#DATE|affdate_mois_annee|unique{#GET{alea}})</h3>]
  4. <p> #TITRE</p>
  5. </BOUCLE_art>

... et le tour est joué !

Dernière modification de cette page le 28 mai 2012

Retour en haut de la page

Vos commentaires

  • Le 15 décembre 2015 à 16:53, par Lire et Écrire En réponse à : Utiliser |unique dans un modèle

    Ça fonctionne bien entendu aussi dans un squelette inclus. J’avais le souci avec une newsletter, où le plugin calcule deux pages : l’une pour l’envoi (avec une lien de visualisation et les infos de désinscription) et l’autre pour la visualisation sur le site.

    Le filtre |unique n’était pas « remis à zéro » entre les deux et ne renvoyait rien pour la page de visualisation :-/

    Je cherchais comment le remettre à zéro mais, apparemment, la seule manière est le rand(), comme tu le proposes. Merci pour le partage !

    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

  • Grappes 1.0

    23 novembre 2012 – 33 commentaires

    Présentation et nouveautés Cette version 1.0 du plugin Grappes est un portage pour SPIP 3.x. Le plugin permet de grouper des objets de SPIP dans des grappes. Les objets du core (articles, rubriques, auteurs, etc.) sont pris en charge, ainsi que (...)

  • Cycle2

    7 août 2014 – 117 commentaires

    La seconde version de la librairie Javascript « jQuery Cycle », qui permet de produire des diaporamas, se nomme « Cycle2 » : http://jquery.malsup.com/cycle2/. Voici cette nouvelle librairie mise en plugin pour SPIP. Si vous utilisez déjà « jQuery (...)

  • LinkCheck : vérificateur de liens

    13 février 2015 – 128 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 (...)

  • Mon site affiche une page blanche ou je ne peux plus accèder à l’espace privé

    7 février 2008 – 34 commentaires

    Au secours ! « Tout à coup » votre site devient inutilisable ou inaccessible ! Comment faire ? Pourquoi ? Par où commencer ? Sans pouvoir couvrir tous les cas, cet article va essayer de vous guider rapidement vers la (...)

  • Japibas, squelette responsive

    11 octobre 2013 – 113 commentaires

    Japibas est un squelette responsive, multilingue (français, anglais et espagnol), dont l’habillage conviendrait à un site de type blog ou webzine. Le graphisme est inspiré du template Wordpress Japibas réalisé par Jesper Johansen et distribué sous (...)