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
#2

toujours bien d'avoir ce genre d'astuce sous le coude, merci monsieur Wink
Répondre
#3

Bonjour,
Je n'arrive pas à mettre le téléchargement des fichiers en target="_blank".
Je ne sais pas si c'est dans l'UDT ou dans le gabarit du module.
Si vous avez une petite soluce je suis preneur.
Merci.
Répondre
#4

remplace 3 fois le code

Citation :<p><a href

par

Citation :<p><a target='_blank' href

mais cela dit tu as certainement déjà essayé cela non ?
Répondre
#5

Oui j'ai déjà essayé. Mais j'avais mis le target après le href...Je viens de réessayer et ca fonctionne devant. Je pense que j'ai eu un problème de cache entre temps.
Merci Vous êtes génial ! Big Grin
Répondre
#6

Je pose mon problème sur une nouvelle question...
Merci

Rolleyes
Répondre


Atteindre :


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