0

Zend Framework では、ユーザーが選択できる項目が 1 つしかない場合に自動的に非表示の要素に変わる select 要素を作成しようとしています。複数の値がある場合は Select 要素と同じように動作させたいので、次を使用してクラスを拡張する必要があることがわかっています。

class Application_Form_Element_SingleSelect extends Zend_Form_Element_Select{}

しかし、隠し要素として出力する方法がわかりません。

アップデート

これは私が思いついた最終的なコードでした:

public function render(Zend_View_Interface $view = null){
    $options = $this->getMultiOptions();

    // check to see if there is only one option
    if(count($options)!=1){
        // render the view
        return parent::render($view);
    }

    // start building up the hidden element
    $returnVal = '<input type="hidden" name="' . $this->getName() . '" ';

    // set the current value
    $keys = array_keys($options);
    $returnVal .= 'value="' . $keys[0] . '" ';

    // get the attributes
    $attribs = $this->getAttribs();

    // check to see if this has a class
    if(array_key_exists('class', $attribs)){
        $returnVal .= 'class="' . $attribs['class'] . '" ';
    }

    // check to see if this has an id
    if(array_key_exists('id', $attribs)){
        $returnVal .= 'id="' . $attribs['id'] . '" ';
    } else {
        $returnVal .= 'id="' . $this->getName() . '" ';
    }

    return $returnVal . '>';
}
4

1 に答える 1

1

その要素に追加されたすべてのデコレータを介してhtmlを生成するrenderメソッドをオーバーライドする必要があります。

class Application_Form_Element_SingleSelect extends Zend_Form_Element_Select{

 public function render(Zend_View_Interface $view = null)
{
  $options = $this->getMultiOptions();
   return count($options) > 1 ? parent::render($view) : '' ;
}

}
于 2012-05-11T15:16:01.670 に答える