Filtrer les libellés dans les articles

Dans le gadget libellé, il est possible de sélectionner les libellés que l'on souhaite afficher. Par contre, dans les articles, cette "option" n'existe pas.
Grâce au XML et aux opérateurs Blogger, vous pouvez filtrer vos libellés en choisissant des critères spécifiques.
Trouver le code des libellés
Par défaut, l'option "libellés" s'affiche sous les articles parmi d'autres options. C'est le code de cette section que nous allons retravailler.
Pour trouver le code correspondant à cette option, rendez-vous dans l'éditeur HTML de votre modèle :
- Tableau de bord
- Modèle
- Modifier le code HTML
Recherchez le code de l'option "libellés" qui se situe dans le widget Blog
, et localisez le tableau data:post.labels
:
<b:loop values='data:post.labels' var='label'> <a expr:href='data:label.url' rel='tag'><data:label.name/></a><b:if cond='not data:label.isLast'>,</b:if> </b:loop>
Pour pouvoir filtrer le contenu du tableau data:post.labels
, il suffit d'utiliser un opérateur, en particulier un lambda et d'y ajouter un ou plusieurs critères qui n'afficheront que les libellés correspondants aux critères.
Autant dire que le nombre de combinaisons est relativement très élevé...
Filtrer le tableau avec un lambda
...Et de ce fait, vous ne retrouvez ici que quelques syntaxes.
Ces exemples utilisent l'opérateur lambda where
qui filtre tous les sets correspondants au critère. Pour filtrer uniquement le premier set correspondant au critère, remplacez where
par first
.
data:post.labels where (l => l.name in ["Frites","Chocolat","Hamburger"])
data:post.labels where (l => l.name not in ["Frites","Chocolat","Hamburger"])
data:post.labels where (l => l.name == "Frites")
data:post.labels where (l => l.name != "Frites")
data:post.labels where (l => l.name contains "Frit")
data:post.labels where (l => l.name not contains "Frit")
data:post.labels where (l => l.name.size gt 10)
data:post.labels where (l => l.name.size lt 10)
Limiter la quantité de libellés
Pour n'afficher qu'un nombre restreint de libellés, il faut employer l'opérateur limit
.
array limit number
data:post.labels limit 3
data:post.labels limit (data:post.labels.size / 2)
(data:post.labels where (l => l.name.size gt 10)) limit 3
De plousse en plousse difficile
A présent, compliquons un peu la tâche. Imaginez que l'on veuille filtrer le même tableau de libellés avec des critères qui varient en fonction d'autres critères.
Par exemple, utiliser un filtre spécifique dans les pages index et un autre filtre dans les autres pages.
Il faut employer un sélecteur ternaire. Dans ce cas, il s'agira d'imbriquer les opérations.
condition ? array : array
data:blog.pageType == "index" ? data:post.labels where (l => l.name in ["Frites","Chocolat","Hamburger"]) : data:post.labels
Et la virgule ?
Dans le code fourni par défaut, la virgule apparaît derrière chaque libellé, excepté le dernier libellé.
En appliquant un filtre, la condition qui empêche d'afficher cette dernière virgule n'est plus en mesure de fonctionner correctement, parce que la condition utilise le tableau original.
Pour rétablir un sens cohérent à cette condition, il faut lui dire qu'il faut se référer au tableau filtré. Pour cela, il faut déplacer le filtre dans un alias de variable et modifier la donnée contenue dans la condition.
<b:with value='data:post.labels where (l => l.name in ["Frites","Chocolat","Hamburger"])' var='filtreLabel'> <b:loop index='i' values='data:filtreLabel' var='label'> <a expr:href='data:label.url' rel='tag'><data:label.name/></a><b:if cond='data:filtreLabel.size != data:i + 1'>,</b:if> </b:loop> </b:with>
Après avoir effectué ces modifications, la dernière virgule n'apparaîtra plus.