Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

udt afficher liens de téléchargement en fonction de la page
#1

Bonjour,
Pour un site de booking d'artistes, j'avais besoin d'automatiser l'affichage des liens de téléchargement des fiches techniques (pdf), photos (zip) et dossiers de présentation (pdf), ainsi que le poids de ces fichiers dans chaque page artiste (gérées par le module cataloger).
La technique que j'utilise peut s'appliquer dans bien d'autres contextes où l'on doit afficher des liens de téléchargement.

Chaque page d'artiste a un alias correspondant au nom de l'artiste (ex : lucie-carton pour Lucie Carton).
Certains artistes ont des fichiers disponibles en téléchargement, d'autres pas.

J'ai donc créé 3 dossiers dans uploads/catalogerfiles/ :
Dossier
Photos
FichesTechniques


Il me fallait donc un code qui cherche si un fichier au nom de l'artiste existe sur le serveur, et dans ce cas, l'affiche en tant que lien sur sa page.

L'utilisateur, pour sa part, n'a qu'à uploader, soit par ftp, soit par le gestionnaire de fichiers, les fichiers dans les différents dossiers.
Sa seule obligation est de nommer ces fichiers suivant l'alias de l'artiste et d'ajouter le suffixe correspondant (à modifier selon vos préférences). Ex. :
uploads/catalogerfiles/Dossier/lucie-carton-DP.pdf (-DP pour dossier de présentation)
uploads/catalogerfiles/Photos/lucie-carton-P.zip (-P pour photos
uploads/catalogerfiles/FichesTechniques/lucie-carton-FT.pdf -FT pour fiche technique)

Voici l'udt que j'ai appelée downloadArtistes
Code :
function human_filesize($bytes, $decimals = 0) {
  $sz = 'BKMGTP';
  $factor = floor((strlen($bytes) - 1) / 3);
  return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . @$sz[$factor];
}
$config = cmsms()->getConfig();
$filenameD = $config['root_path']."/uploads/catalogerfiles/Dossiers/".$params['name']."-DP.pdf";
$filenameFT = $config['root_path']."/uploads/catalogerfiles/FichesTechniques/".$params['name']."-FT.pdf";
$filenameP = $config['root_path']."/uploads/catalogerfiles/Photos/".$params['name']."-P.zip";
if (file_exists($filenameD)||file_exists($filenameFT)||file_exists($filenameP)) {
    echo "<h2>Téléchargements</h2>";
    if (file_exists($filenameD)) {
        echo "<p><a href=\"/uploads/catalogerfiles/Dossiers/".$params['name']."-DP.pdf\">Dossier de présentation (".human_filesize(filesize($filenameD)).")</a></p>";
    }
    if (file_exists($filenameFT)) {
        echo "<p><a href=\"/uploads/catalogerfiles/FichesTechniques/".$params['name']."-FT.pdf\">Fiche technique (".human_filesize(filesize($filenameFT)).")</a></p>";
    }
    if (file_exists($filenameP)) {
        echo "<p><a href=\"/uploads/catalogerfiles/Photos/".$params['name']."-P.zip\">Photos (".human_filesize(filesize($filenameP)).")</a></p>";
    }
}
Il ne reste plus qu'à appeler cette udt dans le sous-gabarit de catalogue (ici : item-CSS-based) de cette manière :
{downloadArtistes name=$page_alias}

Pour améliorer la visibilité, j'ai également ajouté une css appliquant une icône suivant l'extension des fichiers :
a[href$='.pdf'] {
background: url([[root_url]]/uploads/images/design/icones/pdf.png) no-repeat left center;
padding-left: 20px;
line-height: 16px;
}
a[href$='.zip'] {
background: url([[root_url]]/uploads/images/design/icones/zip.png) no-repeat left center;
padding-left: 20px;
line-height: 16px;
}

La fonction human_filesize() permet d'afficher le poids du fichier avec un préfixe d'unité suivant son poids : K, M, G.

Enjoy Smile

Démo : booking artistes

[edit]Depuis le passage en 1.11.7, vous risquez d'obtenir une erreur de "cannot redeclare function".
Il faut maintenant mettre la fonction dans une condition :
Code :
if (!function_exists(human_filesize)) {
  function human_filesize($bytes, $decimals = 0) {
    $sz = 'BKMGTP';
    $factor = floor((strlen($bytes) - 1) / 3);
    return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) . @$sz[$factor];
  }
}
Répondre


Messages dans ce sujet

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)