Forum CMS Made Simple Francophone

Aide francophone sur CMS Made Simple

Vous n'êtes pas identifié(e).

Annonce

ATTENTION

  • Prenez le temps de rechercher si quelqu'un n'a pas déjà proposé une solution à votre problème. Sur le forum français et sur le wiki
  • Pensez à mettre à jour votre version de CMS Made Simple. Nous ne faisons de support que sur LA dernière version de CMS Made Simple.
  • Renseignez impérativement le formulaire de nouveau message de manière la plus complète que possible. Dans votre CMS utiliser le menu Administration du site/Informations du système en haut Vue au format texte. Ces informations demandées nous permettent de mieux vous aider
  • Ajoutez [Résolu] au début du titre de votre 1er message lorsqu'une solution a été trouvée.

#1 19/11/2012 12:39:04

Jean le Chauve
Sa Seigneurie le Chauve, Comte du domaine .be
Lieu : Bruxelles
Inscription : 13/12/2007
Messages : 4 693
Site Web

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

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

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 :

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];
  }
}

Dernière modification par Jean le Chauve (22/04/2015 15:48:51)

Hors ligne

#2 19/11/2012 12:44:02

bess
Administrateur
Lieu : Rennes
Inscription : 16/12/2008
Messages : 6 094
Site Web

Re : udt afficher liens de téléchargement en fonction de la page

toujours bien d'avoir ce genre d'astuce sous le coude, merci monsieur  wink

Hors ligne

#3 08/02/2013 16:11:05

berninoel42
Membre
Inscription : 26/08/2009
Messages : 159

Re : udt afficher liens de téléchargement en fonction de la page

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.

Hors ligne

#4 08/02/2013 16:38:42

bess
Administrateur
Lieu : Rennes
Inscription : 16/12/2008
Messages : 6 094
Site Web

Re : udt afficher liens de téléchargement en fonction de la page

remplace 3 fois le code

<p><a href

par

<p><a target='_blank' href

mais cela dit tu as certainement déjà essayé cela non ?

Hors ligne

#5 08/02/2013 22:46:50

berninoel42
Membre
Inscription : 26/08/2009
Messages : 159

Re : udt afficher liens de téléchargement en fonction de la page

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_smile

Hors ligne

#6 22/04/2015 09:10:46

jcpapa
Membre
Inscription : 23/05/2013
Messages : 289

Re : udt afficher liens de téléchargement en fonction de la page

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

Dernière modification par jcpapa (22/04/2015 10:41:21)


roll

Hors ligne

Pied de page des forums