如何在联系人表单中实际设置textarea字段的最大长度


11

我需要将核心模块联系表的textarea消息限制为一定数量的字符。

这是事实

  1. Form API不允许在textarea字段类型上设置最大长度[纯HTML却可以]

  2. MAXLENGTH模块,不允许你实际设置的最大长度。它从字段的最大长度中获得最大长度,该长度在每种内容类型的管理字段部分中定义

  3. 使用hook_element_info创建新的表单元素类型,仍然不能保证我可以将其添加#maxlength到textarea中。此外,如果我成功了,则需要再次更改联系表单模块,以使我的实际消息textarea字段无效。

所以我可以简单明了地更改它吗?

更改网站中所有textarea字段的最佳方法是什么?

Answers:


6

Form API不允许在textarea字段类型上设置最大长度[纯HTML可以]

严格来说,这不是真的。...HTML5为textareas引入了maxlength属性,以前的版本没有此属性(请参阅https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea)。

Drupal 7附带的默认模板都使用XHTML,因此缺少对HTML5的明确支持是很合理的。

只要您的文档类型 HTML5,它就可能会起作用:

$form['element'] = array(
  '#type' => 'textarea',
  '#attributes' => array('maxlength' => 200),
);

Clive我实际上找到了一个可行的解决方案,我在下面发布了它。感谢您的回答。
drupal_stuff_alter

6

您可以像这样使用Maxlength模块,将#maxlength和#maxlength_js属性都放在要控制的元素上。

$form['comments'] = array(
  '#type' => 'textarea',
  '#title' => t('Comments'),
  '#maxlength_js' => TRUE,
  '#maxlength' => 1000,
);

4

首先,我定义了一个设置表单,然后对钩子表单进行了更改:

function contact_form_form_alter(&$form, &$form_state, $form_id) {

  if ($form_id == 'contact_site_form') {
    $maximum_limit = (int) variable_get('contact_form_maxlength', 500);
    if($maximum_limit && is_numeric($maximum_limit)) {
    $form['message']['#title'] = $form['message']['#title'] . t(' (maximum @max characters)', array( '@max' => $maximum_limit));
    $form['message']['#maxlength'] = $maximum_limit ;
    }
  }
}

这似乎工作正常。


顺便说一句,您可以实现hook_form_FORM_ID_alter并保存表单ID检查,即:contact_form_form_form_contact_site_form_alter。顺便说一句,作为函数名称。
阿尔弗雷德·阿姆斯特朗

这是一个好主意。我没有这个习惯:-)
drupal_stuff_alter 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.