2010-02-07 53 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; 
相关问题