6
votes

Smarty: Comment utiliser des fonctions PHP?

dis que j'ai ce qui suit dans mon fichier TPL:

{$ a}

Et je veux appliquer certaines fonctions natives PHP (E.G. Strip_Tags) à cette variable Smarty. Est-ce possible dans le TPL? Si oui, comment?


0 commentaires

6 Réponses :


0
votes

Le point intégral des systèmes de modèles consiste à résumer la création de vues de la langue sous-jacente. En d'autres termes, vos variables doivent être préparées pour afficher avant de passer à un moteur de modèles et que vous ne devez utiliser aucune fonction PHP dans le modèle lui-même.


6 commentaires

Alors, est-ce impossible à faire à Smarty? Je réaffecte les données et je ne pense pas que je devrais le transmettre comme une variable distincte. Dans un scénario, j'ai besoin des balises HTML de $ A; Dans un autre scénario, je ne le fais pas.


Je ne vous dirai pas si c'est possible ou non (ça fait quelque temps depuis que j'ai travaillé avec Smarty). Mon point est, ce n'est pas quelque chose que vous devriez faire.


Joshua Burns: Habituellement pour la confort des développeurs. Sinon, nous ferions toujours tout notre codage en montage.


@Mchl je pense que c'est discutable. Strtoupper, par exemple, je pense que c'est bien d'avoir en vue car les données sont toujours identiques, viennent de présenter en majuscules.


La barrette d'une chaîne et de décapage des balises HTML sont des opérations assez différentes. Bien que je puisse convenir que le premier se trouve bien dans le domaine de la présentation des données, ce dernier IMHO n'est pas.


Le point entier consiste à séparer vos vues des contrôleurs. Parfois, vous avez besoin de fonctions pour manipuler des variables avant de ne pas être branchée dans un modèle. Il y a parfaitement de bonnes raisons pour cela. Pour adresser le commentaire de @joshuaburns, vous pouvez certainement utiliser PHP pour la sortie et il y a des personnes qui le font bien tout en maintenant une belle séparation de la vue et du contrôleur.



7
votes

Le meilleur moyen est probablement de créer vos propres plugins et modificateurs Pour Smarty. Pour votre exemple spécifique, Smarty a déjà un modificateur Strip_Tags . Utilisez-le comme ceci:

{$a|strip_tags}


0 commentaires

0
votes

Smarty a déjà un modificateur de langue intégré pour cela.

{$ a | strip_tags}

Vous n'avez pas besoin de fonctions indigènes comme il est déjà intégré au système de plug-in

http://www.smarty.net/docsv2/ fr / language.modifier.strip.tags.tpl

Autres ici:

http://www.smarty.net/docsv2/fr/Language. modificateurs.tpl


2 commentaires

@Stackoverfownewbie: Maintenant, je peux vous dire: c'est possible;)


Rien n'est impossible !! (En dehors de faire de la femme heureuse .. c'est un délicat): P



21
votes

Vous pouvez utiliser n'importe quelle fonction PHP dans un modèle Smarty de la manière suivante: xxx

ou xxx

dans le deuxième exemple que vous Peut spécifier des paramètres supplémentaires pour la fonction PHP (le premier est toujours $ A dans notre cas).

Par exemple: {$ a | substrria: 4: 3} devrait résulter de quelque chose comme substr ($ _ tpl_vars ['a'], 4,3); quand Smarty compile-le.


1 commentaires

{$ A | php_function_name: param1: param3: ...} devrait être {$ a | php_function_name: param2: param3: ...}



6
votes

Très bonne question, il m'a fallu un moment pour comprendre complètement celui-ci.

Appelez une fonction, en passant un seul paramètre: strong> p>

{"/"|str_replace:"-":"this is my string"}
// same as:
str_replace("/", "-", "this is my string")

{"/"|str_replace:"-":$a}
// same as:
str_replace("/", "-", $a)


3 commentaires

Merci pour cette solution.


Et qu'en est-il de ne pas passer aucun paramètre?


@Hrvoje golcic - juste {my_function}: Smarty.net/docs/ fr / language.function.function.tpl



7
votes

ou vous pouvez utiliser ceci: (fonction d'appel directement) xxx


2 commentaires

C'est vraiment une bonne option et mérite plus de préavis.


De plus, vous pouvez non seulement appeler de cette façon une fonction PHP natif, mais également des fonctions que vous avez déclaré dans votre code PHP sans l'enregistrer en tant que plugin (testé pour Smarty 3).