Des templates statiques dynamiques
Par Nicolas SUPRIN, mercredi 20 septembre 2006 à 15:34 | PEAR | #56 | rss
A la demande générale de Mr Mislin, voici des astuces pour obtenir un peu de dynamisme avec les templates statiques (c'est à en perdre son latin).
Voici un exemple que j'ai essayé de simplifier au maximum (hésites pas a poser des question plus bas, dans les commentaires) :
formAdresse.php
<?php require_once 'HTML/QuickForm.php'; class FormAdresse extends HTML_QuickForm { private $A_elementAparser = array(); public function __construct() { parent::HTML_QuickForm('formAdresse', 'post', $_SERVER['PHP_SELF'], '', null, true); $this->addElement('header', 'titre', 'Adresses'); // --- on va construire 4 groupe d'adresses // perso1, perso2, buro1, buro2 (par exemple) for ($I_i = 0 ; $I_i < 4 ; $I_i++) { $A_group = array(); $A_group[] = $this->createElement('text', 'numero', 'Numero'); $A_group[] = $this->createElement('text', 'rue', 'Rue'); $A_group[] = $this->createElement('text', 'codePost', 'Code Postal'); $A_group[] = $this->createElement('text', 'ville', 'Ville'); // --- on ajoute ceci dans les element a parser $this->A_elementAparser[] = $this->addGroup( $A_group, 'adresse_'.$I_i, 'addresse '.$I_i, '<br/>', true); } } public function toHtml() { // --- load le template require_once 'HTML/Template/Sigma.php'; $O_tpl =& new HTML_Template_Sigma('.'); $O_tpl->loadTemplateFile('formAdresse.tpl'); // --- renderer require_once 'HTML/QuickForm/Renderer/ITStatic.php'; $O_rdr =& new HTML_QuickForm_Renderer_ITStatic($O_tpl); $this->accept($O_rdr); // -- pour chaque element a parser foreach ($this->A_elementAparser as $O_element) { $O_tpl->setCurrentBlock('Adresse'); // on va dire que la variable du template "contenu", prendra la valeur // du label de l'element + le code html correspondant $A_var{'contenu'} = $O_element->getLabel()."<br/>".$O_element->toHtml().""; $O_tpl->setVariable($A_var); $O_tpl->parseCurrentBlock('Adresse'); } return $O_tpl->get(); } } $O_form = new FormAdresse(); echo $O_form->toHtml(); ?>
formAdresse.tpl
<!-- BEGIN debut -->
<form {formAdresse_attributes}>
<input name="_qf__formAdresse" type="hidden" value="" />
<h2>{formAdresse_header_titre}</h2>
<!-- END debut -->
<!-- BENGIN Adresses --->
<p>{contenu}</p>
<!-- END Adresses -->
<!-- BEGIN fin -->
</form>
<!-- END fin -->
Ce qui donne ceci :
Extrapolation
De la, on peut imaginer un "truc" qui irrait "lire" l'intérieur d'un groupe afin de récupérer les labels et les html de chaque membre du groupe...





Aucun commentaire pour le moment.
Aucun trackback.
Pour faire un trackback sur ce billet : http://www.blog.cactuscrew.com/tb.php?id=56&chk=i1dwvd