Smarty html_options

时间:2010-03-24 17:14:46

标签: php smarty undefined-index

对于smarty的html_options函数,有没有办法避免必须这样做(除了不使用smarty之外)?

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

我意识到它不会出现在模板中,但是留下未在模板中定义的东西似乎是一种不好的做法(它还会填充我的错误日志,其中包含有关未定义索引的噪音)。

[编辑]

我正在寻找的是一种方法,可以在不显示未定义索引错误的情况下执行此操作,并减少模板文件中的智能噪音。

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

我想它更可能是修改后的html_options插件?

[编辑]

根据@ 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}

我发现这更糟糕,因为它在模板中创建了新的变量,偏离了所谓的smarty目标。

我猜这有效:

或:

<?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');

在模板中:

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

但是,如果你不能在模板中使用它们而不增加你必须编写的代码量,那么聪明地跟踪所有post / get / request / cookie / server / constants的重点是什么?< / p>

2 个答案:

答案 0 :(得分:1)

试试这个

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

我认为回答你的问题

答案 1 :(得分:-1)

事实证明,如果不编写单独的插件,我想要的就不可能......也许我会这样做,例如:

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