对于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>
答案 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}