2009-10-16 149 views
0

我proting基於梨形到Zend的形式幾個問題。移植模板Zend框架

我有我需要的幾個要素:

  • 基本元素
  • 族元素
  • 我以前用過的模板上呈現梨的形式。我顯然不能使用預先存在的zend裝飾器,因爲我需要爲我的基礎元素的每個組件指定css類。 要見我需要使這個問題,這是一個基本元素的模板:

    <li class = "{position_in_the_form} {error}"> 
        <label class="{label_class}"> {label} 
        [<span class="required_class"> * </span>] 
        </label> 
        <div> {element_content} </div> 
        [<p class = "{error_class}"> {error_message} </p>] 
    </li> 
    

    所以你可以看到我有很多動態的東西,我希望能夠指定:位置的形式,標籤的類,所需部分的類,錯誤的類。 我也想能夠從一個ini文件中指定。我設法從ini設置基本元,但不是自定義字段。

    我不能使用基本裝飾器的原因之一是,當元素或子模型中存在錯誤時,我需要在「li」類中出現「錯誤」。我不確定這可能與錯誤裝飾...(糾正我,如果我錯了)

    此外,該組我需要的東西處理錯誤,並且由於核心組不處理錯誤,我需要繼承sub_form。但是,如何在ini文件中創建子表單,並且我不知道如何在ini中爲子表單提供參數。

    這裏的主要思想是能夠具有在形式元素的可視化和邏輯組。例如,我需要一個包含全名,中間名等的「名稱」組。這也意味着這個「名稱」組的全局驗證器。 的另一件事是,我希望能夠定位這些羣體:左前衛,右前衛,充滿 我的CSS爲此做好準備,並與梨的工作。

    所以我需要的是一個簡單的解決辦法,很少的代碼和INI配置。不幸的是,我想我陷入了太複雜的事情,所以如果有人對簡單的體系結構有任何想法,那就太棒了!

    預先感謝您的幫助, 最佳,鮑里斯

    回答

    0

    在你繁複的裝飾需求,你可能想使用ViewScript Zend_Form_Element_Decorator

    $element->setDecorators(array(
         array('ViewScript', array('viewScript' => 'path/to/your/views/element.phtml')), 
    )); 
    

    ,然後在path/to/your/views/element.phtml,更多的或類似的東西少

    <li class="<?php echo $this->element->getAttrib('position_in_the_form') ?> <?php echo $this->element->hasErrors() ? 'error' : '' ?>"> 
        <label class="<?php echo $this->element->getAttrib('label_class') ?>"> 
         <?php echo $this->formLabel($this->element->getName(), 
             $this->element->getLabel()) ?> 
        <? if ($this->element->isRequired()) { ?> 
         [<span class="required_class"> * </span>] 
        <? } ?> 
        </label> 
        <div> <?php echo $this->{$this->element->helper}(
         $this->element->getName(), 
         $this->element->getValue(), 
         $this->element->getAttribs() 
    ) ?> </div> 
        <? if ($this->element->hasErrors()) { ?> 
         [<p class="<?php echo $this->element->getAttrib('error_class') ?>"> <?php echo $this->formErrors($this->element->getMessages()) ?> </p>] 
        <? } ?> 
    </li> 
    

    這是只有一個drafty snippe t的代碼,但應該引導你在你的目標方向。

    Regards