Я пытаюсь изменить некоторую форму Drupal 6, кодируют и включают некоторую собственную проверку формы. Код похож на это, но проверка не работает. Я даже не вхожу в функцию thisFormName_form_validate. Какие-либо Drupalians имеют некоторые хорошие идеи?
function thisFormName_form_alter(&$form, $form_state, $form_id) {
$form['email_address'] = array(
'#type' => 'textfield',
'#title' => t('Enter your email address (optional)'),
'#default_value' => $object['email_address'],
'#weight' => 4,
'#size' => 60,
'#maxlength' => 128,
'#description' => t('Enter email address.'),
);
function thisFormName_form_validate($node, &$form) {
if ($form_state['values']['email_address'] == '')
{
form_set_error('', t('Email must be valid format if entered.'));
}
}
Поскольку вы используете средство изменения формы, вы не создаете форму самостоятельно, вы должны добавить обработчик проверки самостоятельно:
function myModule_form_alter(&$form, $form_state, $form_id) {
$form['email_address'] = array(
'#type' => 'textfield',
'#title' => t('Enter your email address (optional)'),
'#default_value' => $object['email_address'],
'#weight' => 4,
'#size' => 60,
'#maxlength' => 128,
'#description' => t('Enter email address.'),
);
$form['#validate'][] = 'my_validation_function';
}
function my_validation_function(&$form, &$form_state) {
if ($form_state['values']['email_address'] == '') {
form_set_error('', t('Email must be valid format if entered.'));
}
}
Drupal будет только по умолчанию использовать проверку, которая определена как имя_формы
+ _validate
. Это не так, поскольку вы используете hook_form_alter
.
РЕДАКТИРОВАТЬ: В основном тот же ответ, что и googletorps. Не заметил его, пока выкладывал мой. Оставляем его здесь для альтернативного объяснения, но он правильный и был первым (+1).
В названии вашей функции есть что-то подозрительное:
Как и все реализации хуков, ваша функция hook_form_alter
должна быть названа в честь вашего пользовательского модуля, а не формы (например, yourModule_form_alter
]), и в этом случае он сработает для всех форм .Если (как кажется) вы хотите подключиться только к определенной форме, используйте hook_form_FORM_ID_alter
, заменив 'hook' на имя вашего модуля, а 'FORM_ID' на id (имя) нужной формы. манипулировать.
Обратные вызовы функции проверки для формы перечислены как массив имен функций в $ form ['# validate']
. Это всего лишь удобный ярлык для форм, созданных вами , которые вам не нужно явно добавлять, но используйте функцию, названную в честь формы, добавив в конце '_validate'. В вашем случае вы изменяете форму, поступающую из другого модуля, поэтому вам нужно явно добавить функцию проверки.
Итак, ваш код должен выглядеть примерно так:
function yourModuleName_theFormID_form_alter(&$form, $form_state, $form_id) {
$form['email_address'] = array(
'#type' => 'textfield',
'#title' => t('Enter your email address (optional)'),
'#default_value' => $object['email_address'],
'#weight' => 4,
'#size' => 60,
'#maxlength' => 128,
'#description' => t('Enter email address.'),
);
// Add custom validation callback
$form['#validate'][] = 'yourModuleName_theFormID_validate';
function yourModuleName_theFormID_validate(&$form, &$form_state) {
if ($form_state['values']['email_address'] == '') {
form_set_error('', t('Email must be valid format if entered.'));
}
}