Je continue de terminer mon projet. J'aime à lire cette phrase...
Aujourd'hui, je vous présente un petit plugin très sympa, très utile dans mon cas, c'est la raison pour laquelle j'ai dû le développer. Il vous permet, une fois installé, de pouvoir placer dans n'importe quel article le short code {zippage} (le franglicisme est volontaire!) qui va alors avoir, pour une page d'un article jumla content donné, récupérer l'ensemble des fichiers PDF positionnés sur des liens hypertextes de téléchargement, afin de procéder à la création d'une archive zip, dans laquelles les fichiers seront intégrés, téléchargeable.
Comme dans chacuns de mes liens hypertextes de la balise <a de téléchargement, je dispose d'une propriété HTML5 que j'ai intitulé data-type qui a pour rôle, dans un autre contexte d'un autre module que j'ai écrit, de pouvoir classifier des documents téléchargeables selon un type fonctionnel de document, de pouvoir utiliser cette même propriété afin de pouvoir ordonner, pour un article donné, l'ensemble des fichiers téléchargeables dans des dossiers du ZIP.
Ainsi, voici un exemple d'utilisatioon dans mes articles
<p><a href="/images/trad.pdf" data-type="UTG">fich 1</a></p>
<p><a href="/images/ajouter-message-administrator.pdf" data-type="RALE">fic 2</a></p>
<p><a href="/images/ajouter-message-administrator.pdf" data-type="IC">fic 2</a></p>
<p><a href="/images/ajouter-message-administrator.pdf" data-type="FIN">fic 2</a></p>
<p><a href="/images/ajouter-message-administrator.pdf" data-type="IC">fic 2</a></p>
<p><a href="/images/ajouter-message-administrator.pdf" data-type="FIN">fic 2</a></p>
Fonctionnement
Placer à l'endroit où vous souhaitez voir afficher votre lien de téléchargement de votre article, le shortcode {zippage} et vous verrez alors apparaître dans votre article, un lien hypertexte de téléchargement agrémenté d'une petite icône zip. Je n'ai pas défini de champs pour modifier ni le contenu, ni l'image de téléchargement, si vous souhaitez le faire, rendez-vous ligne 29 du fichier php.
Je dois avouer que je suis actuellement très à la bourre sur mon projet, et des choses futiles à ne pas développer... Le plugin ne gère que des pdf LOCAUX et ne télécharge pas les fichiers distants, car je n'en ai pas l'utiité.
Principe technique
Lorsque vous aurez intégré ce plugin de contenu sur votre article, ce dernier va alors une fois chargé et afficher dans le moteur Joomla 3, récupérer au moyen d'expressions rationnelles l'ensemble des liens hypertextes vers des fichiers PDF qui sont spécifiés sur la page en cours, les concentrer dans une archive au format ZIP et vous retourner un lien de téléchargement. Ce plugin ne fait que cela et ne travaille que sur la page en cours !
zippage.php
<?php
defined('_JEXEC') or die('Access deny');
class plgContentZipFicPage extends JPlugin
{
function onContentPrepare($content, $article, $params, $limit){
$document = JFactory::getDocument();
$document->addStyleSheet(JURI::base().'plugins/content/zipficpage/style.css');
$re = '/href\s*?="\s*?(.*pdf|PDF|pDf|pdF|Pdf|pDF|PdF|PDf).*>(.*)<\/a>/i';
preg_match_all($re, $article->text, $matches, PREG_SET_ORDER, 0);
$zip = new ZipArchive();
//Je calcule ici le nom de l'archive en récupérant l'ID de l'article et son alias, me permettant ainsi d'avoir un nom de fichier "propre"
$filename = JRequest::getVar('id')."-".$article->id."-".$article->alias.".zip";
if ($zip->open('ficheMat_'.$article->id.'-'.$article->alias.'.zip', ZipArchive::CREATE) === TRUE) //j'écrase systematiquement le fichier si existant
{
//Je lance un parcours de l'ensemble des fichiers LOCAUX (je ne prends pas en compte les fichiers stockés sur des sereurs ext)
foreach($matches as $unFic)
{
//Comme cette URL peut être entre commentaires, je teste si le fichier existe ou pas. Je ne l'ajoute à l'archive que s'il existe !
if (file_exists($unFic[1]))
{
$zip->addFile($unFic[1], $unFic[1]);
}
}
}
$zip->setArchiveComment("Article ".$article->id.":".$article->title);
$machaine = '<div class="zip-download"><a href="'.basename($zip->filename).'" target="_blank"><img src="'.JURI::base().'plugins/content/zipficpage/icon-zip.png">[[[TELECHARGER_FICHIERS_ZIPPES]]]</a></div>';
$zip->close();
$article->text = str_replace('{zipficpage}',$machaine,$article->text);
}
}
?>
zippage.xml
<?xml version="1.0" encoding="utf-8"?>
<extension version="1.0" type="plugin" group="content" method="upgrade">
<name>ZipPage</name>
<author>Sébastien LHUILLIER</author>
<creationDate>Avril 2024</creationDate>
<copyright></copyright>
<license></license>
<authorEmail>Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.</authorEmail>
<authorUrl>www.sebastien-lhuillier.com</authorUrl>
<version>1.0</version>
<description>
Zippe tous les fichiers LOCAUX de la page. Le classement des fichier dans l'archive s'appuie sur la propriété data-type des liens hypertexte. En acs d'absence, les fichiers sont en vrac dans le dossier VRAC.
</description>
<files>
<filename>zippage.xml</filename>
<filename plugin="zippage">zippage.php</filename>
</files>
</extension>
Mises à jours
| 30 juin 2024 | Relecture de mon code et découverte de l'absence totale de fonctionnement... dans le fichier php |
