如何在magento中限制管理表单中的字符数

Muk*_*esh 3 magento magento-1.7

我在Form.php中有以下代码

$fieldset->addField('desc', 'textarea', array(
          'label'     => Mage::helper('module')->__('Description'),
          'required'  => true,       
          'name'      => 'desc',
      ));
Run Code Online (Sandbox Code Playgroud)

如何限制此文本区域中的字符数?

Mar*_*ius 10

从理论上讲,您应该可以通过向textarea添加maxlength属性来实现这一点.
所以你应该得到这样的东西:

<textarea maxlength="50"></textarea>
Run Code Online (Sandbox Code Playgroud)

但是Magento不允许这个maxlength属性.
如果你看一下这个Varien_Data_Form_Element_Textarea类(负责渲染textareas的那个),你会看到这个方法.

public function getHtmlAttributes()
{
    return array('title', 'class', 'style', 'onclick', 'onchange', 'rows', 'cols', 'readonly', 'disabled', 'onkeyup', 'tabindex');
}  
Run Code Online (Sandbox Code Playgroud)

这些是您在创建元素时可以指定的唯一选项.

第一个选项是扩展此类并maxlength在允许的属性中添加,然后您的列可能如下所示:

$fieldset->addField('desc', 'textarea', array(
      'label'     => Mage::helper('module')->__('Description'),
      'required'  => true,       
      'name'      => 'desc',
      'maxlength' => 50
));
Run Code Online (Sandbox Code Playgroud)

第二个选项是通过一些javascript添加它.

   $fieldset->addField('desc', 'textarea', array(
      'label'     => Mage::helper('module')->__('Description'),
      'required'  => true,       
      'name'      => 'desc',
      'after_element_html' => '<script type="text/javascript">Event.observe(window, "load", function() {$("id_of_textarea_here").setAttribute("maxlength", 50)})</script>'
  ));
Run Code Online (Sandbox Code Playgroud)

第三种选择是在一些限制文本长度的代码之上插入而不是javascript.
你可以在这里找到一个例子.

最后注意:
内容after_element_html将显示在元素后面的表单中.所以你基本上可以放任何东西.