Amusons nous avec des boucles SPIP et les petits nouveaux #GET, #SET et #ARRAY
- Date de publication
- 22/janv.
2008 - Tags
Je suis tombé il y a quelque temps sur une problématique que je n’avais jamais rencontrée au cours de mes nombreuses expériences avec SPIP, et il s’avère qu’une solution très élégante est possible en n’utilisant que la syntaxe de SPIP, là où il aurait fallu, il n’y a pas si longtemps que cela, utiliser du code PHP dans le squelette. Suivez le guide...
Imaginez que vous ayez dans votre site de nombreux sites référencés, avec la syndication activée, et des mots clefs thématiques associés à ces sites. Cela peut vous rappeler Sedna, sauf que les mots clefs peuvent être multiples pour un site alors que Sedna utilise des rubriques, forcément uniques pour chaque site.
Imaginez maintenant que vous souhaitiez afficher dans une page les dernières nouveautés de tous les sites ayant un mot clef donné.
La solution simple — qui fonctionne depuis longtemps avec SPIP — est de lister les sites qui ont le mot clef, et de lister pour chacun les derniers articles syndiqués. Le problème de cette solution, c’est que vous devez vérifier chaque site pour savoir s’il y a du nouveau. Le problème est encore plus grave si vous souhaitez utiliser une pagination, puisqu’elle sera nécessairement sur les sites plutôt que sur les articles syndiqués.
Ma problématique du jour était donc de lister tous les articles syndiqués dans leur ordre chronologique, donc sans devoir passer par les sites au préalable, et voici la solution :
#SET{sites,#ARRAY}
<B_sites>
<BOUCLE_sites(SITES){id_mot}>
[(#SET{sites,[(#GET{sites}|push{#ID_SYNDIC})]})]
</BOUCLE_sites>
<B_derniers_liens>
#ANCRE_PAGINATION
<dt><span>Actualité du Web</span></dt>
<dd id="actu-web">
[(#PAGINATION{accessible})]
<dl>
<BOUCLE_derniers_liens(SYNDIC_ARTICLES){id_syndic IN #GET**{sites}}{pagination 5}{par date}{inverse}>
<dt>#TITRE</dt>
<dd class="origine">Sur <a href="#URL_ARTICLE">#NOM_SITE</a></dd>
<dd class="date">[(#DATE|affdate)]</dd>
[<dd class="auteur"><cite>(#LESAUTEURS)</cite></dd>]
[<dd><blockquote><p>(#DESCRIPTIF)</p></blockquote></dd>]
</BOUCLE_derniers_liens>
</dl>
[(#PAGINATION{accessible})]
</dd>
</B_derniers_liens>
</B_sites>
<//B_sites>
</BOUCLE_mot_courant>
Ce code fonctionne avec SPIP 1.9.2c1, mais ne devrait plus être nécessaire avec SPIP 1.9.3, la boucle SYNDIC_ARTICLES acceptant maintenant le paramètre {id_mot_syndic}2 !
- Notes
[1] A condition d’ajouter le filtre « push », dont voici le code :
function push($array, $val) {
if($array == '' OR !array_push($array, $val)) return '';
return $array;
}[2] Voir le commit SVN 11019.
Commentaires
Partager
Pour faire un lien vers cet article, vous pouvez utiliser soit son URL canonique soit son URL courte :
Billets avec un tag commun
- Une arborescence dynamique et contextuelle
- Le même agenda que Gastero Prod avec SPIP
- Gastero Prod 4, les standards et l’accessibilité
- La galerie SPIP, pour réutiliser facilement les images et documents
- Un site valide et accessible avec SPIP, c’est (de plus en plus) possible !
Derniers billets
-
Faut-il continuer à supporter Internet Explorer 6 ?
Article initialement publié dans le blog de Clever Age.
On ne va pas ergoter sans fin, tout le monde doit maintenant savoir que Internet Explorer 6 — IE6 pour les intimes — est un navigateur obsolète et dangereux. Et pourtant, certains continuent à l’utiliser. Faut-il les en dissuader, refuser de leur fournir son support, aller même jusqu’à leur empêcher l’accès, ou faut-il continuer à supporter (les faiblesses de) ce navigateur ?
- Date de publication
- 22/juillet
2010 - Tags
-
Les inscriptions à Paris Web 2010 sont ouvertes !
Paris Web 2010, c’est la cinquième édition de ce rendez-vous français annuel, devenu incontournable, pour se tenir informé des bonnes pratiques de développement Web. Go go go !
- Date de publication
- 2/juillet
2010 - Tags
-
Faciliter la reprise de tweets (les retweets) à l’ancienne sur Twitter
Même si Twitter a mis en place depuis maintenant un certain temps un mécanisme natif de retweets1, je préfère souvent continuer à utiliser les « RT » traditionnels, qui laissent la possibilité de commenter le tweet initial, ce que ne permet pas le retweet officiel. Une règle qui me paraît essentielle pour faciliter le retweet à l’ancienne, c’est de prévoir une taille de tweet suffisamment faible pour que le retweeteur voit son travail facilité, surtout si le tweet initial ne contient que très peu de mots inutiles.
- Date de publication
- 14/juin
2010 - Tags

Derniers commentaires
R03ER7 sur Le Jailbreak de l’iPhone ou de l’iPod Touch est-il légal ? : « Jailbreaker ne veut pas dire voler » mais plutôt « Permettre l’installation d’applications quand (...)
Sur Citation d’Oscar Wilde : sauf qu’il me semble qu’en vrai c’est une phrase de A de St Exupery !
Scandale sur Afficher les favicon dans la barre personnelle de Firefox sous Mac OS : Pour ceux qui, comme moi, manquent de place dans leur barre personnelle, j’ai aussi ajouté le (...)
Scandale sur Afficher les favicon dans la barre personnelle de Firefox sous Mac OS : merci pour le tuyau, ça marche. manque juste dans le tutoriel le chemin ou mettre le fichier, (...)
Nicolas Steinmetz sur Faut-il continuer à supporter Internet Explorer 6 ? : Parce que certaines entreprises sont encore sous WinNT / Win2000 à cause d’applications métiers ? (...)
ThierryD sur Prendre des éclairs (d’orage) en photo : Bonjour, Je me permet d’intervenir dans ce post pour vous faire part de ma technique pour (...)
ventrea sur Backup d’un Mac sur un NAS facile et sans bidouille, c’est possible ? : Time machine est pris en chagre par les dernières versions de firmware sur les nas Qnap (...)
Sur Une sauvegarde de fichiers en ligne très simple pour pas cher : Oui, j’ai le même genre et c’est vraiment pratique :) : https://www.axalot.fr
Sur Google Chrome sur Mac, bilan mitigé : > Pas de barre de titre, donc je ne connais pas le nom de la page dès que j’ai plus de 5 onglets (...)
Maurice sur Backup d’un Mac sur un NAS facile et sans bidouille, c’est possible ? : Par contre, je ne pense pas que ça résolve le problème de performance lorsque la taille du backup (...)