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[]、値を匿名で配列にプッシュするためにそれらを分離するのではありません。そうすることで、POST された変数に直接アクセスできないという問題が軽減されます。

于 2013-01-25T05:12:07.857 に答える