2011-02-09 150 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,我發現這個解決方案的一部分。