SPIP-Contrib

SPIP-Contrib

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

286 Plugins, 197 contribs sur SPIP-Zone, 206 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

  • Cycle2

    7 août 2014 – 104 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 (...)

  • CleverMail

    20 janvier 2010 – 635 commentaires

    CleverMail est un plugin permettant d’envoyer des lettres d’informations à des abonnés depuis SPIP. Issu au départ d’un développement libre complètement indépendant de SPIP, il a connu une première version pour SPIP 1.9 avant d’être complètement réécris (...)

  • SPMC : Squelette par mot clé V2.0

    21 septembre 2009 – 48 commentaires

    Ce plugin prend la suite de squelette par mot clef V1.92 qui ne fonctionnait plus sous SPIP 2.0.x. Avec l’accord de Mortimer qui n’a plus le temps de le maintenir, je prend donc la suite. Présentation du plugin « Squelette par mot clé V2.0 » Le (...)

  • Sarka-SPIP 3

    15 septembre 2009 – 211 commentaires

    Si la lignée 3 de Sarka-SPIP a été l’occasion de refaire presque entièrement le code du squelette elle continue à évoluer et à s’améliorer au fil des versions. Nous ne saurions trop conseiller aux nouveaux utilisateurs - et aussi aux anciens - (...)

  • Paiement avec Formidable

    16 février 2015 – 53 commentaires

    Ce plugin « Paiement avec Formidable » permet d’ajouter une étape de paiement à la fin de la saisie d’un formulaire créé par le plugin Formidable. Il le complète et nécessite par ailleurs le plugin bank qui gère l’interface technique avec les prestataires (...)