2010-03-24 6 views
0

Pour la fonction html_options de smarty, existe-t-il un moyen d'éviter cela (autre que de ne pas utiliser smarty)?Smarty html_options

{if $smarty.post} 
    {html_options name=option_1 options=$options selected=$smarty.post.option_1} 
{else} 
    {html_options name=option_1 options=$options} 
{/if} 

Je me rends compte que ce ne sera pas affiché dans le modèle, mais il semble comme une mauvaise pratique de laisser quelque chose qui n'est pas défini dans le modèle (il remplit également mes journaux d'erreur avec le bruit sur les index non définies).

[modifier]

Ce que je cherche est une façon de le faire comme ça, sans avoir les erreurs d'index non définis apparaissent, ainsi que la réduction du bruit Smarty dans les fichiers de modèle.

{html_options name=option_1 options=$options selected=$smarty.post.option_1} 

Je suppose que ce serait probablement un plugin html_options modifié?

[modifier]

Selon l'idée de @ mmcgrail:

{if isset($smarty.post.option_1)} 
    {assign var=selected value=$smarty.post.option_1} 
{else} 
    {assign var=selected value=$default.option_1} 
{/if} 

{html_options name=option_1 options=$options selected=$selected} 

Je trouve cela encore pire, car il crée de nouvelles variables dans le modèle, s'écarter de l'objectif supposé de Smarty.

Je suppose que cela fonctionne:

ou:

<?php 
    //[... snip ...] 
    $option_1 = isset($_POST['option_1'])? $_POST['option_1'] : $default['option_1']; 
    $template->assign('option_1', $option_1); 
    $template->display('my_template.tpl'); 

Et dans le modèle:

{html_options name=option_1 options=$options selected=$option_1} 

Mais alors quel est le point de Smarty garder une trace de tous les post/get/request/cookie/server/constants si vous ne pouvez pas les utiliser dans le modèle sans doubler la quantité de code que vous avez à écrire?

+0

Quelles sont les erreurs que vous éliminez lorsque vous mettez une ligne int? – mcgrailm

+0

Lorsque la variable post est vide, j'obtiens "AVIS: Undefined index: option_1" Je me rends compte que ce n'est pas une horrible erreur horrible, mais il semble négligent de le laisser là. – SeanJA

+0

Un autre problème est que l'avis apparaît caché dans la boîte de sélection si vous inspectez le code HTML. – SeanJA

Répondre

0

avère que sans écrire un plugin séparé ce que je veux est pas possible ... Je vais peut-être faire ça, quelque chose comme:

{html_options name=option_1 options=$options selected=$default.option_1 post=option_1} 
0

essayer cette

{if isset($smarty.post)} 
    {html_options name=option_1 optins=$options selected=$smarty.post.option_1} 
{/if} 

Je pense que répondre à votre question

+0

juste remarqué que votre point que dans le php ma solution est dans le modèle – mcgrailm

+0

Nah, c'est dans le modèle ... Votre solution est la même que la mienne et entraîne deux fois plus de code ayant besoin d'être écrit ...ce qui est ce que je pensais était le point de smarty ... apparemment pas – SeanJA

+0

Aussi, vous n'avez pas besoin de l'isset à moins que vous regardez un élément spécifique dans le tableau de poste. – SeanJA