Я использую php с smarty. В PHP У меня есть два массива: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, что тоже не самое лучшее решение., Но если оно работает ... –
I полностью согласен с тобой там.Чтобы очистить это, вы могли бы просто установить флаг, а в вашем смарт-шаблоне проверить флаг, я продемонстрирую в своем основном сообщении. – Bjoern
У меня есть идея. Одна вещь, которая меня немного волнует в этом подходе, - это то, что я ожидаю от моего клиента, чтобы спросить следующее, а именно, эти коды, отображаемые в таблице с редактированием на месте каждого из них. В этом случае на одной странице будет несколько кодов, каждый со своим собственным массивом приложений - и один массив из «all_applications». Тогда это будет очень грязно ... Тем не менее, спасибо в любом случае. –