SPIP-Contrib

SPIP-Contrib

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

288 Plugins, 197 contribs sur SPIP-Zone, 222 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 ?

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

  • LinkCheck : vérificateur de liens

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

  • Serveur HTTP abstrait

    25 novembre 2013 – commentaires

    Un plugin-outil pour aider les développeurs à implémenter des API orientées REST, basées sur les méthodes HTTP (get, post, put, delete). Ce plugin a pour but premier de normaliser des URL que l’on pourra appeler pour manipuler les données du site. À (...)

  • Agenda Fullcalendar facile

    29 octobre 2016 – 33 commentaires

    Dans un précédent article, nous expliquions comment afficher un agenda Fullcalendar sur son site avec le plugin agenda. Cependant, ceci nécessite des manipulation de squelettes, ce qui n’est pas toujours évident lorsqu’on débute. La présente (...)

  • Acces Restreint 3.0

    11 décembre 2008 – 804 commentaires

    Le plugin accès restreint permet de définir et de gérer des zones de l’espace public en accès restreint. Cette version du plugin a été redévelopée et optimisée tout spécialement pour SPIP 2.0. Il en découle une amélioration des performances sur les gros (...)

  • Abonnements

    31 janvier 2015 – 18 commentaires

    Gérer des abonnements à des offres, et uniquement cela. Ce plugin a pour but de regrouper tout ce qui est commun aux différents types d’abonnements possibles (à des zones restreintes, à des contenus précis, à une version papier pourquoi pas (...)

Ça spipe par là