1

J'essaye de rendre un formulaire Foundation 5 avec la validation de Abide en utilisant Zend Form. J'ai encore du mal à comprendre comment utiliser ViewHelpers et Decorators de Zend pour rendre le formulaire avec les divs requis par Foundation-- Je peux envelopper un élément de formulaire dans un div correctement classé, mais je ne peux pas mettre plusieurs éléments dans un <div class="row"> pour Exemple.Comment rendre les divs wrapper de Foundation 5 autour d'éléments de formulaire à l'aide de Zend Framework

Voici ce que je ne suis pas capable d'accomplir:

1) Attribution d'une classe parent de chaque élément de forme de div. Je peux attribuer à chaque div diviseur la même classe (voir mon code ci-dessous) mais pas à un élément individuel. Quand j'ai essayé d'ajouter un $element->setAttrib('class','small-##') il l'a appliqué à l'élément <input />, pas à ce div diviseur. Par exemple firstName et lastName devraient être class="small-6" en company sur la ligne suivante est class="small-12"

2) Mise en place des éléments de formulaire multiples dans une balise <div class="row"> et puis en faisant à nouveau pour la ligne de formulaire suivant. En ce moment je peux mettre chaque élément dans une rangée, mais je ne sais pas comment mettre plusieurs éléments dans le même <div class="row">.

3) Dans les exemples de Foundation, les balises <label> entourent la balise <input>, mais Zend ferme l'étiquette avant l'entrée. Est-ce que cela compte?

Voici le code HTML que je veux rendre:

<form method="post" action="" enctype="multipart/form-data" data-abide> 
<div class="row"> 
    <div class="large-12 columns"> 
     <div class="row"> 
      <div class="small-2 columns"> 
       <label for="display" class="inline">Display For: </label> 
      </div> 
      <div class="small-10 columns"> 
       <input type="radio" name="display" value="0" id="displayEveryone" checked><label for="displayEveryone" class="inline">Everyone</label> 
       <input type="radio" name="display" value="999" id="displaySelf"><label for="displaySelf" class="inline">Only Me</label> 
      </div> 
     </div> 
    </div> 
</div> 
<div class="row"> 
    <div class="small-6 columns"> 
     <label>First Name 
     <input type="text" required class="contact" name="firstName" id="firstName" maxlength="25" autofocus="autofocus"/> 
     </label> 
     <small class="error">First name is required.</small> 
    </div> 
    <div class="small-6 columns"> 
     <label>Last Name 
     <input type="text" required class="contact" name="lastName" id="lastName" maxlength="25"/> 
     </label> 
     <small class="error">Last name is required.</small> 
    </div> 
</div> 
<div class="row"> 
    <div class="small-12 columns"> 
     <label>Company or Affiliation 
     <input type="text" class="contact" name="company" id="company" maxlength="125"/> 
     </label> 
    </div> 
</div> 
<div class="row"> 
    <div class="small-4 columns"> 
     <label>Work Phone 
     <input type="text" class="contact" name="workPhone" id="workPhone" /> 
     </label> 
    </div> 
    <div class="small-4 columns"> 
     <label>Cell Phone 
     <input type="text" class="contact" name="cellPhone" id="cellPhone" /> 
     </label> 
    </div> 
    <div class="small-4 columns"> 
     <label>Home Phone 
     <input type="text" class="contact" name="homePhone" id="homePhone" /> 
     </label> 
    </div> 
</div> 
</form> 

Et voici le script de formulaire Zend J'ai actuellement et doit être changé:

class Application_Form_Contact extends Zend_Form 
{ 

