2009-03-31 12 views
2

Ich nehme an, es ist eine häufige Anforderung, Formulare in Ihren Web-Anwendungen zu haben, die Edit Delete Schaltflächen unter ihnen haben. Aber ZF setzt einen Knopf unter den anderen, was kontraproduktiv ist. Ich denke, ViewScript Dekorator könnte mir helfen, Button HTML vollständig zu überschreiben.Wie man 2 Knöpfe hintereinander in einem Zend_Form setzt

Aber wie man es über andere Formen macht, um das Duplizieren zu vermeiden? Vielleicht bin ich zu kompliziert und ich sollte nur irgendwie HTML-Code anstelle von Button-Element-Objekte einfügen?

Antwort

0

Button-Dekoratoren können in Forms Konstruktor geändert werden. Buttons sollten ohne HtmlTag Dekorateur gelassen werden, dass auf getrennten Leitungen aufgrund dt/dd Tags zu deaktivieren, können HtmlTag Dekorateur wie diese entfernen sein:

$buttonobject->setDecorators(array(
    'ViewHelper', 
    //array('HtmlTag', array('tag' => 'dd')), 
    //array('Label', array('tag' => 'dt')),   
)); 

Kommentare sind nur zu Demonstrationszwecken. Zusätzlich können Tasten in einem fieldset gruppiert werden, für das Styling Zwecke:

$ this-> addDisplayGroup (array ('löschen', 'submit'), 'Buttons');

Optional site.css Code:

#fieldset-buttons { border: none; } 
1

Dies ist der Code, den ich in meiner eigenen Form-Klasse verwenden, die alle meine Formulare erben. Der wichtigste Trick ist, um nur den Viewhelper Dekorateur auf der Schaltfläche selbst, und halten Sie die Tasten in einem Displaygroup, die eine DtDdWrapper verwendet und wickeln die Tasten in einem <div class='buttons'> für zusätzliche Styling-Optionen

protected $_buttons = array(); 

    /** 
    * Sets a list of buttons - Buttons will be standard submits, or in the getJson() version 
    * they are removed from display - but stuck in the json in the .buttons property 
    * 
    * $buttons = array('save'=>'Save This Thing', 'cancel'=>'Cancel') as an example 
    * 
    * @param array $buttons 
    * @return void 
    * @author Corey Frang 
    */ 
    public function setButtons($buttons) 
    { 
    $this->_buttons = $buttons; 
    foreach ($buttons as $name => $label) 
    { 
     $this->addElement('submit', $name, array(
      'label'=>$label, 
      'class'=>$name, 
      'decorators'=>array('ViewHelper'), 
     )); 
    } 
    $this->addDisplayGroup(array_keys($this->_buttons),'buttons', array(
     'decorators'=>array(
     'FormElements', 
     array('HtmlTag', array('tag'=>'div', 'class'=>'buttons')), 
     'DtDdWrapper' 
    ) 
    )); 
    } 

    // Example from form::init() 
    $this->setButtons(array('save'=>'Save Entry', 'delete'=>'Delete Entry'));