Lister les plugins
actifs
Le format plugins
ne nécessite pas de préciser les données.
Boucle :
<BOUCLE_pl(DATA){source plugins}>
#VALEUR
</BOUCLE_pl>
Résultat :
crayons memoization icalendar
Afficher les « versions » de la configuration : critère {cle==...}
Cette boucle itère sur la balise #CONFIG
, comportant tous les éléments de configuration d’un site (tels qu’ils sont enregistrés dans la table spip_meta
).
Comme la balise #CONFIG
est un tableau de données, on va employer le format table
. Un critère {cle==version}
filtre le tableau en ne retenant que les configurations dont la clé contient le mot « version ».
Boucle :
<BOUCLE_cfg(DATA){source table, #CONFIG*}{cle==version}>
<dt>#CLE</dt>
<dd>#VALEUR</dd>
</BOUCLE_cfg>
Résultat :
...
- version_installee
- 16428
- revisions_base_version
- 1.1
- Indexation_base_version
- 0.4
Le critère {liste ...}
Pour simplifier l’écriture de tableaux de données, lorsqu’il s’agit d’une simple liste d’éléments qu’on veut indiquer manuellement, la boucle (DATA)
accepte le critère {liste ...}
, qui permet de constituer un tableau de données en séparant celles-ci par des virgules.
Boucle :
<BOUCLE_i(DATA){liste 3,4,5}{"<br />"}>
<BOUCLE_j(DATA){liste 6,7,8}{" "}>
[(#VALEUR|mult{#_i:VALEUR})]
</BOUCLE_j>
</BOUCLE_i>
Résultat :
18 21 24
24 28 32
30 35 40
A noter : on a utilisé #_i:VALEUR
pour référencer dans la boucle j
la valeur calculée par la boucle i
.
Un fichier CSV
Nous allons cette fois lire un fichier au format CSV se trouvant sur notre disque dur. Le fichier adresses.csv
contient un carnet d’adresses :
Boucle :
<BOUCLE_csv(DATA){source csv, adresses.csv}
{par /3}
{"<br />"}>
#VALEUR{0} : #VALEUR{3}
</BOUCLE_csv>
Résultat :
Marcimat: http://marcimat.magraine.net/
Fil: http://rezo.net/
À noter : le critère de tri {par /3}
permet de trier sur la colonne n° 3, contenant les adresses web. Le /
initial est obligatoire dans le cas d’un tri sur une clé numérique ou commençant par un chiffre.
Dans la démo de CSV livrée avec le plugin itérateurs, on trouvera un exemple beaucoup plus complet permettant de gérer proprement les clés du fichier CSV, et même de trier ou de fusionner sur ces clés.
Lister le contenu d’un répertoire
La fonction glob()
de PHP permet de lister les fichiers correspondant à un masque ; elle a été transposée pour la boucle (DATA)
.
Boucle :
<BOUCLE_ls2(DATA){source glob, IMG/jpg/*.jpg}>
[(#VAL{Y-m-d H:i:s}|date{#VALEUR|filemtime})] / #VALEUR
</BOUCLE_ls2>
Résultat :
2008-02-01 23:27:23 / IMG/jpg/arton2135.jpg 2008-08-21 11:12:58 / IMG/jpg/DSC03420.jpg 2008-08-21 11:13:11 / IMG/jpg/DSC03421.jpg 2009-08-27 11:20:11 / IMG/jpg/hash-1.jpg 2009-08-27 11:20:04 / IMG/jpg/hash.jpg
Lister les plugin.xml
du site
La fonction preg_files
de SPIP permet de lister des fichiers selon une expression régulière et de manière arborescente. Plus versatile, mais plus lente que glob.
Boucle :
<BOUCLE_xml(DATA){source pregfiles, #EVAL{_DIR_RACINE}, plugin.xml$, 5}>
#VALEUR[ - (#VAL{Y-m-d H:i:s}|date{#VALEUR|filemtime})]
</BOUCLE_xml>
Résultat :
../plugins/a2a/plugin.xml - 2011-04-16 20:47:02 ../extensions/simplog/plugin.xml - 2010-09-05 16:08:39 ../extensions/vertebres/plugin.xml - 2011-03-19 16:49:51 ../extensions/z-core/plugin.xml - 2010-09-05 16:08:47
Un webservice au format YAML
Le site http://per.sonn.es/ propose une API permettant de lire chaque profil au format YAML. On va donc interroger le site sur l’un de ces profils, et parcourir le résultat pour afficher la liste des amis de la personne concernée.
Commençons par analyser mon profil (à l’adresse http://per.sonn.es/Fil.yaml) :
Si l’on charge cette adresse avec le format yaml
, on obtient un tableau de données un peu plus complexe que dans l’exemple précédent. En effet, certains items sont des chaînes de caractères, d’autres, comme la liste d’amis, des listes de chaînes.
(name => Fil, sex => F, friends => ( Maude Guérin, Zohra Robin, ...), ... )
.
Parcourons ces données :
Boucle :
<BOUCLE_yaml(DATA){source yaml, http://per.sonn.es/Fil.yaml}>
<dt>#CLE</dt>
<dd>[(#VALEUR|print)]</dd>
</BOUCLE_yaml>
Résultat :
...
- name
- Fil
- sex
- F
- birthday
- 1966-08-17
- job
- Calorifugeur
- friends
- Maude Guérin, Zohra Robin, Pierre-Yves Philippe, Lauriane Bertin, Jeannine Pichon, Vanessa Michel, Wendy Allard, Sylvie Michaud, Gwenaël Voisin, Paule Mary, Maia Ribeiro, Josianne François, Lucas Fernandes
Maintenant, nous voulons boucler sur les amis de Fil. Pour cela il y a deux possibilités. La première consiste à récupérer les données avec notre boucle (DATA)
au format yaml
, puis à stocker le tableau d’amis dans une variable que nous allons parcourir avec une autre boucle (DATA)
, cette fois au format table
:
Boucle :
<BOUCLE_yaml2(DATA){source yaml, http://per.sonn.es/Fil.yaml}{cle=friends}>
<BOUCLE_friends(DATA){source table, #VALEUR}{" - "}>
#VALEUR
</BOUCLE_friends>
</BOUCLE_yaml2>
Résultat :
Maude Guérin - Zohra Robin - Pierre-Yves Philippe - Lauriane Bertin - Jeannine Pichon - Vanessa Michel - Wendy Allard - Sylvie Michaud - Gwenaël Voisin - Paule Mary - Maia Ribeiro
Le critère {datapath ...}
On voit bien dans l’exemple ci-dessus que, plus le tableau de données est complexe, plus les boucles qu’il va falloir imbriquer seront pénibles à coder. C’est là qu’intervient le critère {datapath ...}
, qui permet d’indiquer à la boucle (DATA)
le chemin (au sens de Xpath) vers le tableau de données qui nous intéresse.
Avec cette balise notre liste d’amis s’écrit en une seule boucle (et on en profite pour ajouter une pagination) :
Boucle :
<BOUCLE_yaml3(DATA)
{source yaml, http://per.sonn.es/Fil.yaml}
{datapath friends}
{" - "}{pagination 10}
>
#VALEUR
</BOUCLE_yaml3>
#PAGINATION
</B_yaml3>
Résultat :
Maude Guérin - Zohra Robin - Pierre-Yves Philippe - Lauriane Bertin - Jeannine Pichon - Vanessa Michel - Wendy Allard - Sylvie Michaud - Gwenaël Voisin - Paule Mary
0 | 10 | 20 | 30 | 40 | ...
Un fichier XML
Le plugin « citations aléatoires » sur SPIP-Zone contient un fichier de citations, au format XML (http://zone.spip.org/trac/spip-zone/browser/_plugins_/citation_aleatoire/trunk/citations/citations_fr.xml). La boucle (DATA)
permet de l’exploiter directement :
Boucle :
<BOUCLE_cite(DATA)
{source xml, #CHEMIN{citations/citations_fr.xml}}
{par hasard} {0,1} {datapath citation}
>
<dt>#VALEUR{texte/0}</dt> <dd>[((#VALEUR{auteur/0}))]</dd>
</BOUCLE_cite>
Résultat :
- L'idéal quand on veut être admiré, c'est d'être mort.
- (Michel Audiard)
Un calendrier au format iCalendar/ics
Il est aussi possible d’itérer sur les événements d’un calendrier publié au format iCalendar/ics. L’article consacré au plugin icalendar donne un exemple complet.
Un document Google (spreadsheet)
Dans Google Documents il est possible de « Partager > Publier un document ». Une fois cela fait, on peut récupérer l’adresse du document au format CSV, et l’afficher sous forme de table HTML.
Boucle :
#SET{key,0AolUP3c6K9JodGwxRjJzb2hyTGZLU29qRVItRXk1VXc}
<B_csv>
<table border="1">
<BOUCLE_csv(DATA){source csv, https://spreadsheets.google.com/pub?key=#GET{key}&hl=en&dsds&output=csv}
>
<tr>
<td>#VALEUR{0}</td>
<td>#VALEUR{1}</td>
<td>#VALEUR{2}</td>
</tr>
</BOUCLE_csv>
</table>
</B_csv>
Résultat :
Pays PIB Population Rémitanie 12 1 Baldoghistan 23 2 Républiques Unies 43 3 Diloduristan 12 4 Zarlatie 9 5
D’autres modes d’extraction sont possibles, notamment sous forme de liste, ou de cellules :
Liste :Rémitanie pib: 12, population: 1 Baldoghistan pib: 23, population: 2...Cellules :
A2: Rémitanie B2: 12 C2: 1 A3: Baldoghistan B3: 23 C3: 2...
Dans l’article suivant, nous verrons des exemples de boucles chevelues à partir du webservice YQL.
4 Messages de forum