1. Trang chủ
  2. » Công Nghệ Thông Tin

Pratique de MySQL et PHP- P38 ppsx

5 242 0

Đang tải... (xem toàn văn)

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 139,5 KB

Nội dung

3.3 La classe Formulaire 163 La méthode champLibelle() construit tout d’abord, par appel à la méthode champForm(), une chaîne contenant le champ du formulaire. On dispose alors des variables $champHTML et $pLibelle que l’on place simplement dans le tableau représentant le composant, en indiquant que le type de ce dernier est CHAMP. Le troisième type de composant à créer indique le début d’un tableau permettant d’afficher les champs de manière ordonnée. // Début d ’une table , mode horizontal ou v erti cal public function debutTable ( $orientation=Formulaire ::VERTICAL, $attributs=array () , $nbLignes=1) { // On instancie un objet pour créer ce tableau HTML $tableau = new Tableau (2, $attributs); // Jamais d’affichage de l ’en−tête des lignes $tableau−>setAfficheEntete (1, FALSE ); // Action selon l ’orientation du tableau if ( $ o r i e n t a t i o n == F o r m u l a i r e : : HORIZONTAL) $tableau−>setRepetitionLigne (1, "ligne" , $nbLignes); else // Pas d’affichage non plus de l ’en−tête des colonnes $tableau−>setAfficheEntete (2, FALSE ); // On crée un composant dans lequel on place le tableau $this−>composants [ $this−>nbComposants ] = array( " t y p e " => "DEBUTTABLE" , "orientation"=> $orientation , "tableau"=> $tableau); // Renvoi de l ’ identifiant de la ligne et incrémentation return $this−>nbComposants++; } La présentation basée sur un tableau est, bien entendu, déléguée à un objet de la classe Tableau (voir section précédente) spécialisé dans ce type de tâche. On instancie donc un objet de cette classe quand on sait qu’il faudra produire un tableau, et on le configure selon les besoins de mise en forme du formulaire (revoir si nécessaire la figure 3.4, page 153, pour la conception de la classe et les règles de présentation). Ici : 1. quelle que soit l’orientation, horizontale ou verticale, on n’utilise jamais d’en- tête pour les lignes ; 2. en affichage horizontal, on répète n fois la ligne contenant les différents champs en appelant la méthode repetitionLigne() de la classe Tableau (non présentée précédemment, mais consultable dans le code) ; 3. en affichage vertical, on n’affiche pas non plus d’en-tête pour les colonnes. Une fois configuré, l’objet tableau est inséré, avec l’orientation choisie, dans le composant de type DEBUTTABLE. L’objet sera utilisé dès que l’on demandera la production du formulaire avec la méthode formulaireHTML(). 164 Chapitre 3. Programmation objet Enfin, voici la dernière méthode créant un composant marquant la fin d’une présentation basée sur un tableau HTML. public function finTable () { // Insertion d’une ligne marquant la fin de la table $this−>composants [ $this−>nbComposants++] = array ("type"=>" FINTABLE" ) ; } Méthodes publiques de création de champs Nous en arrivons à la partie publique de la classe correspondant à la création de champs. À titre d’exemple, voici trois de ces méthodes. public function champTexte( $libelle , $nom, $val , $taille , $tailleMax=0) { return $this−>champLibelle($libelle , $nom, $val , "text", array ( "SIZE"=>$taille , "MAXLENGTH"=>$tailleMax)) ; } public function champRadio( $libelle , $nom, $val , $li st e ) { return $this−>champLibelle($libelle , $nom, $val , "radio", array () , $liste); } public function champFenetre($libelle , $nom, $val , $lig , $col) { return $this−>champLibelle($libelle , $nom, $val , "textarea" , array("ROWS"=>$lig , "COLS"=>$col )) ; } Toutes font appel à la même méthode privée champLibelle(), et renvoient l’identifiant de champ transmis en retour par cette dernière. La méthode champLibelle() est plus générale mais plus difficile d’utilisation. Le rôle des méthodes publiques est véritablement de servir d’interface aux méthodes privées, ce qui signifie d’une part restreindre le nombre et la complexité des paramètres, et d’autre part contrôler la validité des valeurs de ces paramètres avant de les transmettre aux méthodes privées. On pourrait contrôler par exemple que le nombre de colonnes d’un champ textarea est un entier positif. Notez, dans l’appel à champLibelle(), le passage du cinquième paramètre sous forme d’un tableau associatif indiquant un des attributs de la balise HTML correspon- dante. Par exemple champTexte(), qui correspond à une balise <input>, indique la taille d’affichage et la taille maximale de saisie en passant comme paramètre array("SIZE"=>$pTaille, "MAXLENGTH"=>$pTailleMax). Cette technique de 3.3 La classe Formulaire 165 passage de paramètres est un peu délicate à utiliser car il est facile d’y introduire des erreurs. En s’en servant uniquement dans le cadre d’une méthode privée, on limite les inconvénients. Production du formulaire Finalement, il reste à produire le formulaire avec la méthode formulaireHTML(). Quand cette méthode est appelée, toute la description du contenu du formulaire est disponible dans le tableau composants. Il s’agit donc essentiellement de parcourir ces composants et de créer la présentation appropriée. On concatène alors successi- vement la balise d’ouverture, en faisant attention à utiliser l’attribut enctype si un champ de type file a été introduit dans le formulaire, puis la chaîne de caractères dans laquelle on a placé tous les composants, enfin la balise fermante. public function formulaireHTML () { // On place un attribut enctype si on transfère un fichier if ($this−>transfertFichier) $encType = "enctype=’multipart /form−data ’"; else $encType=" " ; $formulaire = "" ; // Maintenant , on parcourt les composants et on crée le HTML foreach ($this−>composants as $idComposant => $description ) { // Agissons selon le type de la ligne switch ($description ["type"]) { case " CHAMP" : // C’ est un champ de formulaire $libelle = $description[ ’libelle ’]; $champ = $description [ ’champ’ ]; if ($this−>orientation == Formulaire ::VERTICAL) { $this−>tableau−>ajoutValeur($idComposant , "libelle" , $libelle); $this−>tableau−>ajoutValeur($idComposant , "champ", $champ) ; } else if ($this−> o r i e n t a t i o n == F o r m u l a i r e : : HORIZONTAL) { $this−>tableau−>ajoutEntete (2 , $idComposant , $libelle); $this−>tableau−>ajoutValeur (" ligne " , $idComposant , $champ) ; } else $formulaire .= $libelle . $champ; break ; 166 Chapitre 3. Programmation objet case "TEXTE " : // C’est un texte simple à insérer $formulaire .= $description [ ’texte ’]; break ; case "DEBUTTABLE" : // C’est le début d’un tableau HTML $this−>orientation = $description [ ’ orientation ’ ]; $this−>tableau = $description [ ’tableau ’ ]; break ; case "FINTABLE" : // C’est la fin d’un tableau HTML $formulaire .= $this−>tableau−>tableauHTML() ; $this−>orientation="" ; break ; default : // Ne devrait jamais arriver echo " <p>ERREUR CLASSE FORMULAIRE ! ! < / p> " ; } } // Encadrement du formulaire par les balises $formulaire = "\n<form method=’$this−>methode ’ " . $encType ."action=’$this−>action ’ name=’$this−>nom ’ > " . $formulaire . "</form>"; // Il faut éventuellement le centrer if ($this−>centre) $formulaire = "<center>$formulaire </center>\n" ;; // On retourne la chaîne de caractères contenant le // formulaire return $formulaire ; } Essentiellement le code consiste à parcourir les composants et à agir en fonction de leur type. Passons sur l’ajout de texte et regardons ce qui se passe quand on rencontre un composant de début ou de fin de tableau. Dans le premier cas (début de tableau), on récupère dans le composant courant l’objet de la classe tableau instancié au moment de l’appel à la méthode debutTable() avec les paramètres appropriés. On place ce tableau dans la propriété tableau de l’objet, et on indique qu’on passe en mode table en affectant la valeur de la propriété orientation.À partir de là, cet objet devient disponible pour créer la mise en page des champs rencontrés ensuite. Dans le second cas (fin de tableau), on vient de passer sur toutes les informations à placer dans le tableau et on peut donc produire la représentation HTML de ce dernier avec tableauHTML(), la concaténer au formulaire, et annuler le mode tableau en affectant la chaîne nullle à orientation. 3.4 La classe IhmBD 167 C’est donc l’objet tableau qui se charge entièrement de la mise en forme des lignes et colonnes permettant d’aligner proprement les champs du formulaire. Bien entendu, il faut entre les composants de début et de fin de table alimenter le tableau avec ces champs : c’est ce que fait la partie traitant les composants de type CHAMP. Il suffit d’appeler la méthode ajoutValeur() de la classe Tableau en fonction de l’orientation souhaitée. • En mode Table, vertical, les libellés sont dans la première colonne et les champs dans la seconde. On indexe les lignes par l’identifiant du composant, la première colonne par ’libelle’ et la seconde par ’champ’. • En mode Table, horizontal, les libellés sont dans les en-têtes de colonne, chaque champ forme une colonne. On indexe donc chaque colonne par l’identifiant du composant, et l’unique ligne par ligne. Notez qu’on a indiqué, au moment de l’instanciation du tableau, que cette ligne devait être répétée plusieurs fois. Enfin, en mode libre (orientation est vide), on écrit simplement le libellé suivi du champ. En résumé, la classe Formulaire se limite, du point de vue de l’application, à l’ensemble des méthodes présentées dans le tableau 3.8, page 154. En ce qui concerne la partie privée de la classe, si elle est bien conçue, il n’y aura plus à y revenir que ponctuellement pour quelques améliorations, comme par exemple ajouter des attributs HTML, gérer des classes CSS de présentation, introduire un système de contrôles JavaScript, etc. L’utilisation des objets produits par la classe est beaucoup plus simple que son implantation qui montre un exemple assez évolué de gestion interne d’une structure complexe, pilotée par une interface simple. 3.4 LA CLASSE IHMBD Nous allons conclure par un dernier exemple de classe très représentatif d’un aspect important de la programmation objet, à savoir la capacité d’allier une réalisation générique (c’est-à-dire adaptée à toutes les situations) de tâches répétitives, et l’adap- tation (voire le remplacement complet) de cette réalisation pour résoudre des cas particuliers. Le cas d’école considéré ici est celui des opérations effectuées avec PHP sur les tables d’une base de données. Les quelques chapitres qui précèdent ont montré que ces opérations sont souvent identiques dans leurs principes, mais varient dans le détail en fonction : • de la structure particulière de la table ; • de règles de gestion spécifiques comme, par exemple, la restriction à la liste des valeurs autorisées pour un attribut. Les règles de gestion sont trop hétéroclites pour qu’on puisse les pré-réaliser simplement et en toute généralité. Leur codage au cas par cas semble inévitable. En revanche la structure de la table est connue et il est tout à fait envisageable d’automatiser les opérations courantes qui s’appuient sur cette structure, à savoir : 1. la recherche d’une ligne de la table par sa clé ; . méthode privée champLibelle(), et renvoient l’identifiant de champ transmis en retour par cette dernière. La méthode champLibelle() est plus générale mais plus difficile d’utilisation. Le rôle des méthodes. à un objet de la classe Tableau (voir section précédente) spécialisé dans ce type de tâche. On instancie donc un objet de cette classe quand on sait qu’il faudra produire un tableau, et on le. l’ajout de texte et regardons ce qui se passe quand on rencontre un composant de début ou de fin de tableau. Dans le premier cas (début de tableau), on récupère dans le composant courant l’objet de

Ngày đăng: 06/07/2014, 00:20

TỪ KHÓA LIÊN QUAN