Здравствуйте, прикручиваю к форме регистрации ajax, для вывода сообщения об ошибках и подтверждения регистрации, вроде получается благодаря найденой статье https://niklan.net/blog/127, вопрос можно ли как то изменить выводимое сообщение в зависимости от статуса?
<?php
public function ajaxSubmitCallback(array &$form, FormStateInterface $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;
}
?>
Комментарии
Считаю данный метод не жизнеспособный тут вроде не чего не исправить
я решил сделать немного иначе
<?php function mymodule_form_alter(&$form, FormStateInterface $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(&$form, FormStateInterface $form_state, $form_id) {/* планируется ещё добавить валидацию */
$form['#submit'][] = 'ajax_login_form_form_submit';
}
function
mymodule_form_submit(&$form, FormStateInterface $form_state) {$name = $form_state->getValue('name');
\Drupal::messenger()
->addMessage((t('Hello, @Name!', ['@Name' => $name]));
} ?>
но такой вариан не работает, можете подсказать, что делаю не так?
Изменить нельзя, можно только удалить из вывода, а затем вывести свои
тут все необходимые методы https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Messenger...
Если Вы будите удалять ВСЕ сообщения.. то рискуете удалить что-нибудь нужное..
Возможно это не сразу проявится, а потом будите голову ломать: в чем же дело.
Если каким-то образом "выявлять" нужное сообщение (скорее всего только по тексту, т.е. по его "переводу"), опять не надежно - перевод может измениться и опять будите голову ломать..
Самый простой, и один из правильных, способ, если "не нужное" сообщение выводится только в одном месте, то просто изменить его "перевод" на "идеологически правильный".
Есть еще несколько способов "вмешаться" в вывод сообщения или в перевод. Но это для достаточно "крайних" случаев.
Присоединюсь к предыдущему оратору насчёт перевода и добавлю, что в восьмёрке специально введена возможность "переводить" с дефолтного языка на дефолтный же, то есть просто модифицировать системные сообщения для конкретного сайта под конкретные нужды.
На странице /admin/config/regional/language выбрать язык по умолчанию и поставить галку напротив "Включить перевод интерфейса на xxx". Потом вводить свои варианты сообщений как обычные переводы на /admin/config/regional/translate