Smarty模板-在为动态复选框名称选择复选框值时出现问题


Smarty template - trouble making checkbox values as selected for dynamic checkbox names

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

例如

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}

现在的问题是在提交之前选择的所有字段,我需要显示为

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

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

,但在我的情况下,复选框的名称也是动态的,它是在smarty模板中定义的,所以我不知道如何解决这个问题。下面的东西必须工作,请让我知道是否有可能在smarty中做到这一点。

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

如果您希望根据请求中设置的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[]将它们分开以匿名地将值推入数组。这样做可以减少您看到的无法直接访问post变量的问题。