2012-08-28 42 views
3

我有一個關於使用Zend_Form_Decorator_Label,爲了得到下面的結果時需要表單元素的問題,我需要得到標籤文本*,我想知道如何以最可重用的方式實現這一目標?什麼是最好的方式來添加所需的標記與標籤裝飾 - Zend

是寫新裝飾器還是重寫zend_View_helper_FormLabel? 也許還有其他方法來實現這一目標?

任何幫助將不勝感激。

回答

4

您可以添加下列選項之一,當您創建裝飾:

  • optionalPrefix:一個前綴的標籤時,該元素是可選的
  • optionalSuffix使用方法:一爲後綴的要素可選時使用的標籤
  • requiredPrefix:需要元素時使用的標籤前綴
  • requiredSuffix:一個後綴標籤使用時所需要的元素

代碼示例:

$elementDecorators = array(
    'ViewHelper', 
    array('Label', array('requiredSuffix' => ' *')), 
); 

$userName = new Zend_Form_Element_Text('userName'); 
$userName->setDecorators($elementDecorators); 
$userName->setLabel('User Name'); 

或者對現有的裝飾或者你可以明確地設置後綴/前綴:

$userName->getDecorator('Label')->setReqSuffix(' *'); 
$userName->getDecorator('Label')->setOptSuffix('(Optional) '); 
3

由於標籤裝飾添加CSS類required到附連到被指定爲所需要的形式的輸入元件的<label>元件,我已經能夠通過使用CSS :after選擇與content()聲明添加一個符號(如星號) :

label.required:after { 
    content: "*"; 
} 

不過,我覺得它可能會非常棘手得到間隔的權利,以獲得星號粗體或顏色我想,等結果來呈現,我往往只是回落到使用CSS以粗體或不同顏色呈現標籤本身,然後在表單的頂部或底部添加一個圖例(需要「粗體/紅色字段」或其他顏色) (通常通過創建我自己的自定義圖例裝飾器,但有時在視圖腳本本身中)。

2
class FormDecorators { 
    public static $simpleElementDecorators = array(
     array('ViewHelper'), 
     array('Label', array('tag' => 'span', 'escape' => false, 'requiredPrefix' => '<span class="required">* </span>')), 
     array('Description', array('tag' => 'div', 'class' => 'desc-item')), 
     array('Errors', array('class' => 'errors')), 
     array('HtmlTag', array('tag' => 'div', 'class' => 'form-item')) 
    ); 
    } 

而對於您使用的元素

$elem->setDecorators(FormDecorators::$simpleElementDecorators) 

我在標籤數組中添加了requiredPrefix參數所需的前綴。

array('Label', array('tag' => 'span', 'escape' => false, 'requiredPrefix' => '<span class="required">* </span>')), 
相關問題