|extension du #FICHIER

Un nouveau filtre pour connaitre l’extension d’un fichier

Il semble que SPIP 1.9.2 ne fournisse pas d’outil donnant l’extension d’un fichier. Oui, avec une boucle sur le type de document, on trouve l’#EXTENSION, mais avec un filtre, on économise une requête SQL pour une information qu’on connait déjà, ou presque :

Filtre |extension

Voici un filtre qui, appliqué à la balise #FICHIER dans une boucle (DOCUMENTS), donnera l’information nécessaire et suffisante:

<?php

function extension($fichier){
    //Si je trouve un point vers la fin du nom de fichier, je renvoie ce qui suit
    if (preg_match(',\.([^\.]+)$,', $fichier, $regs))
        return $regs[1];
    //Sinon, je ne renvoie rien, il n'y a pas d'extension.
    return '';
}

?>

En effet, la balise #FICHIER contient l’extension, on peut donc l’en extraire.

Comme tous les filtres, il sera à copier/coller dans un fichier mes_fonctions.php. Vous pourrez ensuite employer cette notation dans vos squelettes : [(#FICHIER|extension)], pour afficher l’extension de fichier.

Par exemple, pour afficher, non pas la miniature de prévisualisation des documents visuels, mais leur icône de fichier, dont SPIP fournit une belle collection dans le répertoire dist/vignettes/, on utilisera ce filtre de la manière suivante :

[<img src="(#CHEMIN{[vignettes/(#FICHIER|extension).png]})" class="spip_logos" />]

Balise #EXTENSION

Comme nous ne sommes pas pingre, on vous offre maintenant la balise #EXTENSION:

<?php

function balise_EXTENSION($p){
    //recuperer le champ fichier dans la table de la base de donnees
    $_fichier = champ_sql('fichier', $p);
    //calculer l'extension du fichier en question
    $p->code = "extension($_fichier)";
    return $p;
}

?>

Ainsi, le code suivant produira le même effet :

[<img src="(#CHEMIN{[vignettes/(#EXTENSION).png]})" class="spip_logos" />]

L’avantage, c’est que quand vous passerez à SPIP 1.9.3, vous n’aurez pas à modifier vos squelettes et vous pourrez, si vous le souhaiter, supprimer les deux fonctions, pour un résultat identique.

Exemple de boucle

<B_documents_joints>
<div id="documents_joints">
	<h2><:titre_documents_joints:></h2>
	<ul>
		<BOUCLE_documents_joints(DOCUMENTS) {mode=document}{id_article} {!par date}{par titre, type_document, taille}>
		<li>
			[<a href="#URL_DOCUMENT"><img src="(#CHEMIN{vignettes/[(#FICHIER|extension)].png})"[ alt="(#FICHIER|extension)"] class="spip_logos" /></a>]
			[<p class="titre">(#TITRE|sinon{[(#FICHIER)]})</p>]
			[<p class="descriptif">(#DESCRIPTIF|PtoBR)</p>]
			<p class="info_document"><:info_document:> #TYPE_DOCUMENT [(<strong>.(#FICHIER|extension)</strong>)][(#LARGEUR|?{[ - (#LARGEUR)[ x (#HAUTEUR) pixels]],''})][ - <strong>(#TAILLE|taille_en_octets)</strong>][ - (#DATE|affdate{d/m/y}).] <a href="#URL_DOCUMENT"><:bouton_telecharger:></a></p>
		</li>
		</BOUCLE_documents_joints>
	</ul>
</div>
</B_documents_joints>

Le filtre |extension était nécessaire dans cette boucle qui a servi à réaliser l’«Espace Presse» du site de la Fédération Française d’Orthodontie, qui met des fichiers haute définition à disposition, pour les journaleux de la presse papier.

Détail de l’«Espace presse» du site de la FFO, octobre 2007.

Discussion

2 discussions

  • Bonjour,

    À noter que PHP a une fonction native pour extraire l’extension d’un fichier : pathinfo.

    Et avec SPIP qui maintenant rajoute des timestamp parfois, ça pourrais s’écrire pour récupérer l’extension d’un tag image :

    $ext = pathinfo(supprimer_timestamp(extraire_attribut($img, 'src')), PATHINFO_EXTENSION);

    Reply to this message

  • 1

    Pour un document distant ça peut ne pas marcher, par exemple http://rezo.net/ est du .html

    • bah pourquoi tu dis ça ? Je viens d’essayer et ça marche.

    Reply to this message

Add a comment

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Who are you?
[Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom