Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour, ca fait maintenant plusieurs soirées que je passe à tenter de comprendre les decorators. Jusque là, j'ai réussi à afficher mon formulaire sous forme de <table> mais la ou ca coince, c'est quand j'ai ajouter un groupe d'affichage.
J'aimerais au final que mon formulaire ait plus ou moins cette structure (très abrégée) :
<form> <table> <tr> <th><label>File</label></th> <td><input type="file" name="file" /></td> </tr> </table> <fieldset> <legend>Nom</legend> <table> <tr> <th><label>Francais</label></th> <td><input type="text" /></td> </tr> <tr> <th><label>Anglais</label></th> <td><input type="text" /></td> </tr> <tr> <th><label>Espagnol</label></th> <td><input type="text" /></td> </tr> </table> </fieldset> <table> <tr> <th><label>Year</label></th> <td><input type="text" /></td> </tr> </table> </form>
Ou quelque chose qui ressemble. Que me conseillez-vous ?
Pour l'instant mon code ressemble à ca :
<?php class Admin_Form_Work extends Zend_Form { public function init() { $translate = Zend_Registry::get('TranslationObject'); $this->setMethod('post'); // Get languages $languages = Default_Model_Language::listAll(); // Add translated name elements $namesGroup = array(); foreach ($languages as $language) { $namesGroup[] = sprintf('name_%s', $language->id); $this->addElement('text', sprintf('name_%s', $language->id), array( 'label' => $language, 'filters' => array('stringTrim'), 'required' => false )); } $this->addDisplayGroup($namesGroup, 'names', array( 'legend' => $translate->_('Nom'), )); $this->getDisplayGroup('names')->removeDecorator('Label'); // Add translated description elements if (APPLICATION_ENV != 'development') { $descriptionGroup = array(); foreach ($languages as $language) { $descriptionGroup[] = sprintf('description[%s]', $language->id); $this->addElement('textarea', sprintf('description[%s]', $language->id), array( 'label' => $language->name, 'nbCols' => 4, 'required' => false )); } $this->addDisplayGroup($descriptionGroup, 'description', array( 'legend' => $translate->_('Description'), 'disableLoadDefaultDecorators' => true, )); } // Add a category element $category = new Default_Model_Category(); $categories = array(); foreach ($category->fetchAll() as $cat) { $categories[$cat->id] = $cat->translation->name; } $this->addElement('select', 'category', array( 'label' => $translate->_('Catégorie'), 'multiOptions' => $categories )); // Add a width element $this->addElement('text', 'width', array( 'label' => $translate->_('Largeur'), 'required' => true, 'filters' => array('int') )); // Add a height element $this->addElement('text', 'height', array( 'label' => $translate->_('Hauteur'), 'required' => true, 'filters' => array('int') )); // Add a year element $this->addElement('text', 'year', array( 'label' => $translate->_('Année de conception'), 'required' => true, 'filters' => array('int') )); // Add a paintingMethod element $paintingMethod = new Default_Model_PaintingMethod(); $paintingMethods = array(); foreach ($paintingMethod->fetchAll() as $method) { $paintingMethods[$method->id] = $method->translation->name; } $this->addElement('select', 'paintingMethod', array( 'label' => $translate->_('Méthode de peinture'), 'multiOptions' => $paintingMethods )); // Add a sold element $soldElement = new Zend_Form_Element_Radio('sold'); $soldElement->setLabel($translate->_('Vendu')) ->setRequired(true) ->setMultiOptions(array('yes' => $translate->_('Oui'), 'no' => $translate->_('Non'))) ->setValue('no'); $this->addElement($soldElement); // Add the submit button $this->addElement('submit', 'submit', array( 'ignore' => true, 'label' => $translate->_('Créer'), )); $this->setElementDecorators(array( 'ViewHelper', 'Errors', array(array('data' => 'HtmlTag'), array('tag' => 'td')), array('Label', array('tag' => 'th')), array(array('row' => 'HtmlTag'), array('tag' => 'tr')), )); $this->getElement('submit')->removeDecorator('Label'); $this->setDisplayGroupDecorators(array( 'FormElements', array(array('table' => 'HtmlTag'), array('tag' => 'table')), array(array('fieldset' => 'HtmlTag'), array('tag' => 'fieldset')), )); $this->setDecorators(array( 'FormElements', array(array('data' => 'HtmlTag'), array('tag' => 'table')), 'Form', )); } } ?>
Hors ligne
C'est exactement ce que je recherchais, merci!
Pret immobilier
Hors ligne
Bonjour,
je me permets de déterrer ce tread, car j'ai un problème plus ou moi similaire.
Soyez indulgent, cela fait 3 jours que j'ai commencé à toucher au framework Zend ^^
voici ce que j'aimerai réaliser comme formulaire :
<form> <table class="tableau1"> <th colspan="2">Login Information</th> <tr> <td>User name</td> <td><input type="text" name="username"/></td> <td>Password</td><td><input type="text" name="password"/></td> </tr> </table> <table class="tableau2"> <th colspan="2">Personal Information</th> <tr> <td>First name</td><td><input type="text" name="firstname"/></td> <td>Last name</td><td><input type="text" name="lastname"/></td> </tr> <tr> <td>country</td><td><input type="text" name="country"/></td> <td>city</td><td><input type="text" name="city"/></td> </tr> <tr> <td>E-mail</td><td><input type="text" name="email"></td> <td>E-mail Confirm</td><td><input type="text" name="email_confirm" ></td> </tr> <tr> <td><input type="checkbox" name="remember" value="1" /></td> <td> Remember Me</td> </tr> </table> </form>
Voici ce que j'ai déjà pu faire avec la notion de décorateur
<?php class Form_Member_Member extends Zend_Form { public function __construct($options = null) { parent::__construct($options); $this->setName('add_Member_Form'); $id = new Zend_Form_Element_Hidden('id_member'); $username = new Zend_Form_Element_Text('username_member',array('size' => 20)); $username->setLabel('Username') ->setRequired(true) ->addFilter('StripTags') ->addFilter('StringTrim') ->addValidator('NotEmpty'); $password = new Zend_Form_Element_Text('password_member',array('size' => 20)); $password->setLabel('Password') ->setRequired(true) ->addFilter('StripTags') ->addFilter('StringTrim') ->addValidator('NotEmpty'); $firstname = new Zend_Form_Element_Text('firstname_member',array('size' => 20)); $firstname->setLabel('First Name') ->setRequired(true) ->addFilter('StripTags') ->addFilter('StringTrim') ->addValidator('NotEmpty'); $lastname = new Zend_Form_Element_Text('lastname_member',array('size' => 20)); $lastname->setLabel('Last Name') ->setRequired(true) ->addFilter('StripTags') ->addFilter('StringTrim') ->addValidator('NotEmpty'); $locale = new Zend_Locale('en_Us'); $countries = ($locale->getTranslationList('Territory', 'en', 2)); asort($countries, SORT_LOCALE_STRING); $country = new Zend_Form_Element_Select('country_member'); $country->setLabel('Country') ->addMultiOptions($countries) ->addValidator('NotEmpty'); $city = new Zend_Form_Element_Text('city_member'); $city->setLabel('City') ->setRequired(true) ->addFilter('StripTags') ->addFilter('StringTrim'); $email = new Zend_Form_Element_Text('email_member'); $email->setLabel('E-Mail') ->setRequired(true) ->addFilter('StripTags') ->addFilter('StringTrim') ->addValidator('EmailAddress'); $email_conf = new Zend_Form_Element_Text('email_conf_member'); $email_conf->setLabel('Confirm E-Mail') ->setRequired(true) ->addFilter('StripTags') ->addFilter('StringTrim'); $newsletter = new Zend_Form_Element_Checkbox('newsletter'); $newsletter->setLabel('Remember me') ->setValue(1) ->setChecked(false); $submit = new Zend_Form_Element_Submit('submit'); $submit->setLabel('Subscribe'); $this->addElements(array($username, $password,$firstname,$lastname,$country,$city,$email,$email_conf,$newsletter,$id,$submit)); $this->addDisplayGroup(array('username_member','password_member'), 'group_1',array('legend' => 'Login Information')); $this->addDisplayGroup(array('firstname_member','lastname_member'), 'group_2',array('legend' => 'Personnal Information')); $this->addDisplayGroup(array('country_member','city_member'),'group_3'); $this->addDisplayGroup(array('email_member','email_conf_member'),'group_4'); $this->addDisplayGroup(array('newsletter'),'group_5'); $this->addDisplayGroup(array('id_member','submit'),'group_6'); $this->getDisplayGroup('group_1') ->setDecorators(array( 'FormElements', array('HtmlTag',array('tag'=>'tr', 'class'=>'tr_class')), array(array('table' => 'HtmlTag'), array('tag' => 'table', 'class'=>'tableau1')) )); for($i=2;$i<=6;$i++) { $this->getDisplayGroup('group_'.$i) ->setDecorators(array( 'FormElements', array('HtmlTag',array('tag'=>'tr', 'class'=>'tr_class')), )); } $this->setElementDecorators(array( 'ViewHelper', 'Errors', array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'td_class')), array('Label', array('tag' => 'td')), )); $this->setDecorators(array('FormElements','Form')); } }
Mon problème est que je suis arrivé à créer le formulaire à l'exception je ne vois pas comment faire pour insérer la balise <table class=tableau2>.
Mon idée serait de créer un DisplayGroup qui contiendrait des autres DisplayGroup, puis mettre un décorateur sur le DisplayGroup(mère) du style
$this->getDisplayGroup('DisplayGroup(mère)') ->setDecorators(array( 'FormElements', array('HtmlTag',array('tag'=>'tr', 'class'=>'tr_class')), array(array('table' => 'HtmlTag'), array('tag' => 'table', 'class'=>'tableau2')) ));
Toutes aides seraient vraiment appréciée. Merci d'avance
Dernière modification par cyberface (26-12-2009 01:51:28)
Hors ligne
Pages: 1