La communauté ALL HTML c'est 60192 membres à ce jour dont 1 inscrits aujourd'hui et 15 depuis une semaine.

Objet facilitant l'écriture des listes SELECT

Photo de FabHacker Article publié le mardi 23 janvier 2007 par FabHacker.
Cet article est classé dans les catégories « PHP »

Je vous propose une class Php à inclure dans vos script pour pouvoir gérer très simplement les listes déroulantes <select>, notamment pour les listes dynamiques.

Introduction



Il est souvent problématique de génerer des listes déroulantes pour les formulaires, notamment s'il y en a plusieur. Cela aloudi le code et n'est pas toujours aisé à modifier. Je vous propose donc un objet très simple pour pouvoir génerer très simplement des listes déroulantes en allégant votre code.



Code de l'objet



Voila le code complet de l'objet:
<?php // ------------------------------------ // CLASS SELECT // Simplification de l'écriture des listes déroulantes // par FabHacker // ------------------------------------ /* LISTE DES FONCTIONS Select($nom) - Constructeur ajouter_choix($libelle,$valeur,$special) - Ajoute un choix supprimer_choix($valeur) - Supprime un choix template_defaut() - Définit le template par défaut code_html() - Retourne le code HTML de la liste reset() - Remet à zéro l'objet */ class Select { var $nom; // Champ "name" de la balise select var $choix; // Contient tous les choix possibles var $template; // Définit le code HTML de la liste // Constructeur function Select($nom = '') { $this->nom = $nom; $this->choix = Array(); $this->template_defaut(); } // Ajoute un choix à la liste function ajouter_choix($libelle,$valeur,$special = '') { $this->choix[] = Array($valeur,$libelle,$special); } // Supprime un choix à la liste function supprimer_choix($valeur) { $temp = Array(); for($i = 0; $i < sizeof($this->choix); $i++) { if($this->choix[$i][0] != $valeur) $temp[] = $this->choix[$i]; } $this->choix = $temp; } // Définit le template par défaut function template_defaut() { $this->template = Array( 'debut' => '<select name="%NOM%">' . "\n", 'option' => "\t" . '<option value="%VALEUR%"%SPECIAL%>%LIBELLE%</option>' . "\n", 'fin' => '</select>' . "\n" ); } // Retourne le code HTML de la liste function code_html() { $code = str_replace( Array('%NOM%') , Array($this->nom,$this->special[0]) ,$this->template['debut']); $src = Array('%VALEUR%','%LIBELLE%','%SPECIAL%'); for($i = 0; $i < sizeof($this->choix); $i++) { $dest = Array( $this->choix[$i][0] , htmlentities($this->choix[$i][1]) , $this->choix[$i][2] ); $code .= str_replace($src,$dest,$this->template['option']); } $code .= $this->template['fin']; return $code; } // Remet à zéro l'objet function reset($nom = '') { if($nom != '') $this->nom = $nom; $this->choix = Array(); $this->template_defaut(); } } ?>

Toutes les fonctions principales sont notées en commentaire au début du fichier.
Petite note pour la variable $template, vous pouvez en effet définir tout le code de votre liste. Par défaut l'objet est initialisé avec un code standard:

$this->template = Array( 'debut' => '<select name="%NOM%">' . "\n", 'option' => "\t" . '<option value="%VALEUR%"%SPECIAL%>%LIBELLE%</option>' . "\n", 'fin' => '</select>' . "\n" );

Et vous pouvez donc modifier ce tableau pour définir votre template.



Exemple d'utilisation



Voila un exemple d'utilisation simple et classique.
Vous noterez que dans l'exemple, les choix de la liste sont ajoutés un par un implicitement, mais que l'utilisation de l'objet prends tout son interêt lorsque l'on utilise une boucle pour ajouter des choix (par exemple en allant chercher des informations dans une base de donnée).

<?php include('class_select.php'); // Création de l'objet $liste = new Select('voitureid'); // On ajoute les choix $liste->ajouter_choix('Peugeot 306', 'p306'); $liste->ajouter_choix('Peugeot 406', 'p406'); $liste->ajouter_choix('Renault R5', 'r5' , ' style="color:blue;"'); // En bleu $liste->ajouter_choix('Renault Concept Car 2007', 'concept'); $liste->ajouter_choix('Renault Laguna', 'rlag', ' selected'); // Selectionné au chargement // Eventuellement en supprimer $liste->supprimer_choix('concept'); // Ecriture du formulaire $codepage = ' <form action="' . $PHP_SELF . '"> ' . $liste->code_html() . ' <br /><input type="submit" value="Choisir" /> </form> '; print($codepage); ?>

Ce script va générer le code HTML suivant:
<form action="/outils/index.php"> <select name="voitureid"> <option value="p306">Peugeot 306</option> <option value="p406">Peugeot 406</option> <option value="r5" style="color:blue;">Renault R5</option> <option value="rlag" selected>Renault Laguna</option> </select> <br /><input type="submit" value="Choisir" /> </form>

VOS COMMENTAIRES ...

Commenter cette publication

Photo de telnes Commentaire publié le lundi 02 avril 2007 à 16 h 51 par telnes
bonjour

ca serait cool que la méthode ajouter_choix accèpte en paramètre un tableau ! ca alégerait le code.

voili
Photo de bambiseb Commentaire publié le jeudi 24 juillet 2008 à 14 h 42 par bambiseb
Salut, tout d'abord félicitation pour cette classe très utile. je l'utilise pour mon projet et elle est vraiment trés bien pensée.
En effet comme l'évoque quelqu'un, on pourrait l'améliorer afin de la rendre plus légère, libre à cette personne de le faire.

Merci encore et bonne continuation

Sébastien

Commenter cette publication

Vous devez obligatoirement vous identifier en tant que membre pour participer à cette discussion.

Forums de discussions associés

Discutez et échangez sur ce thème dans notre forum PHP - SQL.

Liens sponsorisés

ACCÉS COMMUNAUTÉ

Rejoignez ALL HTML

Publiez vos articles, actualités, communiqués ... Donnez votre avis, partagez votre réseau, rencontrez d'autres membres et participez à la vie de la communauté.