2011-09-19 4 views
2

Je voudrais faire {unset($array['index'])} dans un modèle Smarty 3.Smarty: désélectionner un index de tableau dans le modèle

Une telle syntaxe (ou similaire) est-elle supportée? Après googling et lecture de doc je ne peux pas trouver quelque chose de satisfaisant.

Peut-être que je devrais demander une demande de fonctionnalité à l'équipe de développement de Smarty? :)

Quoi qu'il en soit, comment le feriez-vous compte tenu des fonctions de template actuellement disponibles?

+0

Merci à tous pour vos réponses. On dirait que le problème est bien dans la séparation contrôleur/vue. Mais la façon dont les choses ont été faites dans le code d'origine m'a conduit "vouloir mettre hors tension un index de tableau dans le modèle" ... –

Répondre

5

Je ne pense pas qu'il existe un support direct pour smarty. Vous pouvez toujours le faire avec la balise {php} de smarty, mais je vous déconseillerais fortement de le faire. La logique n'appartient pas à un modèle de niveau présentation.

+0

+1: Absolument correct. –

+3

Si "la logique n'appartient pas à la présentation" vous n'avez pas besoin de Smarty, juste 'strtr()' :-P Cependant, afin de rendre ce commentaire utile, avez-vous considéré que vous pourriez ne pas faire ce que vous suggérez? parce que vous pourriez simplement boucler la chose et utiliser un '{if}' et '{continuer}' pour passer la clé dont vous n'avez pas besoin? Comme dans [exemple 7.42] (http://www.smarty.net/docs/fr/language.function.foreach.tpl) – artfulrobot

+0

@artfulrobot L'utilisation de {if} 'et' {continue} 'est fondamentalement différente, car ils ne modifient pas les données. La modification des données n'appartient pas à la couche de présentation. –

1

L'idée principale derrière un moteur de modèle est que vous pouvez faire tout le chargement, la logique, etc. MHS avant d'analyser le point de vue. Cela étant dit, vous ne devriez pas désactiver les données dans votre modèle, et je suis sûr qu'ils ne mettront pas en œuvre cette fonctionnalité. Je ne comprends pas non plus pourquoi vous voudriez désactiver une variable smarty: ne l'utilisez pas et elle ne sera pas affichée.

0

vous ne remplacez pas la valeur?

{assign var="array" value=array()} 
{$array['index']='1'} 
{$array['index2']='2'} 
{$array['index']=''} 
{$array|print_r} 

cela a fonctionné pour moi dans Smarty < 3, ne sais pas si fonctionne toujours comme ils ont vraiment foiré Smarty.

2

essayer cette

{$array.index = null} 
+0

Merci pour l'idée, mais malheureusement, elle ne fait pas exactement ce que je veux: en commençant par 'Array ([a] => 1 [b] => 2)', après avoir fait '{$ array.a = null}' , J'obtiens 'Array ([a] => [b] => 2)' au lieu de 'Array ([b] => 2)' –

0

essayer

{assign var = array.index de $ valeur = null)}

3

Il y a une façon bien :-)

{$array=$array|array_diff_key:(['index']|array_flip)} 

Même ce n'est pas une bonne idée de Faites-le dans des modèles, parfois cela pourrait vous faire gagner du temps.