Estoy usando php con smarty. En php tengo dos matrices:Smarty: compruebe si la variable está en la matriz
$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
)
)
y
$all_application = Array
(
[1] => New registration
[2] => Mid-subscription upgrade
[3] => Subscription renewal
[4] => Additional purchase
)
Tenga en cuenta que la segunda matriz puede - y - crecer, estos son los datos de referencia, a partir del cual n_applications
campo de matriz en la primera matriz es construido. Es decir, la matriz en n_applications
contendrá un subconjunto de claves de las matrices $all_applications
.
Ahora, estoy asignando estas dos matrices en la plantilla:
$template->assign('code', $code);
$template->assign('apps', $all_applications);
Y en la plantilla, estoy creando un formulario para editar los campos de la matriz $code
. Todo funciona bien excepto la selección de 'aplicaciones'. Quiero preseleccionar las aplicaciones que ya están en el campo n_applications
. Entonces, en mi plantilla tengo esto:
<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>
Sin embargo, esto no funciona como se esperaba, y TODAS las opciones terminan siendo seleccionadas. Intenté usar la función in_array
, pero con el mismo resultado. ¿Cuál es la mejor manera de lograr lo que estoy buscando?
Supongo que esto hace que la plantilla sea un poco más limpia, pero el código PHP es un poco más sucio y pone detalles de HTML en el PHP, que tampoco es la mejor solución, pero si funciona ... –
I Totalmente de acuerdo contigo.Para limpiar esto, es mejor que simplemente establezcas una bandera y en tu plantilla de Smarty verifique el indicador, lo demostraré en mi publicación principal. – Bjoern
Tengo la idea. Una cosa que me preocupa un poco acerca de este enfoque es lo que anticipo que mi cliente preguntará a continuación, es decir, estos códigos se muestran en una tabla con la edición in situ de cada uno de ellos. En este caso, habrá varios códigos en la misma página, cada uno con su propia matriz de aplicaciones, y una matriz de 'all_applications'. Entonces se pondrá realmente desordenado ... Sin embargo, gracias de todos modos. –