删除drupal 8中的默认消息

ris*_*318 3 drupal drupal-8

在Drupal 7中

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

我如何在drupal 8中实现这一点?请帮忙

Sta*_*pov 11

首先,在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.
}
Run Code Online (Sandbox Code Playgroud)

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

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;
       }
     }
   }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 对不起,如果它以某种方式伤害你.我删除了那句话.实际上,更改核心文件或贡献模块是一个真正的问题,我经常在完成项目之后面对其他人,我想指出它. (2认同)