Bonjour,

opquast tout comme le bon sens recommandent d’afficher la taille des fichiers disponibles au téléchargement.

Plutôt que d’entrer cette information « à la main » à chaque fois, j’ai cherché un moyen d’automatiser.

J’ai d’abord employé une fonction php :

<? function taille($fi){
$ta=filesize($fi);
if ($ta >= 1073741824)
{$ta = round($ta / 1073741824 * 100) / 100 . " Gio";}
elseif ($ta >= 1048576)
{$ta = round($ta / 1048576 * 100) / 100 . " Mio";}
elseif ($ta >= 1024)
{$ta = round($ta / 1024 * 100) / 100 . " Kio";}
else
{$ta = $ta . " o";}
if($ta==0) {$ta="-";}
return $ta;}
?>


Il faut ensuite, pour afficher la taille, faire quelque chose comme
<a href="mon_archive.zip" title="Téléchargez mon archive (<? $taille = taille(mon_archive.zip); echo $taille; ?>).">Bla bla bla</a>


Avantage : la taille est présente dans le code source, pas la peine de modifier le code si la taille de l’archive change.
Inconvénient : il faut faire un appel explicite à la fonction à chaque fois.

J’ai voulu faire encore plus automatique, avec jQuery :
<script>
function hdrDetails(i, elm, cl) {
cl = cl/1024;
var sz = cl>1024?"Mio":"Kio";
cl = cl>1024?cl/1024:cl;
var origTitle = $(elm).eq(i).attr('title');
var nom = $(elm).eq(i).attr('href').split('/').pop().toLowerCase();
$(elm).eq(i).attr('title', origTitle+" ("+nom+", "+cl.toFixed(2)+" "+sz+")");}
$(function() {var elm="a[href$='.pdf'],"+"a[href$='.png'],"+"a[href$='.jpeg'],"+"a[href$='.zip'],"+"a[href$='.jpg'],"+"a[href$='.mp3'],"+"a[href$='.ogg'],"+"a[href$='.js'],"+"a[href$='.flac'],"+"a[href$='.wav'],"+"a[href$='.webm'],"+"a[href$='.ogv'],"+"a[href$='.mp4']";
$(elm).each(function(i, e) {if (e.hostname && e.hostname == location.hostname ) {
$.ajax({type: "HEAD",
url: $(this).attr("href"),
complete: function(xhr, textStatus) {
var cl=xhr.getResponseHeader("content-length");
if(textStatus=="success") {
var cl=xhr.getResponseHeader("content-length");
hdrDetails(i, elm, cl);}}});}});});
</script>


Avantage : le titre est automatiquement modifié, rien à faire.
Inconvénient ? La taille n’apparaît pas dans le code source, ça peux poser soucis? Les internautes ayant désactivé JavaScript n’ont plus accès à cette information, ça concerne beaucoup de monde?

Et côté calcul, il vaut mieux que cette charge soit côté serveur ou côté client?
Bref, je me demande si j’ai bien fait.

Évidemment, ici, prévalent l’accessibilité et l’élégance.
Merci,
catr.


EDIT : à vouloir trop bien faire… Les espaces insécables ne s’affichent pas dans ce forum, ils sont remplacés par des « &#8239; » (sic).

EDIT : PS : deux pages pour comparer : http://micr0lab.org/mu0l_0050/j.php (appel à jQuery) et http://micr0lab.org/mu0l_0050/p.php (appel à la fonction en php). J’ai testé avec webpagetest et gtmetrix, je n’ai pas vu de différence flagrante.
Modifié par catr (15 Oct 2012 - 12:09)