删除drupal 8中的默认消息

时间:2016-08-05 11:24:07

标签: drupal drupal-8

在Drupal 7中

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

如何在drupal 8中实现这一目标? 请帮忙

3 个答案:

答案 0 :(得分:10)

首先,在Drupal 8中,消息存储在与以前相同的$_SESSION['messages']变量中。但是,直接使用它并不是一个好方法,因为存在drupal_set_messagedrupal_get_messages函数,您可以自由使用它们。

然后,使用status-messages主题显示状态消息。这意味着您可以为它编写预处理函数并在那里进行更改:

function mymodule_preprocess_status_messages(&$variables) {
  $status_messages = $variables['message_list']['status'];
  // Search for your message in $status_messages array and remove it.
}

然而,与Drupal 7的主要区别在于,现在状态消息并不总是字符串,它们可能是Markup类的对象。它们是字符串的包装器,可以使用魔术方法__toString强制转换为底层 string。这意味着它们可以与字符串进行比较:

function mymodule_preprocess_status_messages(&$variables) {
  if(isset($variables['message_list']['status'])){
   $status_messages = $variables['message_list']['status'];

   foreach($status_messages as $delta => $message) {
     if ($message instanceof \Drupal\Component\Render\MarkupInterface) {
       if ((string) $message == (string) t("Searched text")) {
         unset($status_messages[$delta]);
         break;
       }
     }
   }
  }
}

答案 1 :(得分:0)

在阅读the related change record时,我发现了\Drupal::messenger()->deleteAll()。我希望这对某人有用。更新:您不应该这样做,因为它也会删除所有后续消息。相反,请执行unset(['_symfony_flashes']['status'][0])

答案 2 :(得分:-3)

您可以通过多种方式解决问题。

第一种方式:

您可以对核心用户模块进行微小更改。 继续:

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

在该文件中,您可以更改行:

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

注意:这是最简单的方法,但在这种情况下,您将编辑Drupal核心模块,这通常是不好的做法。在进一步开发中,您可能会遇到诸如更新时覆盖更改等问题。

第二种方式:

您可以使用模块禁用最终用户消息。 Disable message模块可以提供您需要的选项。在模块配置中,您可以使用文本框过滤掉显示给最终用户的消息。

enter image description here

第三种方式:

Drupal 8中的消息存储在会话变量中,并通过$ messages主题变量显示在页面模板中。如果要在调用之前修改传递给模板的变量,则应使用预处理功能。在这种情况下,您可以在会话变量中搜索字符串,并在显示之前提醒/删除它。

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]);
        }
      }
    }
  }
}

(注意:未经测试的代码,谨防拼写错误)

希望这有帮助!