2010-03-24 68 views
0

对于smarty的html_options函数,有没有办法避免必须这样做(除了不使用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} 

我意识到,它不会在模板上显示,但它似乎是一个不好的做法,留下未在模板中定义的东西(它也填补了我的错误日志与有关未定义指标噪音)。

[编辑]

我所寻找的是一个办法做到这一点像这样不具有未定义的索引错误显示,以及减少在模板文件中的Smarty的噪音。

{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} 

我觉得这更糟糕,因为它是在模板创建新变量,从智者的假想目标的偏离。

我想这个作品:

或:

<?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} 

但是那么什么是智者的保持所有后的跟踪点/ get/request/cookie/server/constants,如果你不能在模板中使用它们而不增加你必须编写的代码量?

+0

当你把一条直线放入int时,你直接得到的错误是什么? – mcgrailm 2010-03-25 12:14:37

+0

当post变量为空时,我得到“NOTICE:Undefined index:option_1”我意识到这不是一个可怕的可怕错误,但它似乎马虎,留在那里。 – SeanJA 2010-03-25 13:09:28

+0

另一个问题是,如果检查html,通知将显示在选择框中。 – SeanJA 2010-03-25 13:21:55

回答

0

原来,而不需要编写一个单独的插件,我想是不可能的......也许我会做到这一点,是这样的:

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

试试这个

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

我认为回答你的问题

+0

只是注意到你的doint,在我的解决方案中是在模板 – mcgrailm 2010-03-24 20:26:59

+0

那么,这是在模板中......你的解决方案和我的解决方案是一样的,结果需要写两倍的代码......这就是我思考的一点 - 聪明点...显然不是 – SeanJA 2010-03-24 23:00:58

+0

另外,除非您正在查看帖子数组中的特定项目,否则您不需要isset。 – SeanJA 2010-03-24 23:02:49