私はsmartyでphpを使用しています。 PHPで私は2つの配列を有する: - となります -Smarty:変数が配列にあるかどうかを確認します
$code = Array
(
[n_id] => 1
[t_code] => ABC123
[t_description] => Test code
[b_enabled] => Yes
[n_type] => 3
[dt_start] =>
[dt_end] =>
[n_min_req_gbp] => 0
[n_min_req_usd] => 0
[n_amount_gbp] =>
[n_amount_usd] =>
[n_max_overall_gbp] =>
[n_max_overall_usd] =>
[n_extra] => 6
[b_reuse] => No
[n_applications] => Array
(
[0] => 2
)
)
と二番目の配列を得ること
$all_application = Array
(
[1] => New registration
[2] => Mid-subscription upgrade
[3] => Subscription renewal
[4] => Additional purchase
)
注成長を、これが最初の配列でn_applications
アレイフィールドがされた参照データであります建てられた。つまり、n_applications
の配列には$all_applications
配列のキーのサブセットが含まれます。
$template->assign('code', $code);
$template->assign('apps', $all_applications);
を、テンプレートに、私は$code
配列内のフィールドを編集するためのフォームを作成しています:
今、私は、テンプレートにこれら二つの配列を割り当てています。 「アプリケーション」の選択を除いてすべてが正常に機能しています。すでにn_applications
フィールドにあるアプリを事前に選択したいと考えています。だから、私のテンプレートで、私はこれを持っている:
<select name="c_apps[]" size="3" class="multiselect" multiple="multiple">
{foreach from=$apps key=k item=a}
{assign var=v value=$k|@array_search:$code['n_applications']}
<option value="{$k}"{if $v!==FALSE} selected="selected"{/if}>{$a|escape}</option>
{/foreach}
</select>
しかし、予想通り、これは動作しません - とすべてのオプションが選択されてしまいます。私はin_array
関数を使ってみましたが、同じ結果が出ました。私は何を達成するための最良の方法は何ですか?
これはテンプレートを少しきれいにすると思いますが、PHPコードはもう少し汚いと思います。また、HTML仕様をPHPに入れていますが、これは最高の解決策ではありませんが、動作していれば... –
そこにあなたに完全に同意する。これをきれいにするにはフラグだけを設定し、スマートなテンプレートにフラグをチェックして、私のメインポストでデモンストレーションします。 – Bjoern
私は考えを得る。私がこのアプローチについて少し心配していることの1つは、クライアントが次に質問するもの、つまりこれらのコードがそれぞれのインプレース編集のあるテーブルに表示されることです。この場合、同じページに複数のコードがあり、それぞれに独自のアプリケーション配列があり、「all_applications」という配列が1つあります。そしてそれは本当に乱雑になるでしょう...しかし、とにかくおかげさまです。 –