2010-11-23 11 views
1

スマートアレイの値に基づいてチェックボックスをチェックしようとしています。Smartyがarray_searchを使用して選択したチェックボックスをチェックします

私のPHPで

$smarty->assign('locations_array',array(4,6,9,7)); 

私は配列を通って、チェックボックスをチェックし、一致があるかどうか検索します。 これは私のテンプレートで試したことですが、私は仕事にそれを得ることができません。私はどのように渡すことができますarray_search針と干し草それは必要ですか?

{foreach $locations as $x} 
    {if $x.id == $x.id|@array_search:$locations_array} 
    <label><input checked type="checkbox" name="locations[]" value="{$x.id}"/>{$x.title}</label> 
    {else} 
    <label><input type="checkbox" name="locations[]" value="{$x.id}" />{$x.title</label> 
    {/if} 
{/foreach} 

これはカスタム機能を作成しないと可能でしょうか?

+0

私は{$のx.idがあれば| array_search:$のlocations_array}それがで動作するようになったと思う事が配列され、その後、配列が機能した後pasedされている場合 – andrew

+0

@にのみ使用されます。代わりの :問題は、最後のボックスはlocations_array – andrew

+0

アンドリューのidの一致場所のidを持つにもかかわらず、チェックされていることである{$ x.id場合| array_search:$のlocations_array}、 は常に使用しました:{ if $ x.id | array_search:$ locations_array!== false} $ x.idが配列のキー0に含まれている場合、このif-testは必要ないときに失敗します。ここでの警告を参照してください:http://php.net/manual/en/function.array-search.php –

答えて

1

テンプレートから関数に2つの変数を渡すことができるかどうかはわかりませんが、これはPHPファイルの$locationsの代わりに新しい配列を作成することで回避できます。投稿されたコードを見てみると、各要素には、title,idcheckedの3つのサブ要素が必要です。このようにすると、テンプレート側の配列を比較する必要がなくなり、カスタム関数を記述する必要がなくなります。

+0

ボックスがチェックされていないかどうかは、個人の設定に依存しているため、特定のユーザーに対してチェックする必要があります。 – andrew

+0

これは問題ありません。 '$ smarty-> display()'を呼び出す前にPHPファイルで扱っているユーザも知っておく必要があります。 – eykanal

+0

:)議決権行使をせずに残すことができます。投票は推奨されていますがオプションです。 – eykanal

1

参考のため、これはarray_searchを使用するときの正しい構文だと思います。 $のx.idは針と$ locations_arrayが配列干し草の山である

{if $x.id|array_search:$locations_array} 


私はeknals feedbackに基づいて別のアプローチをとることに決めました

0

私はarray_searchでうまくいきませんでしたが、私はあなたの問題を解決する方法がいくつかあります。 foreachループ内のlocations_arrayでチェックボックスの値をチェックすることができます。

**$i = 0;** 
     {foreach $locations as $x} 
      **{if $x.id == $locations_array[$i]}** 
      <label><input checked type="checkbox" name="locations[]" value="{$x.id}"/>{$x.title}</label> 
      {else} 
      <label><input type="checkbox" name="locations[]" value="{$x.id}" />{$x.title</label> 
      {/if} 
**$i++;** 
     {/foreach} 
関連する問題