SPIP-Contrib

SPIP-Contrib

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

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

  • Pages uniques

    11 décembre 2008 – 259 commentaires

    Allez, avouez... il ne vous est jamais arrivé d’avoir besoin d’articles qui ne sont rattachés à aucun rubriquage particulier ? Des articles uniques, n’ayant ni de thème, ni de rapport avec aucun autre ? Ou encore des articles pour lesquels vous avez (...)

  • Formidable, le générateur de formulaires

    23 janvier 2012 – 2048 commentaires

    Un générateur de formulaires facilement configurable pour les non-informaticiens et facilement extensible pour les développeurs. Introduction L’objectif était de créer un plugin permettant de générer des formulaires. Historiquement, 2 plugins (...)

  • GIS 4

    11 août 2012 – 1307 commentaires

    Présentation et nouveautés La version 4 de GIS abandonne la libraire Mapstraction au profit de Leaflet. Cette librairie permet de s’affranchir des librairies propriétaires tout en gardant les mêmes fonctionnalités, elle propose même de nouvelles (...)

  • ciar : plugin « Accès restreints issus de Giseh »

    28 novembre 2011 – 86 commentaires

    Cette version ajoute une gestion par groupe d’auteurs, ainsi que la compatibilité avec SPIP 3. Pour mémoire, le plugin « ciar » offre des accès restreints reprenant les fonctionnalités de ceux de Giseh. Le plugin est utilisable sans utiliser les autres (...)

  • Saisies

    27 mars 2010 – 474 commentaires

    Introduction Créer un formulaire est une tâche toujours un peu répétitive : les champs ont souvent les mêmes propriétés, le même accompagnement (message d’erreur, explication, ...) et la même structure HTML. Ce plugin est un outil pour les développeurs (...)