Smarty obtenir d'un var sous-chaîne avec strpos comme début et fin comme strlen

StackOverflow https://stackoverflow.com/questions/4389978

  •  10-10-2019
  •  | 
  •  

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

Était-ce utile?

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:

  • ABC | DEFGH
  • ABC
  • DEFGH
  • 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)}
    
    Licencié sous: CC-BY-SA avec attribution
    Non affilié à StackOverflow
    scroll top