2010-07-29 65 views
0

我想一个基本的:如何让Zend Decorator允许默认值?

<input type="text" /> 

而且我想的默认值来清除,当用户把一个值(kinda like this)。如果默认值返回onBlur,那将是理想的。

不要想要提交默认值,如果他们离开它,然后点击提交。

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

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

你所说的设计师吗?或者有什么能帮助我做出一个?

+0

就像@Oloolo说的那样,用jquery来说明。 而且,为了防止存储默认值,请在控制器中检查它,或者为此写一个自定义验证器。 – 2010-07-29 15:15:16

回答

0

好吧,我已经建立了一个装饰,让我实现jquerypluginOlolo公布。 它检查以查看是否元件具有标签集,以及如果这样做,默认为:

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') ?> 
1

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

+0

chrome抱怨说这个页面是恶意软件... – 2010-08-02 01:36:10

+0

它以后工作得很好 - 肯定是一个糟糕的广告或一些东西 – 2010-08-03 02:16:15