Smarty html_options

Smarty html_options

提问人:SeanJA 提问时间:3/25/2010 最后编辑:SeanJA 更新时间:12/4/2022 访问量:6262

问:

对于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 有什么意义呢?

php smarty 未定义索引

评论

0赞 mcgrailm 3/25/2010
当你把一行 int 放进去时,你会遇到哪些错误?
0赞 SeanJA 3/25/2010
当 post 变量为空时,我收到“注意:未定义的索引:option_1”我意识到这不是一个可怕的可怕错误,但将其留在那里似乎很草率。
0赞 SeanJA 3/25/2010
另一个问题是,如果您检查html,通知会隐藏在选择框中。
0赞 mcgrailm 3/25/2010
这就是为什么你需要在某处使用 isset,因为你的数组值没有设置,你可以在你的 php 中执行 isset 并定义一个变量,你将其传递给 smarty 作为$selected然后你就不会收到错误
1赞 SeanJA 3/26/2010
我确实希望我不必使用 smarty......

答:

1赞 mcgrailm 3/25/2010 #1

试试这个

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

我认为这回答了你的问题

评论

0赞 mcgrailm 3/25/2010
刚刚注意到您在 PHP 中我的解决方案是进入模板的
0赞 SeanJA 3/25/2010
不,这是在模板中...您的解决方案与我的解决方案相同,并且需要编写的代码量是原来的两倍......这就是我认为聪明的重点......显然不是
0赞 SeanJA 3/25/2010
此外,除非您正在查看 post 数组中的特定项,否则您不需要 isset。
-1赞 SeanJA 3/25/2010 #2

事实证明,如果不写一个单独的插件,我想要的是不可能的......也许我会这样做,比如:

{html_options name=option_1 options=$options selected=$default.option_1 post=option_1}
0赞 Djumaka 12/4/2022 #3

我知道这就像 12 年后,但是...... 在将应用程序迁移到 php 8.1 时,我遇到了同样的问题:) 因此,真正有效的解决方案是

{html_options name=option_1 options=$options selected=$default.option_1|default:""}

评论

0赞 SeanJA 1/18/2023
哦不。。。2022 年还很聪明吗?
1赞 Djumaka 6/17/2023
@SeanJA很多几十年前的代码仍然在那里,做它的工作,所以......可悲的是,是的。更不用说人们因为某种不圣洁的原因而变得聪明