SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano | Nederlands

288 Plugins, 197 contribs sur SPIP-Zone, 237 visiteurs en ce moment

Accueil > Squelettes > Outils pour squelettes > Zippeur > Zipper des fichiers produits par des squelettes

Zipper des fichiers produits par des squelettes

27 mars 2012 – par Maïeul – commentaires

7 votes

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 :

  1. [(#VAL{exemple}|zippeur_dynamique{'','',#ARRAY{
  2. 0,#ARRAY{
  3. 0,squelette,
  4. 1,squelette1,
  5. 2,#ARRAY{
  6. id_article,1}
  7. }
  8. }
  9. })]

Télécharger

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 :

  1. <a href="[(#VAL{exemple}|zippeur_dynamique{'','',#ARRAY{
  2. 0,#ARRAY{
  3. 0,squelette,
  4. 1,squelette1,
  5. 2,#ARRAY{
  6. id_article,1}
  7. }
  8. }
  9. })]">Le zip</a>

Télécharger

Syntaxe complète

La syntaxe complète du filtre est la suivante :

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

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 :

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

Depuis la version 3.0, deux 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.

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 :

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

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

  1. [(#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 :

  1. [(#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.

Dernière modification de cette page le 13 décembre 2016

Retour en haut de la page

Vos commentaires

  • Le 13 avril 2016 à 17:11, par associate-it En réponse à : Zipper des fichiers produits par des squelettes

    Bonjour,

    Merci pour ce plugin super utile !

    J’utilise le filtre zippeur_dynamique pour générer un zip qui contient un PDF généré dynamiquement par le plugin SpiPDF et plusieurs fichiers statiques attachés à un auteur.

    Le code que j’ai fonctionne bien pour un lien, mais je souhaiterais inclure deux liens vers ce fichier zip dans la même page (en haut et en bas de la page).

    Lorsque je mets deux fois le code ci-dessous dans le même squelette, j’obtiens l’erreur

    « Le système a rencontré une erreur lors de l’écriture du fichier local/Nom_fichier_ZIP/Nom_fichier_genere_par_SpiPDF.pdf. Veuillez, en tant qu’administrateur du site, vérifier les droits d’écriture sur le répertoire local/Nom_fichier_ZIP. ».

    1. <a href="[(#VAL{Dossier_[(#GET{num_dossier})]}|zippeur_dynamique{'','',#ARRAY{
    2. 0,#ARRAY{
    3. 0,spipdf,
    4. 1,Dossier_#GET{num_dossier}.pdf,
    5. 2,#ARRAY{
    6. spipdf,pdf_dossier,
    7. id_auteur,#ENV{id_auteur}
    8. }
    9. }
    10. },#GET{liste_fichiers},'','48*3600'
    11. })]">Dossier complet</a>

    Télécharger

    Par contre, si je fais change juste le nom du fichier ZIP pour le second lien, ca fonctionne :

    1. <a href="[(#VAL{Dossier_[(#GET{num_dossier})]_bis}|zippeur_dynamique{'','',#ARRAY{
    2. 0,#ARRAY{
    3. 0,spipdf,
    4. 1,Dossier_#GET{num_dossier}.pdf,
    5. 2,#ARRAY{
    6. spipdf,pdf_dossier,
    7. id_auteur,#ENV{id_auteur}
    8. }
    9. }
    10. },#GET{liste_fichiers},'','48*3600'
    11. })]">Dossier complet</a>

    Télécharger

    Répondre à ce message

  • Le 2 avril 2012 à 23:05, par Amaury Adon En réponse à : Zipper des fichiers produits par des squelettes

    Merci pour cette réponse.
    Juste une précision, j’étais dans le cas d’un squelette zpip. Autant on peut mettre l’appel du code du zappeur dans une page z (dans mon cas contenu/page-zip.html) autant le squelette à interpréter doit être à la racine du dossier squelettes (ou du plugin si c’est un squelette en plugin).
    En tout cas ça marche et merci beaucoup.
    Amaury

    • Le 3 avril 2012 à 14:14, par Maïeul En réponse à : Zipper des fichiers produits par des squelettes

      non, il peut être dans un sous dossier, mais dans ce cas il faut le préciser (cf la notion de chemin que j’ai mis dans l’article)

      ex

      1. <a href="[(#VAL{exemple}|zippeur_dynamique{'','',#ARRAY{
      2. 0,#ARRAY{
      3. 0,dossier/squelette,
      4. 1,squelette1,
      5. 2,#ARRAY{
      6. id_article,1}
      7. }
      8. }
      9. })]">Le zip</a>

      Télécharger

    Répondre à ce message

  • Le 2 avril 2012 à 22:33, par Amaury Adon En réponse à : Zipper des fichiers produits par des squelettes

    Bonsoir
    Je dois avouer que je ne comprends pas bien.
    Imaginons qu’on veuille récupérer le titre et le texte d’un article, on utilisera sans doute quelque chose comme

    <BOUCLE_zip(ARTICLES){id_article}>
    <h2>#TITRE</h2>
    #TEXTE
    </BOUCLE_zip>

    Mais où faut-il placer ce code ? dans squelette ou dans squelette1 ? Parce que (mais c’est sûrement par ce que je m’y prend mal quelque part...), que ce soit dans l’un ou dans l’autre, je n’obtiens rien de probant.

    • Le 2 avril 2012 à 22:40, par Maïeul En réponse à : Zipper des fichiers produits par des squelettes

      Vous souhaitez obtenir un fichier appelé squelette1 contenant le titre de l’article, et mettre ce fichier dans un zip.

      Vous mettez dans le fichier squelette.html :

      <BOUCLE_zip(ARTICLES){id_article}>
      <h2>#TITRE</h2>
      #TEXTE
      </BOUCLE_zip>

      Ensuite dans un autre squelette, vous mettez :

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

      Ceci va interpeter squelette.html et produire un fichier nommer squelette1 qui sera zipper dans un fichier nommé exemple.zip

    • Le 2 avril 2012 à 23:05, par Amaury Adon En réponse à : Zipper des fichiers produits par des squelettes

      Merci pour cette réponse.
      Juste une précision, j’étais dans le cas d’un squelette zpip. Autant on peut mettre l’appel du code du zappeur dans une page z (dans mon cas contenu/page-zip.html) autant le squelette à interpréter doit être à la racine du dossier squelettes (ou du plugin si c’est un squelette en plugin).
      En tout cas ça marche et merci beaucoup.
      Amaury

    Répondre à ce message

