Zippeur

Il est parfois utile, notamment quand un article comprend beaucoup de documents joints, de proposer l’ensemble des documents sous forme de zip.

Ce plugin permet à SPIP de générer une archive zip à partir d’une liste de documents.

La présente version est valable à partir de la v7 du plugin.

Installation

Il s’installe comme n’importe quel plugin.

Il nécessite assez de place étant donné qu’on duplique les documents.

Les zip seront créés dans le dossier local/cache-zip.

Le plugin s’appuie sur les librairies de SPIP pour le Zippage.

Utilisation simple : le zip des documents joints à un article

Le plugin définit un modèle zip_doc_article qui permet de ziper les documents d’un article.

Dans le texte d’un article

Dans un article, appelez le modèle zip_doc_article de la manière suivante :

<zip_doc_article|>

L’appel du modèle renvoie un lien vers le zip.

Les documents de l’article courant seront alors zippés.

Avec cette méthode vous contrôlez les articles pour lesquelles vous proposez un zip.

Dans un squelette

Dans le squelette article.htmlou dans contenu/article.html si vous utilisez un squelette de type « Z », mettez

[(#MODELE{zip_doc_article}{id_article})]

Le zip sera proposé pour tous les articles qui possèdent des documents (que ces derniers soient en mode image ou document).

Vous pouvez passer un argument {mode=image} ou {mode=document} pour spécifier le mode... En l’absence d’argument mode le modèle prend les documents quelque soit le mode.

Utilisation simple : le zip des documents d’un album

Depuis la version 3.1, il est possible de zipper les documents d’un album : il suffit d’utiliser le modèle zip_doc_album. Ce modèle s’utilise de la même manière que le précédent, à l’exception que id_article est à remplacer par id_album.

Utilisation simple : lien vers le zip des documents de l’article / de l’album

Depuis la version 4.0, il est possible d’utiliser le raccourcis [texte->zip_doc_articlexxx] pour pointer vers un zip des document lié à l’article xxx ; de même on peut utiliser [texte->zip_doc_albumxxx] pour les documents de l’album xxx.

Usage avancé : zip sur mesure

Le plugin définit un filtre zippeur, qui s’applique sur un tableau (#ARRAY) contenant la liste des fichiers. Il retourne l’URL (relative) du zip.

[(touSlesdocs|zippeur{unedate,LaMethode,unnomdefichier,plat,unedureedevie,extension})]

L’argument unedate doit être une date formatée en SQL. En effet pour éviter de recalculer à chaque fois le zip (ce qui prendrait du temps), le plugin stocke en base de donnée le nom du zip associé à une date. Si la date passée en argument diffère de la date en base de donnée, le plugin recalcule le zip.

L’argument LaMethode doit être vide, il correspond à une ancienne version du plugin qui proposait plusieurs méthodes de zip, ce qui n’est plus le cas.

L’argument unnomdefichier (facultatif) peut-être le nom du fichier zip, sans l’extension. En l’absence de cet argument, le plugin en génére un à partir du contenu du tableau fournit en premier argument.

L’argument plat vaut 'non' par défaut. Si 'oui’, cela évite d’avoir dans le zip produit l’arboresence complète depuis le dossier local.

L’argument unedureedevie (facultatif) est apparu avec la version 3 du plugin. Il 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, est l’extension du zip (sans le point). Par défaut il vaut zip, mais il peut être changé pour par exemple produire un epub.

Exemple : je veux faire un zip de tous les fichiers présents sur le site.

[(#REM)<!-- On remplis un tableau avec les chemins de fichiers-->]

#SET{doc,#ARRAY}


<BOUCLE_doc(DOCUMENTS){tout}>
	[(#SET{doc,#GET{doc}|push{#FICHIER|copie_locale}})]
	[(#REM) ne pas oublier le copie_locale, sinon le zip ne contiendra pas les fichiers distant ]
</BOUCLE_doc>

[(#REM) On génére le zip en donnant comme date la dernière modification d'un document]

<BOUCLE_zip(DOCUMENTS){tout}{0,1}{!par maj}>
	<a href="[(#GET{doc}|zippeur{#MAJ,,toutlesdoc})]">Tout les docs</a>
</BOUCLE_zip>
</B_doc>

Usage très avancé : fabrication d’un ZIP contenant des fichiers issus de squelettes

Depuis la version 2.0, il est possible d’utiliser Zippeur au sein d’un squelette ou d’un plugin pour produire des Zip contenant des fichiers issus de l’interprétation d’un squelette SPIP.

Cette fonctionnalité est documentée dans un article à part.

Limites (attention pour SPIPeur avancé)

Il peut arriver que pour des fichiers très lourds (par exemple plus de 300 Mo) le serveur n’arrive pas à compresser. Pour le moment le plugin n’intégre pas automatiquement de « taille limite » avant essai de zippage.

Si vous êtes dans la possibilité d’avoir des fichiers lourds avec un serveur qui ne suivrait pas — et cela dépend de votre serveur —il faudrait que vous fassiez vous même le test dans les boucles.

Pour ce faire vous pouvez utiliser le critère somme de SPIP-Bonux afin de faire un test conditionnel.

Cas où le cache est désactivé

Si le cache de SPIP est désactivé à l’aide de la constante _NO_CACHE, les zip sont recalculés à chaque appel de la commande.

Toutefois si la constante _NO_CACHE_SAUF_ZIPPEUR est mise à 1, alors le zips seront aussi mis en cache.

Pour les webmestre : fichiers de log

Zippeur génére deux fichiers de logs spécifiques, dans le dossier tmp :
-  zippeur.log : à chaque fois qu’un zip est généré, son nom est rajouté.
-  zippeur_erreur.log : il peut arriver qu’un zip ne se fabriquent pas exactement comme souhaité. Ce fichier contient les erreurs qui peuvent se produire.

Discussion

Une discussion

  • 2

    Je ne comprends pas :

    Erreur d’exécution ../squelettes/modeles/zip_doc_article.html | File […]/plugins/auto/zippeur/v8.0.0/zippeur_fonctions.php Line 137 : Class « Spip\Archiver\SpipArchiver » not found"

    Que faire ?

    SPIP 4.2.6 et PHP Version 8.0.30

    • Il y avait un bug lié au fait que je devellopais sur 5.0 et pas 4.2, et donc l’autoloading des classes n’est pas le même.

      La v8.0.1 du plugin, juste envoyée, résoud le problème.

    • Super ! Merci !
      ça marche

    Répondre à ce message

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