开发者

Alter messages in Drupal 7

开发者 https://www.devze.com 2023-02-09 16:54 出处:网络
There is a couple of messages in drupal. When there is a php warning, an error message is raised, but a module can also raise messages with drupal_set_message(). The question is: Is there a way to alt

There is a couple of messages in drupal. When there is a php warning, an error message is raised, but a module can also raise messages with drupal_set_message(). The question is: Is there a way to alter these开发者_运维技巧 messages? For example to replace every 'a' with 'b' in every message.

Thanks!


While there is no message alter on set, you can change them on display via hook_preprocess_status_messages, see http://api.drupal.org/api/drupal/includes--theme.inc/function/theme/7 on preprocess and http://api.drupal.org/api/drupal/includes--theme.inc/function/theme_status_messages/7 .

Edit: also you can try string overrides check http://api.drupal.org/api/drupal/includes--bootstrap.inc/function/t/7 , in short $conf['locale_custom_strings_en']['some message'] = 'some messbge'; for English, change _en for something else if it's not English.


String overrides is the best solution, BUT

  • if the thing you are trying to override in the message is a variable OR
  • you are wanting to replace a string in all messages

then string overrides can not help you and here is a solution.

hook_preprocess_status_messages() passes in $variables but the messages are not in $variables, change them in $_SESSION['messages'].

/**
 * Implements hook_preprocess_status_messages()
 */
function MYMODULE_preprocess_status_messages(&$variables) {
  if (isset($_SESSION['messages']['warning'])) {
    foreach ($_SESSION['messages']['warning'] as $key => $msg) {
      if (strpos($msg, 'some text in the message') !== FALSE) {
        $_SESSION['messages']['warning'][$key] = t(
          'Your new message with a <a href="@link">link</a>.',
          array('@link' => url('admin/something'))
        );
      }
    }
  }
}

Credit to Parvind Sharma where I found part of this solution.


The String Overrides module doesn't let you replace A with B in strings, but it lets you replace entire strings (drupal 6 and 7) http://drupal.org/project/stringoverrides

However, if you'd prefer to use your own code snippet this is how i've done it.

in mymodule.install

function mymodule_update_7001() {
$custom_strings = array(
    ''=>array(//context is blank
        'Old string' => '', //blanking the string hides it
        'Another old string.' => 'New String'
    )
);

variable_set("locale_custom_strings_en",$custom_strings);   //note, this is only for english language
}

Then just run update.php for the change to kick in

0

精彩评论

暂无评论...
验证码 换一张
取 消