Afficher le type et la taille du fichier lié

© Christian PAULUS. Document créé le 23 septembre 2010 , mis à jour le 23 septembre 2010.

Si perçante soit la vue, on ne se voit jamais de dos. Proverbe chinois

Accueil du site > Astuces > SPIP > Afficher le type et la taille du fichier lié

filtre / SPIP 2.1.2

Dans un texte publié sur votre page web, les liens sur vos documents affichent le titre de votre document, ou un texte que vous lui préférez.

En complément, il est souvent pratique de connaître le type de fichier que le visiteur s’apprête à télécharger, et surtout la taille de ce fichier, son poids. Cette dernière information permet à votre visiteur d’estimer le temps de téléchargement et la place disque nécessaire.

Ainsi, votre lien affiché (inutile de cliquer sur cet exemple, c’est une simulation de lien) :

Comment devenir millionnaire en 1 clic

est complété ainsi :

Comment devenir millionnaire en 1 clic [pdf - 3 Mo]

Il existe probablement de nombreuses solutions pour compléter cette information automatiquement. En voici une appliquant un filtre à un texte entier, à insérer dans vos squelettes.

Un lien sur un document

Pour insérer un lien sur un document dans votre texte dans la boîte d’édition SPIP, classiquement :

[Double apéro->doc102]

utilisera le texte de gauche en guise de titre de lien.

[->doc102]

utilisera le titre de votre document en guise de titre de lien.

Pour plus d’informations à propos des liens dans vos textes :

Un filtre pour analyser le type et la taille d’un document

Le filtre preciser_liens_doc_in proposé ici, analyse le texte passé en paramètre, cherche les liens internes sur les documents, en découvre le type de document et sa taille et insère ces informations dans le lien en question.

Ce filtre est à ajouter à votre fichier mes_fonctions.php :

/**
* Filtre
* Ajoute les détails du fichier en fin de lien (extension, taille)
*
* A utiliser en filtre global: ex.: #TEXTE|preciser_liens_doc_in
*
* @see: http://www.quesaco.org/Afficher-le-type-et-la-taille-du-fichier-lie
* */
function preciser_liens_doc_in($texte)
{
   // un doc local est spip_in
   $t = "class='spip_in'";

   $matches = array();
   $search = array();
   $replace = array();
   
   // si lien sur doc local
   if(strstr($texte, $t))
   {
       // noter tous les liens
       preg_match_all('=(<a href[^>]+>)([^<]+)(</a>)=', $texte, $matches);
       
       // $matches[0][0] = '<a href=....>nom_fichier</a>'
       // $matches[1][0] = '<a href=....>'
       // $matches[2][0] = 'nom_fichier'
       // $matches[3][0] = '</a>'
       
       $ii = 0;
       $max = count($matches[1]);

       for($ii = 0; $ii < $max; $ii++)
       {
           $left = $matches[1][$ii];
           
           if(strstr($left, ' type='))
           {
               // noter le fichier demandé
               $f = preg_replace(',.*href=[\'|"]([^[:space:]]+)[\'|"].*,'
                   , "$1", $left);
               
               // chercher les infos du fichier
               if($f = chemin($f))
               {
                   // son poids
                   $s = filesize($f);
                   
                   // son extension
                   $path_parts = pathinfo($f);
                   $e = $path_parts['extension'];
               
                   $search[] = $matches[0][$ii];
                   
                   $replace[] = $matches[1][$ii]
                       . $matches[2][$ii]
                           . '<span class="details">'
                           . ' ['.$e.' - '.taille_en_octets($s).']'
                           . '</span>'
                       . $matches[3][$ii]
                       ;
               }
           }
       }
       $texte = str_replace($search, $replace, $texte);
   }
   return($texte);
}

Si besoin, lire le paragraphe Ajouter ses propres fonctions sur spip.net pour en savoir plus à propos de ce fichier mes_fonctions.php.

Il suffit ensuite d’appliquer ce filtre à l’objet TEXTE dans vos squelettes. Du style :

[(#TEXTE|preciser_liens_doc_in)]

Plussoyez !

Les forums sont fermés.