Спеціальна перевірка форми?


30

Мені потрібно додати спеціальну перевірку до форми, скажімо, додайте форму статті.

Я очікував, що щось подібне hook_FORM_ID_validate()впорається, але не можу знайти нічого релевантного в документації API.

Який спосіб додати спеціальну перевірку до форми?

Відповіді:


57

Ви можете додати будь-яку кількість функцій перевірки до будь-якої форми hook_form_FORM_ID_alter()так:

function mymodule_form_article_node_form_alter(&$form, &$form_state, $form_id) {
  // There will already be some validate handlers added so you need to add to the
  // array rather than overwrite it.
  $form['#validate'][] = 'mymodule_article_form_validate';

  // As mentioned above you can add as many as you want
  $form['#validate'][] = 'mymodule_article_form_validate_2';
}

function mymodule_article_form_validate($form, &$form_state) {
  // Random example, if the title is 'test' throw an error
  if ($form_state['values']['title'] == 'test') {
    form_set_error('title', 'Title cannot be "test"');
  }
}

Припустимо, я додав перевірку власної форми до форми, яка вже має 2 функції перевірки. Тоді яким є перше перевагу в drupal 7?
Гуру

Який колись є першим у масиві @Guru
Clive

Якщо форма є user_registration_form, вона завжди зберігає "[#validate] => Array ([0] => user_account_form_validate [1] => user_validate_picture)". Припустимо, я збираюся додати спеціальну перевірку. Тоді він повинен бути таким "[#validate] => Масив ([0] => user_account_form_validate [1] => user_validate_picture [2] => user_register_validate)". Але я хочу спочатку запустити функцію "user_register_validate".
Гуру

Для інших полів ви повинні використовувати:if ($form_state['values']['field_custom']['und'][0]['value'] == 'Error') { //throw error }
Chris Happy

як встановити перевірку розміру, розширення таким чином? І ще одне питання, чи є такі функції ajax, як "завантаження" та "видалення", як ми обробляємо перевірку для цього?
стенія

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