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.html
ou 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.
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.
Discussions par date d’activité
11 discussions
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
Bonjour,
est-il possible de zipper un dossier et son contenu ? (garder la structure avec les sous-dossiers et les fichiers). J’utilise une boucle data avec la fonction
glob
.Exemple :
Qui deviendrait alors : IMG/zip/customers.zip
Spontanément je dirais oui, en utilisant ce qui est décrit dans « Usage avancé : zip sur mesure »
Répondre à ce message
Bonjour,
Merci pour ce plugin !
Sur un SPIP 3.1.2 [23169] je n’ai pas de fichiers log. Du coup, je ne sais pas pourquoi les zips ne sont pas correctement fabriqués. Un fichier est créé, avec une entrée en base, mais il est vide.
Sur SPIP 3.0.21 [22462], sur lequel le zippeur fonctionne, je n’ai pas de fichiers log non plus, d’ailleurs.
Les 2 installations ont la même version du zippeur : 4.1.4
Merci pour votre aide.
par défaut, seul les logs d’un certain niveaux sont enregistrés. Les logs de zippeur sont de niveau 5 -> pas enregistrés.
mettre
define('_LOG_FILTRE_GRAVITE', 8);
dans le fichier mes_options.php permettra de tout voir (mais au prisque de fichier de log bien chargé).Merci beaucoup pour votre réponse rapide ... et pour la mise à jour concernant les logs.
Finalement, tout fonctionne très bien ... j’avais un problème dans ma boucle et le zippeur fabriquait allègrement des fichiers vides. (No comment).
Mais sur un serveur de dev local fraîchement installé dans un monde en perpétuelle évolution, je me demandais si mon phpTrucZip (Php PclZip) était compatible.
Encore merci !
Répondre à ce message
Bonjour,
Pour ceux que cela intéresse, voici un bout de code qui va produire un zip contenant tous les logos (normaux et pas survol) des auteurs faisant partis d’un certain groupe de mots-clés.
Cette boucle a été faite sur un SPIP 2.1 avec zippeur 3. Je me suis inspiré du modèle zip_doc_article du plugin.
Elle va chercher tous les auteurs du groupe de mots-clés « trombi » et ayant un logo. On crée une liste pour avoir leur nom et le nom du fichier logo/photo. Cela nous permet d’avoir une liste complète des noms et les logos associés. Ce n’est pas forcément à mettre en page public, mais ça aide ;-)
Attention tout de même, si vous avez beaucoup d’auteurs répondant à ces critères, votre page va mettre beaucoup de temps à s’afficher. Actuellement, j’ai 530 auteurs issus de cette boucle, ma page tourne depuis 10 minutes (en local). ;-)
Une erreur dans le code, c’est le filtre concat et pas contact. Soit donc :
[(#SET{logo_normal_src,#VAL{'IMG/'}|concat{#GET{logo_normal_nom}}})]
:-D
Et donc, avec cette correction, ça prend 10 secondes pour générer en local un zip de 29Mo.
bah 10 secondes c’est nettement mieux que dix minutes :-P
Pour sûr ! ;-)
Répondre à ce message
Bonsoir,
Je souhaiterais rendre cette fonction active uniquement à partir du moment ou un article dispose de plus d’un document mais je ne vois pas comment faire ?
Merci :)
quelle fonction ? comment insérer vous le zip ?
Désolé de ne pas avoir été clair :
J’ai inséré ceci
Dans mon squelette article.html afin de pouvoir télécharger des documents zippés. Seulement, je souhaiterais que la possibilité de télécharger du document zippé ne soit effective que si l’article contient au moins 2 documents. Donc si un article ne contient qu’un seul document, je ne souhaite pas que soit proposé de zipper celui-ci.
Il faut conditionner l’affichage de
[(#MODELE{zip_doc_article}{id_article})]
.Une manière simple de le faire est la suivante :
Voir la documentation sur les filtres de tests et sur partie laternative des boucles pour plus d’infos
Merci, j’y suis presque !
J’ai du virer des trucs que tu as mis sur le code que tu m’a proposé. J’ai pas compris comment ils ont pu arriver la.
Par contre, si il détecte bien n+x documents, il affiche aussi n+x fois le lien pour télécharger le zip ^^
Je vais voir du coté des filtres de test et alternative des boucles.
heu bizarre là. Tu a mis où cette boucle ?
tu peux me mettre le code complet ?
bonne nuit
++
J’ai placé cela dans BOUCLE_contenu_article du skel contenu/article.html de zpip.
Bonne nuit à toi et merci pour ton aide
ce n’est pas la boucle que j’ai mise.
Je reprend :
l. 1 : une boucle totodocuments autofermante, qui n’affiche rien.
l. 5 : fin de la partie alternative. Tout ce qu’il y a entre
<\BOUCLE...>
et<\\B...>
est executé si la boucle ne retourne rien. C’est le cas ici.l. 2 : on test si le la BOUCLE a un nombre d’itération supérieur à 1.
l. 3. Si c’est le cas, on affiche le modele de zip
J’avais (cru ?) pourtant mis ce code au départ avant de tester à « ma facon » ...
En tout cas, maintenant ça fonctionne, merci encore :)
de rien... il y a tjr des choses qu’on croit faire et qu’on fait pas :-)
Répondre à ce message
Bonjour et merci pour ce plugin
Deux bricoles :
1) Plugin Zippeur bien installé, pourtant dans la liste des plugins, j’ai le message « Installation du plugin Zippeur Echec » en haut de la liste. Grave ? Pourtant ça fonctionne...
2) Lorsque je clique sur « En savoir plus » dans la liste des plugins... Erreur de redirection vers la page de spip-contrib.
Encore Merci
merci de me relancer sur le sujet après le 1er janvier, je suis en ce moment en vacances
ai trouvé le temps de regarder. C’est corrigé, merci
Répondre à ce message
Très bon ! Et fonctionne sur 2.3-dev sans soucis (hormis la configuration mais ça ne devrait pas être compliqué d’adapter).
Sans bonux, pour éviter de tenter de zipper des fichiers de plus de 50mo je fais une petite boucle si le plus gros fichier ne dépasse pas 50mo.
Encore bravo pour cet excellent plugin !
c’est quoi le pb avec la configuration ?
Normalement il n’y en a plus avec 48964, mais je n’ai pas testé en SPIP 2.0 + cfg, je n’ai essayé qu’en 2.1+cfg et 3.
N’hésite pas à me dire si certaines modifs ne te conviennent pas. Merci encore pour ce plugin qui est très très pratique !
on verra, j’ai plus de 2.0, donc on va attendre qu’une personne poste un méchant commentaires :-)
par contre je suis d’avis de ne pas mettre de borne supérieur dans plugin.xml car rien n’exclus que le plugins soit compatible spip 3.1, donc je préfére laisser l’intervalle ouvert
j’ai testé hier soir sur SPIP 3 et j’ai pas eu besoin de modifier le plugin.xml. C’est quoi cette nouvelle pipeline « déclarer_table_principale » ? c’est indispensable ?
oui, j’ai corrigé la borne supérieur, Eric m’a demandé de mettre l’étoile (pris en charge par spip3 uniquement, mais avec la double déclaration ça passe.)
La double déclaration dans plugin.xml c’est pour éviter de forcer l’installation de CFG. Mais dans le cas présent on pourrait imaginer avoir une unique déclaration car même en 2/2.1 le plugin peut être configuré soit par bonux, soit par CFG (donc on pourrait mettre utilise à la place de necessite, et faire une unique declaration pour spip du 2 au 3). Plusieurs plugins font cela, mais c’est vrai qu’il n’y a pas de « bonne solution ». Les utilisateurs qui n’ont ni l’un ni l’autre serait pénalisés mais ça peut s’indiquer dans la documentation du plugin. Je ne l’ai pas fait car je ne voulais pas trop "bousculer" le fonctionnement actuel du plugin, ça relève du choix des auteurs.
Pour le pipeline declarer_table_principale, il y était déjà, je n’ai rien ajouté. Il sert à la déclaration de la table principale de zippeur, je crois que c’est tout.
Désolé pour les oublis et merci pour tes corrections matinales.
oui pour la pipeline c’est moi qui suis fatigué :)
pour la double déclaration, ce n’est pas très grave. Au grottes je migrerais vers le paquet.xml
Répondre à ce message
Bonjour,
Est-il possible d’avoir un zip contenant les fichiers avec le titre du document et non avec le nom initial du fichier ?
Merci
pour le moment rien n’est prévu pour le permettre et je suis pas très chaud pour le coder : nombreux pb.
Entre autres : gestions des extensions, des accents, des espaces, des tailles de noms.
effectivement, les gens peuvent mettre n’importe quoi en titre de documents.
De plus il faudrait renommer les fichiers avant le zippage, sans toucher au nom en local.
Pourquoi ne pas leurs donner le bon nom dés le départ ? ^^
Répondre à ce message
Problème :
Message dans la partie privée :
Warning : filesize() [function.filesize] : stat failed for ../local/cache-zip/article_470.zip in /.../ecrire/public/composer.php(49) : eval()’d code on line 80
Warning : filesize() [function.filesize] : stat failed for ../local/cache-zip/article_470.zip in /.../ecrire/public/composer.php(49) : eval()’d code on line 91
Warning : filesize() [function.filesize] : stat failed for ../local/cache-zip/article_470.zip in /.../ecrire/public/composer.php(49) : eval()’d code on line 101
Qu’est-ce qui ne va pas ?
Merci
Robert
un bug :)
en fait une histoire de chemin.
La version 0.5 corrige ce problème … ainsi que d’autres en terme de performance
Répondre à ce message
Salut,
Moi aussi j’attendais ce plugin depuis longtemps.
Malheureusement, ça ne fonctionne pas sur un site hébergé chez Free.
Voici le message d’erreur :
vérifier les droits d’écriture
Le système a rencontré une erreur lors de l’écriture du fichier _DIR_SITElocal//.ok. Veuillez, en tant qu’administrateur du site, vérifier les droits d’écriture sur le répertoire _DIR_SITElocal.
Je n’arrive pas à le régler.
Merci d’avance pour votre aide.
l’origine du problème est connue.
pouvez vous tester ceci : remplace _DIR_SITE dans les fichier du plugin par _DIR_RACINE ?
Il va falloir patienter un peu car je n’ai pas accés à SVN pour le moment.
Merci, ça fonctionne maintenant.
J’aurai tout de même une dernière requête, Je voudrai resserrer le fichier zip uniquement sur les images (jpg,png...).
Voici ce que j’ai mis sur ma page article mais ça ne fonctionne pas :
Il prend tous les documents en compte dans le zip.
Voir cette page par exemple : http://pmbc1.free.fr/spip.php?article240
Merci d’avance !!
modifiez le fichier modeles/zip_doc_articles.html du plugin :
comme critère de chacune des 2 boucles ;
et vider le dossier local/cache-zip
Malgré plusieurs tests, ça ne marche pas.
J’ai donc uniquement rajouté
à la 1re boucle du fichier modèle et mis
dans mon article et là ça fonctionne parfaitement.
effectivement j’ai répondu un peu vite, cela ne pouvait marcher.
En revanche :
- je vous conseil fortement de copier ce fichier dans le dossier modeles de votre dossiers squelettes. Sinon vous perdrez la modifications lors de la mise à jour du plugin.
- je vous conseil également de mettre ce critère sur la deuxième boucle pour éviter des pépins en cas de mise à jour des images.
Ok, merci pour les conseils.
En tous cas, ce plugin me rend bien service.
Merci encore !!
pourriez vous testez (à partir de 1 h) la nouvelle version que j’ai mise en ligne ce soir ?
elle devrait résoudre le premier problème
merci
Cette version résous le 1er pb.
Merci.
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 :
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.
Suivre les commentaires : |