2010-02-07 82 views
3

我想添加一個CSS類到Zend_Form_Element_Select選項,但我只是找不到一種方法來做到這一點。如何添加CSS類到Zend_Form_Element_Select選項

所需的輸出會是這樣的:

<select name="hey" id="hey"> 
    <option value="value1" style="parent">label1</option> 
    <option value="value2" style="sibling">sublabel1</option> 
    <option value="value3" style="sibling">sublabel2</option> 
    <option value="value4" style="parent">label2</option> 
    <option value="value5" style="sibling">sublabel3</option> 
    <option value="value6" style="sibling">sublabel4</option> 
</select> 

但我發現了這一點:

<select name="hey" id="hey"> 
    <option value="value1">label1</option> 
    <option value="value2">sublabel1</option> 
    <option value="value3">sublabel2</option> 
    <option value="value4">label2</option> 
    <option value="value5">sublabel3</option> 
    <option value="value6">sublabel4</option> 
</select> 

我似乎無法爲CSS類屬性傳遞給任何選項在select元素中雖然我可以設計select元素的樣式。

我的代碼:

$sel = new Zend_Form_Element_Select('hey'); 
$sel->setRequired(true)->setLabel('Select an Option:'); 
$sel->addMultiOption('value1', 'label1', array('class' => 'parent')) 
    ->addMultiOption('value2', 'sublabel1', array('class' => 'sibling')) (etc...); 

研究了一下,我發現,Element_Select沒有添加CSS樣式選項的選擇框,只爲選擇自己的方法後。

那麼,我該如何添加它們呢?我應該擴展form_element_select嗎?或者一個自定義的裝飾器就足夠了?任何人都可以給我一個提示嗎?我對此感到困惑。

在此先感謝!

+2

這應該是'class',不'style',對不對? – Gordon 2010-02-07 18:31:43

+0

我想爲MultiCheckbox組中的單個元素完成相同的操作。 – Sonny 2010-05-26 14:43:20

+0

看看:http://stackoverflow.com/questions/6397015/how-to-add-attributes-id-for-example-to-options-of-zend-form-element-select – 2013-09-23 14:19:30

回答

0

您可以用JavaScript添加它,特別是jQuery的。這將導致選擇下拉菜單的背景被着色。

<style type="text/css"> 
    .t1 {background: red; color:#fff;} 
</style> 
<form> 
    <select id="test"> 
     <option value="abc">ABC</option> 
     <option value="123">123</option> 
     <option value="foo">Foo</option> 
    </select> 

</form> 

<script type="text/javascript"> 
$('#test [value*="abc"]').addClass('t1'); 
$('#test [value*="foo"]').addClass('t1'); 
</script> 
0

在形式:

<?php 

require_once 'glx/Form/Element/Select.php'; // custom select class 

// ... in init or __create function : 

$categories = new Model_DbTable_Categories(); // some Model 

$PID = new glx_Form_Element_Select('PID'); // custom select object 

$PID 
    ->setLabel('PID') 
    ->setDecorators(array('ViewHelper')) 
    ->addMultiOptions($categories->getSelectOptions()) 
; 

文件庫/ GLX /表格/ Select.php:

<?php 

require_once 'Zend/Form/Element/Multi.php'; 

$error_reporting = error_reporting(0); 
@include_once '../application/views/helpers/glxFormSelect.php'; // first, maby here 
if (! class_exists('Zend_View_Helper_glxFormSelect')) 
    require_once 'glx/View/Helper/glxFormSelect.php'; // or least, maby here 
error_reporting($error_reporting); 

class glx_Form_Element_Select extends Zend_Form_Element_Multi 
{ 
    public $helper = 'glxFormSelect'; // this is my custom code 
} 

?> 

文件的應用程序/視圖/助理/ glxFormSelect.php或庫/ GLX/View/Helpe/glxFormSelect.php:

<?php 

require_once 'Zend/View/Helper/FormElement.php'; 

class Zend_View_Helper_glxFormSelect extends Zend_View_Helper_FormSelect 
{ 
    public function glxFormSelect($name, $value = null, $attribs = null, $options = null, $listsep = "<br />\n") 
    { 
     return parent::formSelect($name, $value, $attribs, $options, $listsep); 
    } 

    protected function _build($value, $label, $selected, $disable) 
    { 
     if (is_bool($disable)) 
      $disable = array(); 

     $oldLabel = $label;             // this is my custom code 
     $label = ltrim($label);            // this is my custom code 

     $opt = '<option' 
      . ' value="' . $this->view->escape($value) . '"' 
      . ' label="' . $this->view->escape($label) . '"'; 

     if (($countSpaces = strlen($oldLabel) - strlen($label)) > 0)   // this is my custom code 
      $opt.= sprintf(' style="padding-left:%dpx"', (15 * $countSpaces)); // this is my custom code 

     if (in_array((string) $value, $selected)) 
      $opt .= ' selected="selected"'; 

     if (in_array($value, $disable)) 
      $opt .= ' disabled="disabled"'; 

     $opt .= '>' . $this->view->escape($label) . "</option>"; 

     return $opt; 
    } 
} 

?> 

最終的HTML res ULT代碼(樣式填充左加):

<select name="PID" id="PID"> 
<option value="1" label="Categories" style="padding-left:15px">Categories</option> 
<option value="2" label="Publications" style="padding-left:30px">Publications</option> 
<option value="83" label="Links" style="padding-left:45px">Links</option> 
... 
1
$htmlEgressCss='<style>'; 
$multiOptions = array("" => "All"); 
$resEg = $this->commonDB->getEgressTrunk(); 
while ($row = $resEg->fetch()) { 
    if($row['IsActive']==0){ 
     $htmlEgressCss .= '.egressClass select, option[value="'.$row['TrunkInfoID'].'"] {color:red;font-weight:bold;}'; 
    } 
    $multiOptions[$row['TrunkInfoID']] = $row['IngressTrunkName']; 
} 
$htmlEgressCss.='</style>'; 
$this->addElement(
     'select', 
     'cmbEgressTrunk', 
     array(
      'multiOptions' =>$multiOptions, 
     ) 
    ); 
$html = '<form><div>'.$this->cmbEgressTrunk .'</div></form>'.$htmlEgressCss;