4

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>

select 要素自体のスタイルを設定することはできますが、select 要素のどのオプションにも CSS クラス属性を渡すことができないようです。

私のコード:

$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 を拡張する必要がありますか? それとも、カスタムデコレータで十分でしょうか? 誰でも私にヒントを与えることができますか?私はこれに困惑しています。

前もって感謝します!

4

4 に答える 4

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())
;

ファイル library/glx/Form/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
}

?>

ファイル application/views/helpers/glxFormSelect.php または library/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 結果コード (スタイル padding-left を追加):

<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>
...
于 2011-09-18T22:37:58.913 に答える
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>
于 2010-08-28T10:35:33.747 に答える
0

これは実際には不可能ですが、すでに実装が要求されています。

見る

于 2010-02-07T18:34:03.607 に答える