Как на самом деле установить максимальную длину для поля textarea в контактной форме

11

Мне нужно ограничить текстовое сообщение в контактной форме основного модуля определенным количеством символов.

Вот факты

  1. API форм не позволяет устанавливать максимальную длину для типов полей текстовой области [в то время как обычный HTML это делает]

  2. Модуль Maxlength не позволяет вам установить максимальную длину. Он получает максимальную длину из максимальной длины поля, определенной в разделе управления каждым типом контента

  3. Создание нового типа элемента формы с использованием hook_element_info все еще не гарантирует, что я могу добавить #maxlengthтекстовую область. Кроме того, если мне это удастся, мне нужно снова изменить модуль контактной формы, чтобы переопределить фактическое поле текстовой области сообщения моим.

Так я могу изменить это просто и понятно?

Какова лучшая идея изменить все поля textarea на сайте?

drupal_stuff_alter
источник

Ответы:

6

API форм не позволяет устанавливать максимальную длину для типов полей текстовой области [в то время как обычный HTML делает это]

Это не совсем так ... HTML5 ввел свойство 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),
);
Клайв
источник
Клайв Я действительно нашел рабочее решение, я разместил его ниже. Спасибо за Ваш ответ.
drupal_stuff_alter
6

Вы можете использовать модуль Maxlength следующим образом, поместив свойства #maxlength и #maxlength_js в элементы, которыми вы хотите управлять.

$form['comments'] = array(
  '#type' => 'textarea',
  '#title' => t('Comments'),
  '#maxlength_js' => TRUE,
  '#maxlength' => 1000,
);
ThomasHuang025
источник
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 ;
    }
  }
}

Кажется, это работает нормально.

drupal_stuff_alter
источник
Помимо этого, вы можете реализовать hook_form_FORM_ID_alter и сохранить проверку идентификатора формы, т.е. contact_form_form_contact_site_form_alter. Похоже, что это название функции.
Альфред Армстронг
Это отличная идея. У меня нет этой привычки :-)
drupal_stuff_alter