J'abaisse des variables de formatage dans Smarty. Je me demandais quelle est la meilleure façon de le faire. Fondamentalement, j'ai une chaîne "ABC | DEFGH", je veux que Smarty obtienne la sous-chaîne de "DEFGH" Comment puis-je faire cela?
{$var|substr:strpos:"|":strlen}
4 Réponses :
Ces fonctions n'existent pas dans Smarty. Vous devrez le diviser en PHP avant de l'envoyer au modèle. Ou vous pouvez écrire votre propre plugin SPARTY FONCTION SPLIT. Ou utilisez {php} tags dans le gabarit, mais j'évite cette solution telle qu'elle est contre "l'esprit" et le but d'utiliser Smarty, la séparation de la présentation et de la logique, etc. P>
Conclusion - NE PAS UTILISER SMARTY
Le poste de forum référencé ci-dessus concerne un plugin, qui ne vient pas avec Smarty par défaut. Et Tronquez ne fait pas ce qu'il a demandé, il suffit de couper la corde à une certaine longueur.
jamais i> Utilisez {PHP} Tags dans un modèle Smarty, utilisez plutôt les fonctions du plug-in
@kris je suis d'accord qu'ils devraient utiliser avec parcimonie, ou pas du tout si possible, mais évidemment, ils mettent ces tags là-bas afin que vous puissiez les utiliser. Pourquoi voudriez-vous voter un poste de 8 mois parce que vous n'êtes pas d'accord avec cela? Ce n'était certainement pas incorrect ou nécessairement un mauvais conseil.
Si vous changez de réponse, je peux supprimer le vote en direct, il est verrouillé si vous ne revenez pas pendant un moment.
@kris le change à quoi? C'est une solution valide car il n'y a pas de fonction divisée native dans Smarty. Il pourrait le diviser en PHP avant le modèle, utilisez des étiquettes PHP dans le modèle, créez sa propre fonction Smarty, ou comme la réponse acceptée, utilisez Strows et Substring. Comme je l'ai déjà dit, juste parce que votre dogme dicte que les étiquettes PHP ne devraient jamais être à Smarty, ne le rend pas. S'il y avait une raison pour laquelle les tags PHP ne devraient jamais être dans un modèle Smarty, les créateurs n'auraient pas inclus cette fonctionnalité. J'essaie certainement d'éviter les étiquettes PHP, mais la réponse n'était certainement pas "erronée"
Il suffit de résoudre ce problème sans réglage de VaR en PHP et en utilisant les emballages de fonction intégrés.
supposant que: $ var = "ABC | DEFGH"; P>
{assign var="bar_at" value=$var|strpos:"|"}
<li>{$var}</li>
<li>{$var|substr:0:$bar_at}</li>
<li>{$var|substr:$bar_at+1}</li>
Oui! Je sais que ça doit être un moyen! Merci mec!
Lorsque vous utilisez comme Jimby:
{$var|substr:($bar_at+1)}
Quelques informations sur Smarty 3 Si quelqu'un veut atteindre la même chose à Smarty 3 et non à Smarty 2: em> fort> La première chose que vous avez besoin ajouter des parenthèses pour le faire fonctionner. Mais en fait, vous pouvez utiliser plus simple Syntaxe: P> substrria: $ bar_at + 1 code> ne fonctionnera pas mais substr: ($ bar_at + 1) code> fonctionnera. p> {$var|substr:($var|strpos:"|"+2)}
Dupliqué possible: Stackoverflow.com/Questions/4325283/smarty-substr-a -Variable
Voir Ce sujet Smarty.
Le code que je soumets ne fonctionne pas.