Smarty: vérifier si la variable est dans la gamme
Je suis à l'aide de php avec smarty. En php j'ai deux tableaux:
$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
)
)
et
$all_application = Array
(
[1] => New registration
[2] => Mid-subscription upgrade
[3] => Subscription renewal
[4] => Additional purchase
)
Noter que le deuxième tableau, peut - et va - grandir, c'est les données de référence à partir de laquelle n_applications
de la matrice de champ dans le premier tableau est construit. Qui est, le tableau dans n_applications
contiendra un sous-ensemble de clés à partir de la $all_applications
tableaux.
Maintenant, je suis de l'attribution de ces deux tableaux dans le modèle:
$template->assign('code', $code);
$template->assign('apps', $all_applications);
Et dans le modèle, je suis de la création d'un formulaire pour modifier les champs de la $code
tableau. Tout fonctionne bien sauf les "applications" de la sélection. Je tiens à pré-sélectionner les applications qui sont déjà dans le n_applications
champ. Donc, dans mon template, j'ai ceci:
<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>
Cependant cela ne fonctionne pas comme prévu - et TOUTES les options finissent par être sélectionné. J'ai essayé d'utiliser in_array
fonction - mais avec le même résultat. Quelle est la meilleure façon de réaliser ce que je suis après?
Vous devez vous connecter pour publier un commentaire.
Après un peu de difficulté dans toutes les directions possibles, j'ai enfin réussi à le retirer, comme ceci (smarty code uniquement)
Et cela a fait le tour.
Vous pouvez le faire comme ceci:
J'ai fait quelque chose de similaire quelques années en arrière, et je suis tombé sur la même logique défi.
Ma solution a été de modifier la base array (dans votre cas,
$all_applications
) lors de l'ajout d'une autre clé, il y a (peut-être['opt_selected']
). J'ai laissé la valeur par défaut vide, et pour les données que je voulais avoir sélectionné, j'ai changé la valeur de, devinez quoi, ...selected="selected"
.Il est donc assez facile pour votre template Smarty:
Il pourrait ne pas être la meilleure solution, mais il permet de laisser beaucoup de code à partir du modèle où d'habitude je ne veux pas trop la logique du programme.
Mise à jour
Pour contrer avoir la partie HTML dans votre code php, vous pourriez tout aussi bien marquer le tableau:
...et puis organiser Smarty comme ceci: