Як насправді встановити максимальну довжину для поля textarea у контактній формі


11

Мені потрібно обмежити повідомлення textarea форми контактної форми основного модуля певною кількістю символів.

Ось факти

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

  2. Модуль Maxlength не дозволяє фактично встановити максимальну довжину. Він отримує свою максимальну довжину від максимальної довжини поля, визначеної в розділі поля управління вмістом кожного типу вмісту

  3. Створення нового типу елемента форми за допомогою гачок_element_info, все ще не гарантує, що я можу додати текстові #maxlengthобласті. Крім того, якщо мені це вдасться, мені потрібно ще раз змінити модуль контактної форми, щоб замінити поле фактичного текстового повідомлення моїм.

Тож чи можу я змінити це просто і прямо?

Яка найкраща ідея змінити всі текстові поля на веб-сайті?

Відповіді:


6

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

Це не зовсім вірно .... HTML5 представив властивість maxlength для textareas, попередні версії цього не мають (див. Https://developer.mozilla.org/en-US/docs/Web/HTML/Element/textarea ).

Шаблони за замовчуванням, які постачаються з Drupal 7, використовують XHTML, тому відсутність явної підтримки HTML5 має ідеальний сенс.

Поки ваш doctype є 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,
);

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 ;
    }
  }
}

Це, здається, працює нормально.


Так само, як і в сторону, ви можете реалізувати гачку_форма_FORM_ID_alter і зберегти перевірку ідентифікатора форми, тобто: contact_form_form_contact_site_form_alter. Трохи в рот як назва функції, правда,
Альфред Армстронг

Це чудова ідея. У мене немає такої звички :-)
drupal_stuff_alter
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.