Répondre à cet article

Qui êtes-vous ?

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 Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Ajouter un document

Retour en haut de la page

Ça discute par ici

  • Refonte de l’identité graphique

    10 juillet – 31 commentaires

    Lors de la SPIP Party 2017 à Toulouse, un nouveau contributeur est venu nous présenter son travail sur une refonte du logo. Au delà de la refonte du logo, c’est une toute nouvelle identité graphique pour SPIP que Jordan nous propose. Voici une (...)

  • Enluminures typographiques V3

    25 juillet 2009 – 185 commentaires

    Les Enluminures typographiques V3 permettent d’ajouter au Porte plume les raccourcis typographiques présents dans le Plugin Barre Typographique Enluminée. C’est une extension du PortePlume. Pour la documentation d’usage, se reporter à celle du (...)

  • LinkCheck : vérificateur de liens

    13 février 2015 – 94 commentaires

    Ce plugin permet de chercher et tester l’ensemble des liens présents dans les objets. Vous pourrez donc en quelques clics connaître les liens brisés ou défectueux qui se sont immiscés dans le contenu de votre site SPIP. La vérification s’effectue en (...)

  • Serveur HTTP abstrait

    25 novembre 2013 – commentaires

    Un plugin-outil pour aider les développeurs à implémenter des API orientées REST, basées sur les méthodes HTTP (get, post, put, delete). Ce plugin a pour but premier de normaliser des URL que l’on pourra appeler pour manipuler les données du site. À (...)

  • Agenda Fullcalendar facile

    29 octobre 2016 – 33 commentaires

    Dans un précédent article, nous expliquions comment afficher un agenda Fullcalendar sur son site avec le plugin agenda. Cependant, ceci nécessite des manipulation de squelettes, ce qui n’est pas toujours évident lorsqu’on débute. La présente (...)

Ça spipe par là