Как изменить системные сообщения о статусе заполнения формы?

Главные вкладки

Аватар пользователя Altron Altron 30 ноября 2018 в 12:33

Здравствуйте, прикручиваю к форме регистрации ajax, для вывода сообщения об ошибках и подтверждения регистрации, вроде получается благодаря найденой статье https://niklan.net/blog/127, вопрос можно ли как то изменить выводимое сообщение в зависимости от статуса?

<?php

public function ajaxSubmitCallback(array &$formFormStateInterface $form_state) {
    
$ajax_response = new AjaxResponse();
    
$message = [
      
'#theme' => 'status_messages',
      
'#message_list' => drupal_get_messages(),
      
'#status_headings' => [
        
'status' => t('Status message'),
        
'error' => t('Error message'),
        
'warning' => t('Warning message'),
      ],
    ];
    
$messages = \Drupal::service('renderer')->render($message);
    
$ajax_response->addCommand(new HtmlCommand('#' Html::getClass($form['form_id']['#value']) . '-messages'$messages));
    return 
$ajax_response;
  }
?>

Лучший ответ

Комментарии

Аватар пользователя Altron Altron 3 декабря 2018 в 8:29

Считаю данный метод не жизнеспособный тут вроде не чего не исправить
я решил сделать немного иначе

<?php

function mymodule_form_alter(&$formFormStateInterface $form_state$form_id) {
  if (
$form_id == 'user_register_form') {
       
$form['actions']['submit']['#ajax'] = [
      
'callback' => 'mymodule_form_function',
      
'event' => 'click',
      
'progress' => [
        
'type' => 'throbber',
      ],
    ];
  }

function 

mymodule_form_function(&$formFormStateInterface $form_state$form_id) {
 
/* планируется ещё добавить валидацию */
  
$form['#submit'][] = 'ajax_login_form_form_submit';
}

function 

mymodule_form_submit(&$formFormStateInterface $form_state) {
  
$name $form_state->getValue('name');
  \
Drupal::messenger()
    ->
addMessage((t('Hello, @Name!', ['@Name=> $name]));
}

?>

но такой вариан не работает, можете подсказать, что делаю не так?

Аватар пользователя Orion76 Orion76 7 декабря 2018 в 7:02

Если Вы будите удалять ВСЕ сообщения.. то рискуете удалить что-нибудь нужное..
Возможно это не сразу проявится, а потом будите голову ломать: в чем же дело.

Если каким-то образом "выявлять" нужное сообщение (скорее всего только по тексту, т.е. по его "переводу"), опять не надежно - перевод может измениться и опять будите голову ломать..

Самый простой, и один из правильных, способ, если "не нужное" сообщение выводится только в одном месте, то просто изменить его "перевод" на "идеологически правильный".

Есть еще несколько способов "вмешаться" в вывод сообщения или в перевод. Но это для достаточно "крайних" случаев.

Аватар пользователя marassa marassa 7 декабря 2018 в 8:33

Присоединюсь к предыдущему оратору насчёт перевода и добавлю, что в восьмёрке специально введена возможность "переводить" с дефолтного языка на дефолтный же, то есть просто модифицировать системные сообщения для конкретного сайта под конкретные нужды.
На странице /admin/config/regional/language выбрать язык по умолчанию и поставить галку напротив "Включить перевод интерфейса на xxx". Потом вводить свои варианты сообщений как обычные переводы на /admin/config/regional/translate