1

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

例如

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 模板中定义,所以我不知道如何解决这个问题。必须进行以下类似的工作,如果可以在 smarty 中执行此操作,请告诉我。

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

1 回答 1

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 变量的问题。

于 2013-01-25T05:12:07.857 回答