Zipper des fichiers produits par des squelettes

La version 2.0 du plugin Zippeur permet de préparer des Zips contenant des fichiers issus de l’interprétation de squelettes SPIP. Voici la documentation de cette fonctionnalité, qui s’adresse aux personnes connaissant la syntaxe des squelettes de SPIP, en particulier l’utilisation de la balise #ARRAY.

Exemple

Soit un squelette squelette.html. Nous souhaitons :

  1. produire un fichier nommé squelette1 en passant l’argument id_article=1 en environnement.
  2. obtenir un zip nommé exemple contenant le fichier squelette1.

Dans un squelette, nous écrivons le code suivant :

[(#VAL{exemple}|zippeur_dynamique{'','',#ARRAY{
	0,#ARRAY{
		0,squelette,
		1,squelette1,
		2,#ARRAY{
			id_article,1}
			}
		}
	})]

Le filtre |zippeur_dynamique s’applique sur le nom du zip que l’on souhaite obtenir, sans l’extension zip.

Il reçoit comme premier argument une date, qui est utilisée pour éviter de calculer plusieurs fois un zip (cf. la documentation de base de Zippeur). Si cet argument est vide, comme ici, la date de calcul du squelette est utilisée.

Le second argument correspond à la méthode de zippage. S’il est vide, la méthode définie par la configuration du plugin est utilisée.

Le troisième argument est un tableau contenant la liste des squelettes à interpréter, ici nous n’en avons qu’un seul. Chaque squelette est défini par un tableau à trois entrées :

  • chemin du squelette au sens SPIP, sans l’extension html. Ici squelette
  • chemin du fichier calculé, à l’intérieur du Zip, avec l’extension. Ici squelette1.
  • paramètres d’environnement passés au squelette, sous forme de tableau. Ici un seul paramètre : id_article, égale à 1.

Le filtre prépare le zip, puis retourne son URL. On peut donc écrire quelque chose comme :

<a href="[(#VAL{exemple}|zippeur_dynamique{'','',#ARRAY{
	0,#ARRAY{
		0,squelette,
		1,squelette1,
		2,#ARRAY{
			id_article,1}
			}
		}
	})]">Le zip</a>

Syntaxe complète

La syntaxe complète du filtre est la suivante :

[(#VAL{nomduzip}|zippeur_dynamique{date, methode, fichiers_issus_de_squelettes, fichiers_statiques,fichierhorschemin,duredevie, extension})]

Nous avons déjà parlé des arguments date, methode, fichiers_issus_de_squelettes.

En ce qui concerne l’argument fichiers_statiques, il permet d’ajouter dans le zip des fichiers non issus d’un squelette, par exemple des images. Cet argument est un tableau dont chaque entrée est elle-même un tableau, contenant en clef 0 le chemin (au sens SPIP) du fichier d’origine et en clef 1 le chemin du fichier dans le zip.

Par exemple, si nous souhaitons que le fichier toto.png se retrouve dans le dossier IMG à l’intérieur du zip, l’argument fichiers_statiques doit avoir la valeur suivante :

#ARRAY{0,#ARRAY{0,toto.png, 1,IMG/toto.png}}

Depuis la version 3.0, trois arguments ont été ajoutés :
-  L’argument horschemin permet d’ajouter des fichiers pour lesquels la notion de chemin SPIP ne s’applique pas, par exemple, des images contenu dans IMG. Il doit se présenter sous forme d’un tableau de tableau. Chaque sous-tableau est de la forme #LISTE{nomdufichierlocal,nomdufichierdanslezip}. Depuis la version 5.0.0 du plugin, il est possible de remplacer nomdufichierlocal par une url http://<code> ou <code>https:// pour récupérer un fichier distant.
-  L’argument dureedevie (facultatif) indique la durée de vie affecté au zip, à compter de la date de zippage. On consultera « Effacer les zip produits par le Zippeur » pour plus de détails.
-  L’argument extension, ajouté avec la version 5.1 indique l’extension (sans le point). Par défaut vaut zip.

Autres fonctions

Il peut arriver que l’on souhaite que les squelettes appelés par le filtre ajoutent eux-même des fichiers dans le zip. Pour ce faire, on peut utiliser des filtres spécifiques à l’intérieur de ces squelettes.

Pour comprendre ces filtres, il faut savoir que |zippeur_dynamique crée d’abord à l’intérieur du répertoire tmp de SPIP un dossier du nom du zip qu’il va produire. Il copie ensuite les fichiers dans ce dossier, puis zippe le dossier.

Nous pouvons donc ajouter des fichiers dans le dossier avant qu’il ne soit zippé. Nous disposons de deux fonctions.

[(#VAL{chemin_origine}|zippeur_copier_fichier{chemin_destination})] récupère le fichier dont le chemin, au sens SPIP, est chemin_origine et le copie à l’emplacement chemin_destination au sein du dossier tmp.

Ainsi, pour ajouter dans notre dossier exemple le fichier titi.jpg, à l’intérieur d’un dossier IMG, nous écrivons :

[(#VAL{titi.jpg}|zippeur_copier_fichier{exemple/IMG/titi.jpg})]

Le second filtre est |zippeur_creer_fichier. Sa syntaxe complète est la suivante :

[(#VAL{squelette}|zippeur_creer_fichier{chemin_destination,options})]

Ce filtre interprète le squelette squelette, en lui passant éventuellement les paramètres d’environnement options, et copie le résultat dans le fichier chemin_destination du dossier tmp.

Exemple : nous avons un squelette ankou. Nous voulons copier ce qu’il produit, lorsqu’on l’appelle en lui passant l’argument id_article=1, dans notre dossier exemple, à l’intérieur d’un sous-dossier bretagne :

[(#VAL{ankou}|zippeur_creer_fichier{exemple/bretagne, #ARRAY{id_article,1}})]

Et en PHP

Comme tous les filtres SPIP, les filtres que nous définissons peuvent être utilisés en tant que fonction PHP ; leur premier argument correspondant au texte sur lequel le filtre s’applique [1].

Ainsi :

[(#VAL{ankou}|zippeur_creer_fichier{exemple/bretagne, #ARRAY{id_article,1}})]

a pour équivalent le code PHP suivant :

zippeur_creer_fichier('ankou', 'exemple/bretagne, array('id_article'=>1));

Notes

[1En réalité, c’est plutôt l’inverse qui est vrai : toute fonction PHP peut être utilisée comme filtre SPIP.

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom