提问人:SeanJA 提问时间:3/25/2010 最后编辑:SeanJA 更新时间:12/4/2022 访问量:6262
Smarty html_options
Smarty html_options
问:
对于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 有什么意义呢?
答:
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很多几十年前的代码仍然在那里,做它的工作,所以......可悲的是,是的。更不用说人们因为某种不圣洁的原因而变得聪明
上一个:聪明的html_options
评论