Lorsque les listes à sélection comporte de nombreux élément, il devient fastidieux de devoir compter à la main le nombre d'occurence dans chaque liste.
Alors qu'il est si facile d'effectuer le comptage coté serveur, une fois le formulaire transmis, rien ne permettait jusqu'à la venue de la fonction "compteurs de sélection dynamique", d'afficher en temps réel le nombre des occurences sélectionnées, et non encore sélectionnées.
Cette fonctionnalité nécessite le paquet HTML_QuickForm_advmultiselect en version 1.3.0 ou supérieur.
Un exemple complet est fourni dans les annexes. Voir les compteurs dynamiques sur plusieurs éléments
La mise en place de l'affichage des compteurs d'occurence déjà sélectionnées et non encore sélectionnées, est complètement indépendante. Elle requière pour chacun des compteurs d'ajouter de nouveaux marqueurs.
Pour les occurences non encore sélectionnées, ces marquages sont :
{unselected_count} pour la localisation (où la valeur s'affiche)
{unselected_count_id} pour l'identification par l'API DOM (attribut ID de la balise HTML choisie)
Pour les occurences sélectionnées, ces marquages sont :
{selected_count} pour la localisation (où la valeur s'affiche)
{selected_count_id} pour l'identification par l'API DOM (attribut ID de la balise HTML choisie)
<?php
require_once 'HTML/QuickForm.php';
require_once 'HTML/QuickForm/advmultiselect.php';
// ...
$form = new HTML_QuickForm('amsLC');
$ams =& $form->addElement('advmultiselect', 'cars', null, $car_array);
// ...
?>
Les identificateurs des compteurs (attribut ID) utilisable par l'API DOM seront constitués par le nom de l'élément advmultiselect concaténé avec le suffixe "_selected" ou "_unselected" en fonction des listes.
Résultat pour l'exemple (code ci-dessus) : cars_selected ou cars_unselected
Les éléments advmultiselect sous la forme de mono liste (avec case à cocher) seront identifiés par le préfixe "qfams_" et le nom de l'élément advmultiselect
Résultat pour l'exemple (code ci-dessus) : qfams_cars
Quant aux éléments advmultiselect sous la forme de liste double, ils seront identifiés par le préfixe "__" (deux tirets bas) et le nom de l'élément advmultiselect pour la liste des occurences restant encore à sélectionner. Alors que la liste des éléments déjà sélectionnés sera identifié par le préfixe "_" (un tiret bas) et le nom de l'élément advmultiselect.
Résultat pour l'exemple (code ci-dessus) : __cars et _cars
Les éléments advmultiselect sous la forme de mono liste (avec case à cocher) sont identifiés par l'API DOM grâce aux seuls marquages {selected_count} et {selected_count_id}. Il est inutile d'indiquer la présence des marqueurs {unselected_count} et {unselected_count_id}.
Voir pour exemple en annexe les compteurs dynamiques sur plusieurs éléments , et la définition du mini-gabarit $template1 aux lignes 49-57.