2010-08-03 7 views
1

J'ai deux formulaires et ils partagent certains identifiants car deux champs d'entrée sont appelés 'titre'.Zend Decorators - Supprimer le champ Id pour DT Wrapper

Zend me génère une sortie agréable comme ceci:

<dl class="zend-form"> 
    <dt id="title-label"> 
    <label for="form1-title" class="required">Description</label> 
    </dt> 
    <dd id="title-element"> 
    <input name="form1[title]" id="form1-title" value="..." type="text"> 
    </dd> 
</dl> 

Maintenant, le problème est que le dt et les éléments dd sont nommés mal (devrait être form1-titre-lable car cela est une forme de sous).

J'ai essayé aussi de changer les décorateurs d'éléments:

$this->addElements(...); 
$this->setElementDecorators(array(
     'ViewHelper', 
     'Errors', 
     array(array('data' => 'HtmlTag'),array('tag' => 'dd', 'class' => 'element')), 
     array(array('data' => 'Label'),array('tag' => 'dt', class=> 'label')) 
)); 

Cependant, le résultat n'a pas été comme prévu.

Une étiquette a été ajoutée à mon bouton d'envoi et les identifiants des éléments dt étaient toujours présents.

Comment supprimez-vous les attributs id?


Modifier - Déclaration Élément:

$titel = new Zend_Form_Element_Text('title'); 
    $titel->setLabel("Title") 
      ->addValidator('NotEmpty', true) 
      ->addValidator('stringLength',true, array(0, 255)) 
      ->setRequired(true) 
      ->addFilter("Alnum", array(true)) 
      ->addFilter('StringTrim'); 

    $this->addElement($titel); 
+1

Utilisez-vous des sous-formulaires? Pouvez-vous poster tout le code de cet élément? –

Répondre

1

Il semble que le problème réside dans le fait que vos sous-formulaires ne préfixent pas leur nom à l'ID. Si vous résolvez cela, vous n'aurez pas besoin de retirer les identifiants. Mais, si vous voulez supprimer l'ID d'un élément à l'aide du décorateur DtDdWrapper, vous pouvez faire quelque chose comme ça.

class Form_Foo extends Zend_Form_SubForm 
{ 
    public function init() 
    { 

     $title = new Zend_Form_Element_Text('foo_title'); 
     $title->setLabel('Title'); 
     $title->removeDecorator('DtDdWrapper'); 
     $title->addDecorator(new Decorator_Foo());  
     $this->addElement($title); 
    } 
} 

class Decorator_Foo extends Zend_Form_Decorator_DtDdWrapper 
{ 
    public function render($content) 
    { 
     return '<dt>&nbsp;</dt>' . 
       '<dd>' . $content . '</dd>'; 
    } 
} 

Cela devrait vous donner des éléments sans balise ID.

0

vous pouvez créer un décorateur personnalisé étiquette de sorte que vous pouvez modifier la valeur par défaut rend la fonction.

class App_Form_Decorator_Label extends Zend_Form_Decorator_Label 
{ 

    public function render() 
    { 
     // Insert here the render function of Zend_form_Decorator_Label but without the id decorator. 
    } 
}