2010-06-21 14 views
0

J'ai créé ce fichier à mon/Afficher/Aide/FormElement.phpExtension Zend_View_Helper_FormElement

<?php 

abstract class My_View_Helper_FormElement extends Zend_View_Helper_FormElement 
{ 

    protected function _getInfo($name, $value = null, $attribs = null, 
     $options = null, $listsep = null 
    ) { 

     $info = parent::_getInfo($name, $value, $attribs, $options, $listsep); 

     $info['id'] = 'My new ID'; 

     return $info; 
    } 
} 

Comment puis-je obtenir les éléments de forme normale pour utiliser ce lieu?

Pourquoi je veux ça? Dites que j'utilise le même formulaire plusieurs fois sur une page, la balise 'id =' des éléments de formulaire apparaîtra plusieurs fois, ceci n'est pas valable pour w3c. Donc au départ, je veux préfixer l'identifiant avec l'identifiant du formulaire.

Toutes les meilleures idées ou façons de le faire sont très appréciées.

Mise à jour:. juste réalisé que ce problème est le même avec les décorateurs :(Ne pensez pas que ce soit le droit chemin que j'ai pris

Répondre

0

L'utilisation de plusieurs instances de mêmes formulaires sur une page peut être validée si elle est utilisée en tant que sous-formulaire. Les sous-formulaires préfixent tous les identifiants avec le nom/l'identificateur du sous-formulaire

1

Créer nouvelle classe de forme et extension Zend_Form dans la méthode init() utiliser variables ns $ pour ajouter le préfixe/suffixe à tous les éléments vous pouvez définir la variable ns $ par le constructeur de forme

class Form_Test extends Zend_Form 
{ 

protected $ns; 

public function init() 
{ 
    $this->setAttrib('id', $this->ns . 'testForm'); 

    $name = new Zend_Form_Element_Text('name'); 
    $name->setAttrib('id', $this->ns . 'name'); 
    $name->setLabel('Name: *')->setRequired(true); 


    $submit = new Zend_Form_Element_Submit('submit'); 
    $submit->setAttrib('id', $this->ns . 'submitbutton'); 
    $submit->setLabel('Add')->setIgnore(true); 

    $this->addElements(array($name, $submit)); 
} 

public function setNs($data) 
{ 
    $this->ns = $data; 
} 

} 

Dans le contrôleur ou partout où vous appelez cette forme spécifier chaque instance de formulaire:..

$form1 = new Form_Test(array('ns' => 'prefix1')); 
$this->view->form1 = $form1; 

$form2 = new Form_Test(array('ns' => 'prefix2')); 
$this->view->form2 = $form2; 

// Validation if calling from the controller 
if ($form1->isValid()) ... 
+0

Semble comme une approche valide, mais j'ai réussi à contourner cela en utilisant subForms/DisplayGroups. – Phliplip

+0

Dans votre setAttrib() $ ns devrait être $ this-> ns me sphinks! – Phliplip

+0

ouais, pure faute de frappe! Je vais corriger mon exemple! Tnx – bas