Как я могу получить заголовок элемента формы в Drupal? - PullRequest
0 голосов
/ 06 июля 2010

Например, в форме регистрации есть «Имя пользователя» и текстовое поле для него, которое имеет тип ввода = «текст» имя = «имя» ....

Мне нужно знать, как я могу получить заголовок из имени поля ввода.

Я ожидаю такую ​​функцию, как:

$title = get_title_for_element('name');

Результат:

assert($title == 'Username'); // is true

Есть ли что-то подобное в Drupal?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 06 июля 2010

У вас есть форма и переменные состояния формы, доступные для вашей функции проверки.Вы должны использовать form_set_error () , чтобы установить ошибку.

Я не знаю ни одной функции, которая бы сопоставляла массив значений с массивом форм.Но это не сложно решить.Понимание структуры данных формы является одним из ключевых навыков, которые вам нужны при создании drupal.

В этом случае рассматриваемая форма генерируется (окольным путем) с помощью user_edit_form , вы можете увидеть структуру данных там.$form['account']['name'] - это поле имени пользователя.и ключ массива для заголовка '#title', как это будет в большинстве случаев для элементов формы.

0 голосов
/ 06 июля 2010

Вы можете сделать это двумя разными способами, как я вижу.Давайте создадим модуль с именем mycustomvalidation.module (не забудьте также создать файл mycustomvalidation.info ).

Примечание: Код ниже имеетне был проверен, поэтому вам, возможно, придется внести некоторые незначительные корректировки.Кстати, это код Drupal 6.x.

1) Использование hook_user()

Вам нужен пользовательский модуль, содержащий собственную реализацию hook_user() http://api.drupal.org/api/function/hook_user/6.

<?php
function mycustomvalidation_user($op, &$edit, &$account, $category = NULL) {
  if ($op == 'validate') {
    // Checking for an empty 'profile_fullname' field here, but you should adjust it to your needs.
    if ($edit['profile_fullname'] != '') {
      form_set_error('profile_fullname', t("Field 'Fullname' must not be empty."));
    }
  }
}
?>

2) Используя form_alter() и пользовательскую функцию проверки

Лично я бы выбрал эту опцию, потому что я считаю ее более чистой и более "правильной".Мы добавляем пользовательскую функцию проверки в поле нашего профиля здесь.

<?php
function mycustomvalidation_form_alter(&$form, $form_state, $form_id) {
  // Check if we are loading 'user_register' or 'user_edit' forms.
  if ($form_id == 'user_register' || $form_id == 'user_edit') {
    // Add a custom validation function to the element.
    $form['User information']['profile_fullname']['#element_validate'] = array('mycustomvalidation_profile_fullname_validate');
  }
}

function mycustomvalidation_profile_fullname_validate($field) {
  // Checking for an empty 'profile_fullname' field here, but you should adjust it to your needs.
  if ($field['#value'] != '') {
    form_set_error('profile_fullname', t("Field %title must not be empty.", array('%title' => $field['#title']));
  }
}
?>
...