如何让Zend Decorator允许默认值?

时间:2010-07-29 08:00:53

标签: zend-framework zend-form

我想要一个基本的:

<input type="text" />

我想在用户输入值(kinda like this)时清除默认值。如果在Blur上返回默认值,那将是理想的。

希望保留默认值,如果他们离开并点击提交。

我正在使用Zend生成表单,并想象我的解决方案可以完全适合Zend表单装饰器。

我找不到任何现有的,所以我问:

你有说装饰者吗?或者有什么东西可以帮我制作一个?

2 个答案:

答案 0 :(得分:1)

只需使用相应的jQuery插件:defaultvalue

答案 1 :(得分:0)

好的,我已经构建了一个装饰器,允许我实现发布的jquery plugin Ololo。 它检查元素是否具有Label集,如果是,则默认为:

require_once 'Zend/Form/Decorator/Abstract.php';

class Application_Form_Decorator_DefaultEnabledInput extends Zend_Form_Decorator_Abstract
{
    private $attribs = array();
    public function render($content)
    {
        $element = $this->getElement();

        if(get_class($element) != 'Zend_Form_Element_Text') throw new Exception("Application_Form_Decorator_DefaultEnabledInput only works on text fields");

        $element->setAttrib('type', 'text');
        $element->setAttrib('name', htmlspecialchars($element->getName()));
        $element->setAttrib('value', htmlspecialchars($element->getValue()));

        $attribs = '';
        $default = $element->getLabel();
        if($default)
        {
            $element->setAttrib('rel', $default);
            $element->setAttrib('title', $default);
            $class = $element->getAttrib('class');
            $element->setAttrib('class', "$class hasDefault");
            $default = "";
        }
        foreach($element->getAttribs() as $key => $val) $attribs .= "$key='$val' ";
        return "<input $attribs/>";
    }
}

它允许我在表单对象中定义一个默认值(使用setLabel)。

    $element = $this->createElement('text', 'suburb');
    $element->setDecorators(array('DefaultEnabledInput'));
    $element->setLabel('enter suburb here');
    $this->addElement($element); 

然后我需要做的就是确保页面上包含查询和插件,以及这段代码:

$(document).ready(function() {
    // default values
    $('.hasDefault').each(function(){
        $(this).defaultValue();
    });
});

然后在模板中,我可以像这样显示对象:

<?= $this->form->getElement('suburb') ?>