2011-06-09 6 views
0

Y at-il un moyen dans Smarty pour obtenir l'extension d'une chaîne de caractères. J'ai cherché l'équivalent explose mais je n'arrive pas à trouver quelque chose. Je veux afficher une icône différente basée sur le type de fichier, par exemple. doc, docx, pdfSmarty Obtenir l'extension de fichier

Répondre

4

Puisque vous pouvez utiliser les fonctions php comme modificateurs, vous pouvez utiliser la fonction pathinfo()

Toutes les fonctions PHP peuvent être utilisés comme modificateurs implicitement, comme le montre dans l'exemple ci-dessus. Cependant, l'utilisation des fonctions PHP en tant que modificateurs a deux petits pièges:

premier - quelques fois l'ordre des paramètres de fonction n'est pas le souhaitable. Formatage $ foo avec {"% 2.f" | sprintf: $ foo} fonctionne réellement, mais demande le plus intuitif, comme {$ foo | string_format: "% 2.f"} qui est fourni par le Smarty distribution.

En second lieu - si la sécurité est activée, tous php-fonctions qui doivent être utilisées doivent être déclarés comme modificateurs de confiance dans les modificateurs de $ propriété de la politique de securty. Voir la section Sécurité pour plus de détails. Source

<?php 

$smarty->assign('filename', 'foo\bar.txt'); 

?> 

{* template *} 

{$filename|pathinfo:$smarty.const.PATHINFO_EXTENSION} 
{* outputs 'txt' *} 
+0

Cela a fonctionné avec brio merci. –

+0

Merci! M'a sauvé beaucoup de temps et de code désordonné :) – tvgemert

1

Vous pouvez utiliser regex_replace pour supprimer la partie de fichier, par ex. comme ceci:

{$ file | regex_replace: "/.*./": ""}

qui élimine tout depuis le début jusqu'au dernier point. Pour plus d'informations, consultez http://www.smarty.net/docs/en/language.modifier.regex.replace.tpl pour obtenir plus d'informations.

+0

Désolé, malheureusement cela ne fonctionne pas –

+0

Que signifie « ne fonctionne pas » signifie? Qu'avez-vous essayé de faire exactement? Qu'est-ce qui s'est passé exactement? – ckruse

+0

Il ne retourne simplement rien de la chaîne. Le commentaire ci-dessus a fonctionné la première fois. –