Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 02-06-2009 23:17:31

gedeon555
Membre
Date d'inscription: 02-06-2009
Messages: 18

Afficher mon form avec display group sous forme de Table

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) :

Code:

<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 :

Code:

<?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

 

#2 04-08-2009 21:56:30

Candacey
Nouveau membre
Date d'inscription: 04-08-2009
Messages: 1

Re: Afficher mon form avec display group sous forme de Table

C'est exactement ce que je recherchais, merci!
Pret immobilier

Hors ligne

 

#3 26-12-2009 01:45:25

cyberface
Nouveau membre
Date d'inscription: 26-12-2009
Messages: 5

Re: Afficher mon form avec display group sous forme de Table

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 :

Code:

<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 big_smile

Code:

 
<?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

Code:

        $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'avancesmile

Dernière modification par cyberface (26-12-2009 01:51:28)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages