Zend Framework / Form Elements: Создать собственный класс или? - PullRequest
0 голосов
/ 04 августа 2010

результат, который я хочу, - это текстовое поле, которое перехватывает до WMD (редактор уценки). и включает div.wmd-preview элемент. то, что у меня сейчас есть в моих формах (расширение Zend_Form) ... я добавляю функциональность через декораторы

// init()
$this->addElement('textarea', 'bio', array(
    'label' => 'Bio',
    'description' => '<a href="http://daringfireball.net/projects/markdown/syntax" target="_blank" title="get markdown editing/syntax help">Markdown enabled</a>',
    'validators' => array(
        array('StringLength', false, array(0, 1000))
    ),
    'decorators' => array(
        'ViewHelper',
        'Errors',
        array('Description', array('tag' => 'p', 'escape' => false)),
        'Label',
        array('HtmlTag', array('tag' => 'p')),
        new Application_Form_Decorator_WmdPreview,
     )
));
...
// add WMD & Prettify
$bootstrap = Zend_Controller_Front::getInstance()->getParam('bootstrap');
$view = $bootstrap->getResource('view');
$view->headScript()->prependFile($view->baseUrl("/js/wmd/wmd.js"))
                   ->prependScript('wmd_options = {"output": "Markdown"};')
                   ->prependFile($view->baseUrl("/js/prettify/prettify.js"));
$view->headLink()->prependStylesheet($view->baseUrl('/js/prettify/prettify.css'));
}

но если я хочу, чтобы большинство textareas были включены с поддержкой wmd, я думаю, что было бы лучше инкапсулировать все это в отдельный класс? или какой-то элемент упаковки? в любом случае, будет лучше, если я смогу сделать что-то вроде

$this->addElement(new Application_Form_Element_WmdEditor); 

или что-то похожее

Если ответом является создание пользовательского Zend_Form_Element, как мне это сделать? просто создать пользовательский помощник вида, который содержит всю эту разметку? Что, если я хочу, чтобы другие декораторы, такие как ошибки и описание, помещались между текстовой областью и предварительным просмотром?

1 Ответ

1 голос
/ 04 августа 2010

Создайте новый класс элемента формы, расширяющий Zend_Form_Element_TextArea:

final class Application_Form_Element_WmdEditor extends Zend_Form_Element_TextArea {
    public $helper = 'WMDEditor';
}

А потом, как вы говорите, помощник вида:

final class Application_View_Helper_WMDEditor extends Zend_View_Helper_FormElement {

     public function WMDEditor($name, $value = null, $attribs = null) {
        //set it up here
     }
}

Таким образом, у вас также есть все преимущества стандартных помощников элементов формы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...