Smarty模板 - 为动态复选框名称选择了复选框值

时间:2013-01-18 09:55:24

标签: php smarty

我有几个字段,例如人的个人资料,每个字段都有几个选项。

例如

Age (10-15, 15-20, 20-25) 
Category (X, Y, Z)

和其他几个领域。

我的搜索页面包含所有这些字段及其选项值作为复选框。 所以我目前正在使用下面的for-each循环打印这些值

{foreach from=$field.options item=options}
<input name="{$field.field_search_name}[]" type="checkbox" value="{$options.url}" />
{$options.caption}
{/foreach}

现在问题在于提交之前选择的所有字段,我需要显示为 从POST数组中选择。

我知道如果我们有像“category []”这样的静态复选框名称,我可以像下面这样做

{if in_array($options.url, $smarty.post.category)} checked {/if}

但在我的情况下,复选框名称也是动态的,它只在smarty模板中定义,所以我不知道如何解决这个问题。 必须要处理下面的内容,请告诉我是否可以巧妙地做到这一点。

{if in_array($options.url, $smarty.post.$field.field_search_name)} checked {/if}

1 个答案:

答案 0 :(得分:4)

如果您希望根据请求中设置的POST字段选中复选框,则可以通过以下方式访问它们:

{if array_key_exists({$smarty.request, $field.field_search_name)}
    checked
{/if}

然而,这取决于输入名称是唯一的。如果您在提交表单时使用带有[]的字段名称使它们成为数组,则应检查该值是否在数组中。

这需要一点点黑客来访问数组:

{assign var=tempFieldName value=`$field.field_search_name`}

{if in_array({$smarty.request.$tempFieldName, $options.url)}
    checked
{/if}

说实话,我建议为每个输入生成一个唯一的名称,而不是将几个名称放在同一个名称中,并使用fieldName[]将它们分开,以便匿名地将值推送到数组中。这样做可以减少您无法直接访问POSTed变量所遇到的问题。