Zend_Form özel düzeni için öncelikli unsur varsayılan

2 Cevap php

Ben şu anda Zend_Form yerine uzatacak basit bir özel katman oluşturmak için çalışıyorum. Örneğin, my_form.

Ben bu yüzden my_form bu kuruyorum bütün formlar aynı bakmak istiyorum. İşte bugüne kadar ne olduğunu.

class My_Form extends Zend_Form
{
    protected $_elementDecorators = array(
        'ViewHelper',
        'Errors',
        array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'value_cell')),
        array('Label', array('tag' => 'td')),
        array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
    );
}

Ve benim tüm formların bu uzatacaktır. Şimdi bu çalışıyor, sorun $ _elementDecorators dizi ile geliyor. Ben bir "td" in Etiket sarma yaşıyorum ve Etiket Dekoratör ki "td" varsayılan "id" uyguladığını, ancak ben de bu "td" için bir sınıf eklemek isteyen duyuyorum.

Bu dizi ile, bunu gerçekleştirmek için yine de var mı? Eğer değilse, bunu yapmak için daha iyi bir yolu var mı? Ya da eğer öyleyse, birisi bu dizi nasıl çalıştığını bana tarif eder misiniz?

İstenilen sonuç:

<tr>
    <td class='label_cell'>
        <label />
    </td>
    <td class='value_cell'>
        <input />
    </td>
</tr>

Teşekkür ederim.

2 Cevap

Emin değil iyi olmasına rağmen ben, bir çözüm bulduk.

Burada sadece bir özel dekoratör oluşturmak ve yerine bu kadar yük karar verdik.

/**
 * Overide the default, empty, array of element decorators.  
 * This allows us to apply the same look globally
 * 
 * @var array
 */
protected $_elementDecorators = array(
    'ViewHelper',
    'Errors',
    array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'value_cell')),
    array('CustomLabel', array('tag' => 'td')),
    array(array('row' => 'HtmlTag'), array('tag' => 'tr'))
);

/**
 * Prefix paths to use when creating elements
 * @var array
 */
protected $_elementPrefixPaths = array(
    'decorator' => array('My_Form_Decorator' => 'My/Form/Decorator/')
);

Dekoratör:

class My_Form_Decorator_CustomLabel extends Zend_Form_Decorator_Label
{
    public function render($content)
    {
        //...
        /**
         * Line 48 was added for the cutom class on the <td> that surrounds the label
         */
        if (null !== $tag) {
            require_once 'Zend/Form/Decorator/HtmlTag.php';
            $decorator = new Zend_Form_Decorator_HtmlTag();
            $decorator->setOptions(array('tag'   => $tag,
                                         'id'    => $this->getElement()->getName() . '-label',
                                         'class' => 'label_cell'));

            $label = $decorator->render($label);
        }
        //...
    }
}

Bu gayet güzel çalışıyor ancak bunu yapmak için basit bir yolu var ise, ben hala merak ediyorum.

Herhangi bir fikir?

Ben aynı sorunu ile uğraşırken kullanarak sona erdi hızlı kesmek:

class My_Form extends Zend_Form
{
    protected $_elementDecorators = array(
        'ViewHelper',
        'Errors',
        array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'value_cell')),
        array('Label', array('tag' => 'th')),
        array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
    );
}

Fark: `array ('Etiket', array ('tag' => 'th ')),

Yani "etiket" sütunu TH unsurları vardır, ve eleman sütun elemanları TD gelmiştir.

Dilerseniz ancak o zaman onları stil uygulayabilirsiniz.