Carnet Wiki

Iterateurs_Glob

Version 4 — Mars 2012 YannX

Parmi les nouveaux itérateurs développés par Fil et Marcimat, l’un des plus particuliers concerne l’accès aux systèmes de fichiers : autrefois réservé aux programmeurs PHP, la nouvelle syntaxe permet d’envisager en SPIP de très nombreux usages.

Pour la documentation initiale, on s’appuie sur les articles de base publiés par les auteurs :
-  l’ annonce
et les
exemples avant de recharger le plugin iterateurs de _fil et mm !

La structure de la boucle itérateur (sur la pseudo-table symbolique DATA) nécessite un critère spécifique {source

  format .
, .données

} avec deux arguments, dont le premier sera dans notre cas l’un des mots-clés glob ou globpregfiles, par référence aux fonctions éponymes de parcours de dossiers, l’argument suivant précisant le masque de fichiers utilisé.

Le format de fonction mot-clé glob est le plus simple : il utilise le masque d’expansion de noms générique dans les shells *nix pour parcourir les fichiers d’un répertoire !

La chaine donnée en second paramètre spécifie donc un masque de répertoire à utiliser (indiqué ’brut’ donc sans devoir être mis entre guillements ou quotes.

Le masque de fichier indiqué peut être exprimé en absolu ou relatif à l’exécution dans le dossier racine du site SPIP : l’exemple de référence montre le positionnement du chemin relatif du répertoire IMG des images jointes en standard.

<BOUCLE_ls2(DATA){source glob, IMG/{??g/,}*.??g}>
	<li>[(#VAL{Y-m-d H:i:s}|date{#VALEUR|filemtime})] / #VALEUR</li>
</BOUCLE_ls2>

Ici les données sont demandées dans les sous-dossiers de IMG/ , sur des noms de fichiers dont l’extension est formée de trois caractères, le dernier étant un g : ceci va donc sélectionner des fichiers de type .jpg ou .png, qui sont des images ; tout naturellement, comme nous savons que SPIP range les pièces jointes dans des sopus-dossiers de IMG nommées par l’extension-type, nous devons, pour récupérer toutes les images de ces deux types, demander -par les caractères génériques traditionnels ? [1] et * [2]- d’étendre la spécification de chemin données aux deux sous-répertoires correspondants, ici respectivement IMG/jpg/*.jpg et IMG/png/*.png ; mais notez qu’un tel masque sélectionnerait aussi les fichiers IMG/jpg/*.png si vous en aviez de mal rangés...
_ Par contre, les fichiers d’extension .jpeg ne seront pas extraits ; pour cela, il faudrait, àsupposer que SPIP les range dans le répertoire IMG/jpg/, spécifier comme masque final,
*.*g ou *.???g</code / #VALEUR</li >
</BOUCLE_ls2 >
</code >  !