2011-02-09 65 views
3

drupal中有几条消息。当出现php警告时,会引发错误消息,但模块也可以使用drupal_set_message()引发消息。问题是:有没有办法改变这些消息?例如在每条消息中用'b'替换每个'a'。修改Drupal 7中的消息

谢谢!

回答

7

虽然对一套没有消息改变,你可以通过显示屏更改hook_preprocess_status_messages他们,看到http://api.drupal.org/api/drupal/includes--theme.inc/function/theme/7的预处理和http://api.drupal.org/api/drupal/includes--theme.inc/function/theme_status_messages/7

编辑:你也可以尝试字符串覆盖检查http://api.drupal.org/api/drupal/includes--bootstrap.inc/function/t/7,简而言之$conf['locale_custom_strings_en']['some message'] = 'some messbge';为英语,改变_en为别的东西,如果它不是英文。

+1

这并没有解决我的问题。使用这些钩子只能提供几乎空的数组。我的问题是什么? – luksak 2012-11-05 22:58:23

0

的字符串覆盖模块不会让你为B的字符串替换A,但它可以让你更换整个字符串(Drupal的6和7) http://drupal.org/project/stringoverrides

不过,如果您更愿意使用自己的代码片段,这是我已经做到了。

在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 
} 

然后只需运行update.php的变化

0

String overrides踢是最好的解决办法,但

  • 如果一件事情你正在尝试在消息中覆盖是一个变量或
  • 你想要替换所有消息中的字符串

然后字符串覆盖不能帮助你,这里是一个解决方案。

hook_preprocess_status_messages()传递$变量,但消息不在$变量中,请在$ _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')) 
     ); 
     } 
    } 
    } 
} 

感谢Parvind Sharma,我发现这个解决方案的一部分。