Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 09-08-2011 17:54:47

niusha
Nouveau membre
Date d'inscription: 13-05-2011
Messages: 4

[Zend_Form][1.11] Afficher les header dans un form tableau

Bonjour,

Voici j'ai un Zend_Form rempli à partir des informations d'un tableau (exemple tiré de ce site : http://davidcaylor.com/2008/03/24/build … zend_form/) :


Code:[lang=php]

$array[0]['id']    = 1005;
$array[0]['title'] = 'Mr.';
$array[0]['first'] = 'Ted';
$array[0]['last']  = 'Smith';
$array[1]['id']    = 1006;
$array[1]['title'] = 'Mr.';
$array[1]['first'] = 'Mark';
$array[1]['last']  = 'Jones';
$array[2]['id']    = 1007;
$array[2]['title'] = 'Ms.';
$array[2]['first'] = 'Sally';
$array[2]['last']  = 'Adams';
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

Code:[lang=php]

$form = new Zend_Form();
$form->setMethod('post')
     ->setAttrib('id', 'contactForm');
$subForm = new Zend_Form_SubForm();
 
foreach($array as $rownum => $row){
  $id = $row['id'];
  $rowForm = new Zend_Form_SubForm();
  foreach($row as $key => $value){
    if($key == 'id') continue;
    $rowForm->addElement(
      'text',
      $key,
      array(
        'value' => $value,
      )
    );
  }
  $rowForm->setElementDecorators(array(
    'ViewHelper',
    'Errors',
    array('HtmlTag', array('tag' => 'td')),
  ));
  $subForm->addSubForm($rowForm, $id);
}
 
$subForm->setSubFormDecorators(array(
  'FormElements',
  array('HtmlTag', array('tag'=>'tr')),
));
 
$form->addSubForm($subForm, 'contacts');
 
$form->setSubFormDecorators(array(
  'FormElements',
  array('HtmlTag', array('tag' => 'tbody')),
));
 
$form->setDecorators(array(
    'FormElements',
    array('HtmlTag', array('tag' => 'table')),
    'Form'
));
 
$form->addElement(
  'submit', 'submit', array('label' => 'Submit'));
 
$form->submit->setDecorators(array(
    array(
        'decorator' => 'ViewHelper',
        'options' => array('helper' => 'formSubmit')),
    array(
        'decorator' => array('td' => 'HtmlTag'),
        'options' => array('tag' => 'td', 'colspan' => 4)
        ),
    array(
        'decorator' => array('tr' => 'HtmlTag'),
        'options' => array('tag' => 'tr')),
));
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

Voici ce qui est créé en HTML (pour l'exemple) :

Code:[lang=html]

<table>
    // Valeur associées
    <tr><td> Valeur 1.1 </td>
          <td> Valeur 1.2 </td>
          ....
    </tr>
    <tr><td> Valeur 2.1 </td>
          <td> Valeur 2.2 </td>
           .....
    </tr>
</table>
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

Cet exemple affiche bien un formulaire avec un sous formulaire pour chaque ligne du tableau.

Le problème étant : comment ajouter la première ligne afin d'afficher les headers ? :

Code:[lang=html]

// Libéllés des colonnes du tableau
 <tr><th>Intitulé 1</th>
       <th>Intitulé 2</th>
       ...
</tr>
// Valeur associées
<tr><td> Valeur 1.1 </td>
      <td> Valeur 1.2 </td>
      ....
</tr>
<tr><td> Valeur 2.1 </td>
      <td> Valeur 2.2 </td>
       .....
</tr>
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

Merci d'avance pour toute réponse smile

Hors ligne

 

#2 10-08-2011 10:08:22

niusha
Nouveau membre
Date d'inscription: 13-05-2011
Messages: 4

Re: [Zend_Form][1.11] Afficher les header dans un form tableau

Solution (trouvé sur : http://paveldubinin.com/2011/04/real-ta … zend-form/) :

Ajouter une classe "decorator"  :  /library/Form/Decorator/SimpleTable.php

Code:[lang=php]

<?php
 
class Form_Decorator_SimpleTable extends Zend_Form_Decorator_Abstract
{
    public function render ($content)
    {
        $element = $this->getElement();
        $view    = $element->getView();
        if (null === $view) {
            return $content;
        }
         
        $columns = $this->getOption('columns');
        $class = $this->getOption('class');
        $id = $this->getOption('id');
 
        $columns_html = '';
        foreach ($columns as $current_column_name) {
            $columns_html .= '<th>'.$current_column_name.'</th>';
        }
 
        $result = '
            <table class="'.$class.'" id="'.$id.'">
                <thead>
                    <tr>
                        '.$columns_html.'
                    </tr>
                </thead>
                <tbody>
                    '.$content.'
                </tbody>
            </table>
        ';
 
        return $result;
    }
}
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

Et remplacer la ligne

Code:[lang=php]

$form->setDecorators(array(
    'FormElements',
    array('HtmlTag', array('tag' => 'table')),
    'Form'
));
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

Par :

Code:[lang=php]

$form->addPrefixPath('Form_Decorator', 'Form/Decorator/', 'Decorator');
 
$form->setDecorators(array(
                'FormElements',
                array(    'SimpleTable',
                        array('columns' => array(
                            '', 'title', 'firstname', 'lastname'))), // '' pour la colomne id afin de ne rien afficher
                'Form'));
Ajoutez [lang=php|phtml|javascript|sql|perl|xml|shell|html] au début de votre code pour activer le syntax highlighting

Et le tour est joué !

Dernière modification par niusha (10-08-2011 10:19:25)

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