Удалить сообщение по умолчанию в drupal 8

Удалить сообщение по умолчанию в drupal 8

05.08.2016 02:24:07 Просмотров 64 Источник

В Drupal 7

if ($_SESSION['messages']['status'][0] == t('Registration successful. You are now logged in.')) {
    unset($_SESSION['messages']['status']);
  }

Как я могу достичь этого в drupal 8? Пожалуйста помочь

У вопроса есть решение - Посмотреть?

Ответы - Удалить сообщение по умолчанию в drupal 8 / Remove default message in drupal 8

Darko

05.08.2016 10:03:41

Вы можете решить свою проблему более чем одним способом.

Первый способ:

Вы можете внести незначительные изменения в основной пользовательский модуль. Продолжать:

\core\modules\user\src\RegisterForm.php

В этом файле у вас есть строка, которую вы можете изменить:

drupal_set_message($this->t('Registration successful. You are now logged in.'));

Примечание: это самый простой способ, но в этом случае вы будете редактировать основной модуль Drupal, и это, как правило, плохая практика. В дальнейшем развитии у вас могут возникнуть проблемы, такие как перезапись изменений при обновлении.

Второй метод:

Вы можете отключить сообщение конечного пользователя с помощью модуля. Отключить модуль сообщений есть опция, которая вам нужна. В конфигурации модуля у вас есть текстовое поле, где вы можете отфильтровать сообщения, показанные конечным пользователям.

enter image description here

Третий путь:

Сообщения в Drupal 8 хранятся в переменной сеанса и отображаются в шаблоне страницы с помощью переменной темы $messages. Если вы хотите изменить переменные, которые передаются в шаблон перед его вызовом, вы должны использовать функцию preprocess. В вашем случае здесь вы можете просто найти строку в переменной сеанса и предупредить / удалить ее до ее отображения.

function yourmodule_preprocess_status_messages(&$variables) {

  $message = 'Registration successful. You are now logged in.';
  if (isset($_SESSION['messages'])) {
    foreach ($_SESSION['messages'] as $type => $messages) {
      if ($type == 'status') {
        $key = array_search($message, $messages);
        if ($key !== FALSE) {
          unset($_SESSION['messages'][$type][$key]);
        }
      }
    }
  }
}

(Примечание:непроверенный код, остерегайтесь опечаток)

Надеюсь, это поможет!

https://stackoverflow.com/questions/38788080/remove-default-message-in-drupal-8/38796186#comment64968938_38796186
Да, это плохая практика. Я добавлю примечание в ответ.
Является ответом!
Stanislav Agapov

05.08.2016 11:46:14

Прежде всего, в Drupal 8 сообщения хранятся в той же $_SESSION['messages'], что и раньше. Однако использование его напрямую не является хорошим способом, так как существуют drupal_set_messageи drupal_get_messages, которые вы можете свободно использовать.

Затем сообщения о состоянии отображаются с помощью status-messages

Основное отличие Drupal 7, однако, заключается в том, что теперь сообщения о состоянии не всегда являются строками, они могут быть объектами function mymodule_preprocess_status_messages(&$variables) { $status_messages = $variables['message_list']['status']; // Search for your message in $status_messages array and remove it. } с помощью магического метода Markup. Это означает, что их можно сравнивать со строками и как строки:

string
https://stackoverflow.com/questions/38788080/remove-default-message-in-drupal-8/38797543#comment64966366_38797543
Ну, это хорошее объяснение, но нет никакой необходимости в сарказме. Никто не будет изменять файлы ядра Drupal, чтобы удалить ваше сообщение здесь, этот сайт написан на C#. Вопрос в том, как удалить сообщение Drupal по умолчанию, которое означает, что он хочет сделать то, что он спросил, а не то, что вы думаете, что он должен сделать. Предложения могут быть даны на более вежливый способ. Это мое предложение для вашего дальнейшего вклада ;)
https://stackoverflow.com/questions/38788080/remove-default-message-in-drupal-8/38797543#comment64966758_38797543
Прости, если это причиняет тебе боль. Я убрал это предложение. На самом деле, изменение основных файлов или модулей contrib-это реальная проблема, с которой я часто сталкиваюсь, когда заканчиваю проекты после кого-то другого, и я хотел бы указать на нее.
https://stackoverflow.com/questions/38788080/remove-default-message-in-drupal-8/38797543#comment64967033_38797543
Все в порядке. Нет нужды извиняться. Это плохая практика, чтобы изменить основные файлы Drupal, и это отличная заметка, но когда вы указываете, что действительно нет необходимости в сарказме. Ура и не отставайте от хорошей работы ;)
Tolga Ozses

04.10.2019 12:33:13

Прочитав соответствующую запись изменений, я обнаружил \Drupal::messenger()->deleteAll(). Надеюсь, это кому-то пригодится. Обновление: вы не должны этого делать, так как он удаляет все последующие сообщения, а также. Вместо этого сделайте unset(['_symfony_flashes']['status'][0]).

Закрыть X