Carnet Wiki

Iterateurs_Glob

Version 7 — 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 .
, .La  structure  de  la  boucle  itérateur  ( sur  la  pseudo-table  symbolique  DATA )  nécessite  un  critère  spécifique  {{< code>{source  </ code>}}{<code >   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 guillemets 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 sous-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 !

Avant d’étudier la forme d’accès aux données affichées à l’intérieur de la boucle, nous allons compléter l’examen du masque de fichiers à donner, sachant qu’il est tiré de la fonctionnalité de glob-pattern : cette forme de masque ressemble aux expressions régulières (les « regexp ») en plus simple.

Outre les deux caractères génériques déjà vus, des combinaisons restreintes sont disponibles :
-  le cas du slash / nécessite sous Windows d’être redoublé pour être reconnu comme séparateur dans les chemins ; il est donc plus simpple d’utiliser la forme linux de séparateur, l’anti-slash \ qui sera donc reconnu tant sous Linux qu’eventuellement traduit sur Windows !
-  mettre entre accolades une série de sous-masques alternatifs [3] : il semblerait ?? que la présence d’accolades dans le chemin soit indispensable pour activer le mécanisme d’expansion.... à vérifier !
Le critère exclus est purement refusé ; le critère doublons a provoqué un refus pour absence de clé primaire...