2010-12-08 66 views
8

Je rencontre des problèmes de formatage des variables dans smarty. Je me demandais quelle est la meilleure façon de le faire. Fondamentalement, j'ai une chaîne "ABC | DEFGH" je veux smarty pour obtenir la sous-chaîne de "DEFGH" Comment irais-je faire cela?Smarty obtenant la sous-chaîne d'un var avec strpos comme début et strlen comme fin

{$var|substr:strpos:"|":strlen} 

ne fonctionne pas

+0

Qu'est-ce que vous obtenez en sortie? – BoltClock

+0

duplication possible: http://stackoverflow.com/questions/4325283/smarty-substr-a-variable –

+0

Voir [this] (http://www.smarty.net/forums/viewtopic.php?p=48137) Smarty sujet. –

Répondre

25

Juste résolu ceci sans réglage var retour en PHP, et en utilisant les wrappers de fonctions intégrées.

En supposant que: $ var = "ABC | DEFGH";

{assign var="bar_at" value=$var|strpos:"|"} 
<li>{$var}</li> 
<li>{$var|substr:0:$bar_at}</li> 
<li>{$var|substr:$bar_at+1}</li> 

Ce imprimera:

  • ABC | DEFGH
  • ABC
  • DEFGH
  • +0

    Oui! Je savais qu'il y avait un moyen! Thaks bro! – kjy112

    4

    Ces fonctions n'existent pas dans Smarty. Vous devrez le diviser en PHP avant de l'envoyer au template. Ou vous pouvez écrire votre propre plugin smarty fonction split. Ou utilisez {php} tags dans le modèle, mais j'éviterais cette solution car elle est contre l'esprit et le but d'utiliser smarty, la séparation de la présentation et de la logique, etc

    +3

    conclusion - n'utilisez pas smarty – ajreal

    +1

    Le post du forum référencé ci-dessus est en ce qui concerne un plugin, qui ne vient pas avec smarty par défaut. Et tronquer ne fait pas ce qu'il a demandé, il coupe juste la corde à une certaine longueur. – profitphp

    +1

    * jamais * utiliser {php} tags dans un template smarty, utiliser les fonctions du plugin – Kris

    0

    Lors de l'utilisation comme Jimby:

    {$var|substr:$bar_at+1} 
    

    ajouter des parenthèses ou parenthèse pour le faire travail.

    {$var|substr:($bar_at+1)} 
    
    5

    Quelques infos sur les Smarty 3 dans le cas si quelqu'un veut obtenir le même dans Smarty 3 et non dans Smarty 2:

    La première chose est que vous devez ajouter entre parenthèses à faire ça marche. substr:$bar_at+1 ne fonctionnera pas mais substr:($bar_at+1) fonctionnera.

    Mais en fait, vous pouvez utiliser une syntaxe plus simple:

    {assign var="var" value="ABC | DEFGH"} 
    
    {$var|substr:($var|strpos:"|"+1)} 
    

    Cela vous donnera DEFGH avec l'espace au début (avant et | sont des espaces à l'intérieur var dans votre question et dans mon exemple) et que vous voulez pour obtenir la chaîne sans espace, vous devez utiliser dans ce cas +2 au lieu de +1:

    {$var|substr:($var|strpos:"|"+2)} 
    

    Ceux ci-dessus ont été testés dans Smarty 3.1.19.

    Vous devriez également savoir que dans les versions précédentes (avant Smarty 3.1) si vous avez dans votre chaîne de caractères UTF-8, vous devriez plutôt utiliser les fonctions mb_. À partir de Smarty 3.1 si l'extension mbstring est installée, Smarty utilise automatiquement les fonctions mb_ dans ce cas, donc il n'y aura aucun problème avec les caractères utf-8.

    Vous pouvez en savoir plus sur Smarty utf-8 encoding