我有几个字段,例如人的个人资料,每个字段都有几个选项。
例如
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}
答案 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变量所遇到的问题。