    public function init() 
    { 
     $this->setMethod('post'); 
     $this->setName('addContact'); 
     $this->setAttrib('enctype', 'multipart/form-data') ; 
     $id = new Zend_Form_Element_Hidden('contactID');$id->addFilter('Int'); 

     $display= new Zend_Form_Element_Radio('display'); 
     $display->setLabel('Display For: ') 
       ->setRequired(true) 
       ->addMultiOptions(array(0 => "Everyone", 999 => "Only Me")); 

     $fName = new Zend_Form_Element_Text('firstName'); 
     $fName->setLabel('First Name: ') 
       ->setRequired(true) 
       ->setAttrib('maxlength', 25) 
       ->setAttrib('autofocus', 'autofocus') 
       ->addFilter('StripTags') 
       ->addFilter('StringTrim'); 

     $lName = new Zend_Form_Element_Text('lastName'); 
     $lName->setLabel('Last Name: ') 
       ->setRequired(true) 
       ->setAttrib('maxlength', 25) 
       ->addFilter('StripTags') 
       ->addFilter('StringTrim'); 

     $company = new Zend_Form_Element_Text('company'); 
     $company->setLabel('Company: ') 
       ->setRequired(false) 
       ->setAttrib('maxlength', 125) 
       ->addFilter('StripTags') 
       ->addFilter('StringTrim'); 

     $workPhone = new Zend_Form_Element_Text('workPhone'); 
     $workPhone->setLabel('Work Phone: ') 
       ->setRequired(false) 
       ->setAttrib('class', 'small-4') 
       ->addFilter('StripTags') 
       ->addFilter('StringTrim'); 

     $cellPhone = new Zend_Form_Element_Text('cellPhone'); 
     $cellPhone->setLabel('Cell Phone: ') 
       ->setRequired(false) 
       ->setAttrib('class', 'small-4') 
       ->addFilter('StripTags') 
       ->addFilter('StringTrim'); 

     $homePhone = new Zend_Form_Element_Text('homePhone'); 
     $homePhone->setLabel('Home Phone: ') 
      ->setRequired(false) 
      ->setAttrib('class', 'small-4') 
      ->addFilter('StripTags') 
      ->addFilter('StringTrim'); 

     $otherPhone = new Zend_Form_Element_Text('otherPhone'); 
     $otherPhone->setLabel('Other Phone: ') 
       ->setRequired(false) 
       ->addFilter('StripTags') 
       ->addFilter('StringTrim'); 

     $submit = new Zend_Form_Element_Submit('submit'); 
     $submit->setAttrib('id', 'submitbutton'); 

     $this->addElements(array($id, $display, $fName, $lName, $company, $workPhone, $cellPhone, $homePhone, $otherPhone, $submit)); 

     $this->setElementDecorators(array(
      'ViewHelper', 
      array('Description'), 
      array('Errors'), 
      array(array('data' => 'HtmlTag'), array('tag' => 'div', 'class'=>'small-6 columns')), 
      array('Label'), 
      array(array('row' => 'HtmlTag'), array('tag' => 'div', 'class'=> 'row')) 
      )); 

     $submit->setDecorators(array(
      'ViewHelper', 
      array(array('data' => 'HtmlTag')), 
      array(array('row' => 'HtmlTag')) 
      )); 

     $this->setDecorators(array(
      'FormElements', 
      array('HtmlTag', array('tag' => 'div', 'class'=>'small-12 columns')), 
      array('Form', array('data-abide'=>'data-abide')) 
      ));      
     $view = $this->getView(); 
     $formErrors = $view->getHelper('formErrors'); 
     $formErrors->setElementStart('<small class="error">') 
        ->setElementSeparator('') 
        ->setElementEnd('</small>');  
    } 
} 

Merci pour votre aide.

Répondre

0

Décorateurs par défaut Ne pas besoin d'être chargé

Par défaut, les décorateurs par défaut sont chargés lors de l'initialisation de l'objet. Vous pouvez désactiver cette fonctionnalité en passant l'option 'disableLoadDefaultDecorators de au constructeur:

$element = new Zend_Form_Element('foo', 
    array('disableLoadDefaultDecorators' => true) 
); 

Créer une vue et d'ajouter vos éléments de formulaire comme ceci:

<?php echo $this->YourFormObject->getElement('YourElementID'); ?> 

Je l'ai fait espérer ce utile pour vous ...

Questions connexes