Как изменить или удалить ошибку формы, вызванную Drupal или другим модулем на узле вставки / сохранения, для определенного типа контента. Я ищу метод, который я могу использовать в модуле.
Я пробовал hook_node_validate () , но все, что я мог сделать, это получить ошибки и установить ошибки.
Формы имеют функции проверки, указанные в $form['#validate']массиве. И элементы формы имеют функции, указанные в $form['element_key']['#element_validate'].
Вы можете указать свой собственный, как это:
/**
* Implements hook_form_FORM_ID_alter().
*/function mymodule_form_node_form_alter(&$form,&$form_state){
$form['title']['#element_validate'][]='mymodule_validate_node_title';}/**
* Validate the node title to prevent ALL CAPS.
*/function mymodule_validate_node_title($element,&$form_state, $form){if(preg_match('/^[A-Z]+$/', $element['#value'])){
form_error($element, t('You may not enter titles in ALL CAPS.'));}}
Отличный ответ! Как бы вы изменили текст ошибки - «Поле заголовка обязательно для заполнения». (как изображено в вопросе)? Это без использования переопределений строк.
timofey.com
Другими словами, я не хочу добавлять проверку, я просто хочу изменить сообщение об ошибке существующей проверки .... может быть, сбросить существующую проверку и добавить новую?
timofey.com
1
Существующая валидация не является функцией обратного вызова валидации; это только то, что поле "обязательно". Сочетание моих последних двух приведенных выше удалит существующее сообщение, а затем добавит еще один тип проверки.
pjcdawkins
Мне нужно изменить только сообщение проверки. Хотя я реализовал вышеупомянутое решение (от hook_form_alter). Я получаю два сообщения проверки. 1 одно по умолчанию и 2-е, что я написал. Любое предложение @pjcdawkins
инновационный кундан
6
Так как строка, используемая для этого сообщения об ошибке, является "! Name поле обязательно для заполнения". использование модуля переопределения строк или изменение строки, используемой в файле settings.php, приведет к изменению строки, используемой для каждого обязательного поля формы.
Если вы хотите изменить строку ошибки, отображаемую для заголовка, когда заголовок не был введен, вы можете:
Добавьте обработчик проверки формы в форму редактирования узла, используя hook_form_alter()
В этой форме обработчик проверки:
Проверьте содержимое $form['title'](где $formустановлено с помощью $form = &drupal_static('form_set_error', array());, и измените его на строку, которую вы хотите, когда это'Title field is required.'
Verify $_SESSION['messages']['error'](массив) содержит строку 'Title field is required.'и заменит ее на строку, которую вы хотите показать
Избежать показа ошибки проще: просто установите #requiredсвойство FALSE, и Drupal не будет отображать это сообщение об ошибке.
Спасибо. Возможно, не стоит использовать неподдерживаемый модуль, но его можно использовать как руководство!
timofey.com
1
Вы можете настроить сообщения об ошибках формы, используя проверку поля для каждого поля сущности.
Для этого отредактируйте настройки поля, перейдите в раздел «Проверка» и добавьте новое правило проверки ( обязательное поле ). Там у вас должно быть текстовое поле для настройки пользовательского сообщения об ошибке для этого поля.
Для Drupal 8 я смог добавить пользовательскую функцию проверки, которая может фактически проверять существующие ошибки и изменять разметку ошибок для каждого конкретного случая. В моем случае я хотел изменить сообщение об ошибке из поля entity_autocomplete, которое ссылалось на пользователей. Если был добавлен недопустимый пользователь, ошибка проверки показала: «Нет объектов, соответствующих% name». Вместо слова «сущности» я хотел, чтобы оно говорило «пользователи», чтобы быть менее пугающим и потенциально вводящим пользователей в заблуждение.
Во-первых, я использую hook_form_alter (), чтобы добавить мою функцию проверки:
/**
* Custom form validation handler that alters default validation.
* @param $form
* @param \Drupal\Core\Form\FormStateInterface $form_state
*/function my_module_custom_user_validate(&$form,FormStateInterface $form_state){// Check for any errors on the form_state
$errors = $form_state->getErrors();if($errors){foreach($errors as $error_key => $error_val){// Check to see if the error is related to the desired field:if(strpos($error_key,'the_entity_reference_field_machine_name')!== FALSE){// Check for the word 'entities', which I want to replaceif(strpos($error_val->getUntranslatedString(),'entities')== TRUE){// Get the original args to pass into the new message
$original_args = $error_val->getArguments();// Re-construct the error
$error_val->__construct("There are no users matching the name %value", $original_args);}}}}}
Так как строка, используемая для этого сообщения об ошибке, является "! Name поле обязательно для заполнения". использование модуля переопределения строк или изменение строки, используемой в файле settings.php, приведет к изменению строки, используемой для каждого обязательного поля формы.
Если вы хотите изменить строку ошибки, отображаемую для заголовка, когда заголовок не был введен, вы можете:
hook_form_alter()
В этой форме обработчик проверки:
$form['title']
(где$form
установлено с помощью$form = &drupal_static('form_set_error', array());
, и измените его на строку, которую вы хотите, когда это'Title field is required.'
$_SESSION['messages']['error']
(массив) содержит строку'Title field is required.'
и заменит ее на строку, которую вы хотите показатьИзбежать показа ошибки проще: просто установите
#required
свойствоFALSE
, и Drupal не будет отображать это сообщение об ошибке.источник
Для Drupal 7 вы можете скачать этот модуль http://drupal.org/node/1209450 в формате zip, он даст вам этот хук.
источник
Вы можете настроить сообщения об ошибках формы, используя проверку поля для каждого поля сущности.
Для этого отредактируйте настройки поля, перейдите в раздел «Проверка» и добавьте новое правило проверки ( обязательное поле ). Там у вас должно быть текстовое поле для настройки пользовательского сообщения об ошибке для этого поля.
источник
Для Drupal 8 я смог добавить пользовательскую функцию проверки, которая может фактически проверять существующие ошибки и изменять разметку ошибок для каждого конкретного случая. В моем случае я хотел изменить сообщение об ошибке из поля entity_autocomplete, которое ссылалось на пользователей. Если был добавлен недопустимый пользователь, ошибка проверки показала: «Нет объектов, соответствующих% name». Вместо слова «сущности» я хотел, чтобы оно говорило «пользователи», чтобы быть менее пугающим и потенциально вводящим пользователей в заблуждение.
Во-первых, я использую hook_form_alter (), чтобы добавить мою функцию проверки:
Затем в функции «my_module_custom_user_validate»:
Надеюсь это поможет!
источник