Smarty obtenir d'un var sous-chaîne avec strpos comme début et fin comme strlen
Question
Je suis d'avoir des variables mise en forme d'émission 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 pourrais-je le faire de
{$var|substr:strpos:"|":strlen}
ne fonctionne pas
La solution
Juste résolu ce sans mettre en arrière var en PHP et en utilisant les enveloppes de fonction intégrée.
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>
imprimera:
Autres conseils
Quelques infos sur les Smarty 3 dans le cas si besoin de quelqu'un pour atteindre le même dans Smarty 3 et non dans Smarty 2:
La première chose est que vous devez ajouter entre parenthèses pour le faire fonctionner. 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 souhaitez 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 devez également savoir que dans les versions précédentes (avant Smarty 3.1) si vous avez dans votre UTF-8 caractères chaîne vous devez plutôt utiliser les fonctions de mb_
.
Smarty 3.1 dans le cas si l'extension de mbstring
est installé Smarty utilise automatiquement les fonctions de mb_
dans ce cas, il n'y aura pas de problème avec utf-8.
Vous pouvez en savoir plus sur Smarty utf-8 encodage
Ces fonctions n'existent pas dans Smarty. Vous devez le diviser en PHP avant de l'envoyer au modèle. Ou vous pouvez écrire votre propre plugin smarty fonction split. Ou utiliser {php} balises dans le modèle, mais il faut éviter cette solution car il est contre le « esprit » et le but d'utiliser Smarty, séparation de la présentation et de la logique, etc etc.
Lors de l'utilisation comme Jimby:
{$var|substr:$bar_at+1}
ajouter des parenthèses ou parenthèse pour ce faire le travail.
{$var|substr:($bar_at+1)}