2012-03-26 12 views
2

:ファイル(行70)の下部にhttp://code.google.com/p/digitalus-cms/source/browse/trunk/library/Digitalus/Form/Decorator/Composite.php?r=767のZend Frameworkクラス

は次のとおりです。

$output = '<div class="form_element">' 
       . $label 
       . $input 
       . $errors 
       . $desc 
       . '</div>'; 

私はしたいと思いますDIVクラスは動的で、コントローラに要素を作成すると渡されます。私が使用するビルトインZEND関数は、LABELまたはINPUTを変更するだけです。要素の作成例を次に示します。

$decorator = new Composite(); 

     $this->addElement('text', 'start', array(
      'label'  => 'Start Number', 
      'required' => true, 
      'filters' => array('StringTrim'), 
      'validators' => array(
       'alnum', 
      ), 
      'decorators' => array($decorator) 
     )); 

アイデアは非常に高く評価されます。見る時間をとってくれてありがとう!

答えて

2

あなただけのrender()メソッド修正し、この現在のデコレータを変更することが許可されている場合は、すべてのCSSクラスは、ハードコードされている理由を今すぐ確認してください:

class Digitalus_Form_Decorator_Composite 
{ 
    /* ... */ 
    public function render($content) 
    { 
     $element = $this->getElement(); 
     if (!$element instanceof Zend_Form_Element) { 
      return $content; 
     } 
     if (null === $element->getView()) { 
      return $content; 
     } 

     $separator = $this->getSeparator(); 
     $placement = $this->getPlacement(); 
     $label  = $this->buildLabel(); 
     $input  = $this->buildInput(); 
     $errors = $this->buildErrors(); 
     $desc  = $this->buildDescription(); 

     $output = '<div class="'.$this->getOption('class').'">' 
       . $label 
       . $input 
       . $errors 
       . $desc 
       . '</div>'; 

     switch ($placement) { 
      case (self::PREPEND): 
       return $output . $separator . $content; 
      case (self::APPEND): 
      default: 
       return $content . $separator . $output; 
     } 
    } 
    /* ... */ 
} 

と要素の作成中:

$element->setDecorators(array(
    /* ... */ 
    array(array('div'=>'Composite'), array('class' => 'my_class_name')) 
    /* ... */ 
))); 

た場合をあなたは既存のデコレータを編集したくないだけです。それを拡張してrender()メソッドをオーバーライドしてください。

+0

+1すてきな答えです。私は分かりました:)私は 'getOptions 'とコンストラクタです。 – drew010

+0

ありがとう、通常私はちょうどzfを助けて、それはここでもっと静かです:) –

+0

偉大な - 魅力のように働いた!フォームの初期化中にaddPrefixPathを定義するだけで、すべてがうまくいきました。本当にありがとう。 – user1199981