J'utilise php avec Smarty. En PHP, j'ai deux tableaux:
<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>
3 Réponses :
J'ai fait quelque chose de similaire quelques années de retour et je suis tombé sur le même défi logique.
Ma solution consistait à modifier le tableau de base (dans votre cas, Cela le rend assez facile pour votre modèle Smarty: P> $ all. Une autre clé là-bas (peut-être ['opt_selected'] code>). J'ai quitté la valeur par défaut vide et pour les données que je voulais avoir sélectionné, j'ai modifié la valeur pour, devinez quoi, ... sélectionné = "sélectionné" code>. P> <option value="{$k}" {if $a.opt_selected eq '1'}selected="selected"{/if}>
{$a|escape}
</option>
Je suppose que cela rend le modèle un peu propre, mais le code PHP un peu plus sale - et il met des spécificités HTML dans le PHP, ce qui n'est pas la meilleure solution., Mais si cela fonctionne ...
Je suis totalement d'accord avec vous là-bas. Pour nettoyer cela, vous pourriez aussi bien définir un drapeau et dans votre modèle Smarty, vérifiez le drapeau, je vais démontrer dans mon message principal.
Je reçois l'idée. Une chose qui m'inquiète un peu sur cette approche est ce que je prévois que mon client demande ensuite, à savoir ces codes affichés dans une table avec édition de chacun d'entre eux. Dans ce cas, il y aura plusieurs codes sur la même page, chacun avec son propre réseau d'applications - et une seule gamme de «All_Applications». Ensuite, ça va devenir vraiment désordonné ... Pourtant, merci quand même.
Eh bien, votre tableau a déjà> 15 clés sans mon approche ... un de plus ou moins ne fait pas une grande différence, n'est-ce pas !? ;-)
Je vois, ajoutez l'ensemble complet d'applications dans chaque code, avec les "sélectionnés" correspondants marqués ...
Vous pouvez le faire comme ceci:
<select name="c_apps[]" size="3" class="multiselect" multiple="multiple">
{foreach from=$apps key=k item=a}
<option value="{$k}"{if in_array($k, $code.n_applications)} selected="selected"{/if}>{$a|escape}</option>
{/foreach}
</select>
C'était la première chose que j'ai essayée, mais le résultat était plutôt vraiment bizzare, comme beaucoup de quelque chose d'étrange a été ajouté à l'intérieur de la balise
Eh bien, cela devrait fonctionner. Quel était le résultat? Et quelle version de Smarty utilisez-vous?
Après un peu de lutte dans toutes les directions possibles, j'ai finalement réussi à le retirer comme ceci (code Smarty uniquement) et cela a fait le tour. P> p>