2010-03-04 2 views
5

Update Ich konnte das schaffen, indem ich einen benutzerdefinierten Label Dekorator erstellte, der Zend/Form/Decorator/Label.php erweiterte. Ich habe eine setTagClass() -Methode hinzugefügt und die Rendermethode überschrieben, um das umschließende Tag mit der gewünschten Klasse zu erstellen. Es mag einen eleganteren Weg geben, aber das scheint zu funktionieren.Zend Form - Setze die Klasse auf ein Label dt

Ich bin auf der Suche nach Informationen zum Festlegen der Klasse auf einem dt-Element einer Beschriftung mit einem Dekorator. Die dritte Codezeile setzt die Klasse auf dem Etikett und umschließt das Etikett in einem dt-Tag. Ich möchte wissen, wie ich die Klasse auf dem dt-Tag festlegen kann.

$txtLangPrefOther = $this->createElement('text','langPrefOther'); 
$txtLangPrefOther->setLabel('Language Preference Other:')); 
$txtLangPrefOther->getDecorator('Label')->setOptions(array('tag' => 'dt', 'class' => 'other')); 

Dies erzeugt eine Ausgabe wie

<dt id="langPrefOther-label"> 
    <label for="langPrefOther" class="other">Language Preference Other:</label> 
</dt> 

<dd id="langPrefOther-element"> 
    <input type="text" id="langPrefOther" name="langPrefOther" "> 
</dd> 

ich es wie

<dt id="langPrefOther-label" class="other"> 
    <label for="langPrefOther">Language Preference Other:</label> 
</dt> 

<dd id="langPrefOther-element"> 
    <input type="text" id="langPrefOther" name="langPrefOther" "> 
</dd> 

Antwort

4

aussehen wollen Weil es ein Formulardekoratoren nicht Element Dekorateur ist. Versuchen Sie folgendes:

$this->setDecorators(
array(
'FormElements', 
array('HtmlTag', array('tag' => 'dl', 'class' => 'theclass')), 
'Form' 
)); 
+0

Ich möchte nur bestimmte dt ist die ‚andere‘ Klasse Set haben, nicht alle von ihnen. – Chris

+1

So können Sie jquery verwenden. $ ('# idOfFormElement'). Engster ('dt'). AddClass ('Klassenname'); – cnkt

+2

Oder Sie können $ form-> element-> setDecorator ('HtmlTag', Array ('tag' => 'dl', Klasse => 'theclass')) –

0

Es ist wahrscheinlich ein sauberer Weg, dies zu tun, aber hier ist meine Gewohnheit Dekorateur dies zu tun (Hinweis: Sie die Zend_Form_Decorator_Label Klasse verlängern müssen):

/** 
* Class for HTML tag surrounding label 
* @var string 
*/ 
protected $_tagClass; 

/** 
* Set HTML tag's class 
* 
* @param string $tag 
* @return Zend_Form_Decorator_Label 
*/ 
public function setTagClass($tagClass) 
{ 
    if (empty($tagClass)) { 
     $this->_tagClass = null; 
    } else { 
     $this->_tagClass = (string) $tagClass; 
    } 

    $this->removeOption('tagClass'); 

    return $this; 
} 

/** 
* Get HTML tag's class, if any 
* 
* @return void 
*/ 
public function getTagClass() 
{ 
    if (null === $this->_tagClass) { 
     $tagClass = $this->getOption('tagClass'); 
     if (null !== $tagClass) { 
      $this->removeOption('tagClass'); 
      $this->setTagClass($tagClass); 
     } 
     return $tagClass; 
    } 

    return $this->_tagClass; 
} 

/** 
* Render a label 
* 
* @param string $content 
* @return string 
*/ 
public function render($content) 
{ 
    $element = $this->getElement(); 
    $view = $element->getView(); 
    if (null === $view) { 
     return $content; 
    } 

    $label  = $this->getLabel(); 
    $separator = $this->getSeparator(); 
    $placement = $this->getPlacement(); 
    $tag  = $this->getTag(); 
    $tagClass = $this->getTagClass(); 
    $id  = $this->getId(); 
    $class  = $this->getClass(); 
    $options = $this->getOptions(); 


    if (empty($label) && empty($tag)) { 
     return $content; 
    } 

    if (!empty($label)) { 
     $options['class'] = $class; 
     $label = $view->formLabel($element->getFullyQualifiedName(), trim($label), $options); 
    } else { 
     $label = '&#160;'; 
    } 

    if (null !== $tag) { 
     require_once 'Zend/Form/Decorator/HtmlTag.php'; 
     $decorator = new Zend_Form_Decorator_HtmlTag(); 
     $decorator->setOptions(array('tag' => $tag, 
            'id' => $id . '-label', 
            'class' => $tagClass)); 

     $label = $decorator->render($label); 
    } 

    switch ($placement) { 
     case self::APPEND: 
      return $content . $separator . $label; 
     case self::PREPEND: 
      return $label . $separator . $content; 

    } 
} 
5

Es gibt Eine Eigenschaft des Label Dekorators namens tagClass!

Probieren Sie dies aus:

$element->addDecorators(array( 
'ViewHelper', 
'Description', 
'Errors', 
array('HtmlTag', array('tag' => 'dd', 'class' => $class)), 
array('Label', array('tag' => 'dt', 'class' => $class, 'tagClass' => $class)) 
)); 
Verwandte Themen