2009-08-20 78 views
1

目前,如果下面的代碼被執行:強制「drupal_set_message」消息立即顯示?

drupal_set_message("TEST"); 

只有當一個頁面刷新,將信息顯示在頁面上。

我目前處於ajax調用執行此方法的情況。因此,當前頁面不會改變。所以,我需要一種方法來包含在我的ajax調用中,在調用此方法之後,我必須立即顯示錯誤消息。

並且不,我不想通過將「error」div設置爲我想要的任何值來手動執行此操作。我使用的是消息效果,因此需要插入drupal的方式,以便將消息顯示爲Drupal。

有人嗎?

+0

我已經更新了我的答案,雖然你可能不喜歡你的追求結果。 – googletorp 2009-08-20 20:46:18

回答

1

我相信這是this question,你問過自己,或多或少重複,只是措辭有點更精確。我的答案仍然適用於這個答案。

基本上,沒有理由要經過所有的AJAX箍使用drupal_set_message,只會放慢改革的步伐。使用drupal_set_meesage不會讓messagefx模塊對插入的html作出反應,因爲它是從drupal_set_message生成的。在沒有任何ajax調用的情況下直接在javascript中生成和輸入html會更快更簡單,然後通過調用相關的js函數來添加fx。

編輯:

你所要求是不可能的,你不能讓Drupal能夠顯示來自drupal_set_message()與上飛的影響消息的原因有兩個:

  1. Drupal是用PHP編寫,因此使用PHP獲取新內容到頁面的唯一方法是重新加載頁面或加載一個新頁面。
  2. 通過運行一個簡單的JS是針對在頁面加載時,因此即使它可能得到的Drupal更新頁面已創建郵件,打印新郵件Messagefx功能,他們不會得到messagefx的影響。

你可以像我已經解釋的那樣完成你的目標,我可能稍微修改它以適應和優化你在這裏寫的內容。但是,如果不執行jQuery的append(),prepend()函數之類的操作,則無法獲得新消息。所以,我擔心你必須決定像我描述的那樣做,或者根本不這樣做。

另外你需要考慮的一件事是,無論你是通過js還是通過drupal製作/輸入html,對於最終結果都無關緊要:用html編寫的頁面。

+0

我想這樣做的原因如下:用戶將更改模塊中的設置,然後這些設置不會反映在我的代碼中。我希望將它全部集中並使其能夠使插件中的更改反映在頁面本身上。如果我只是簡單的JavaScript,那麼是的,沒有ajax會更快,但不幸的是,它不是。 – coderama 2009-08-20 17:29:45

+0

p.s.抱歉,重複,但一旦一個問題沒有答案,人們認爲它已經解決了。所以我想也許讓我的問題更準確可能會得到迴應。 – coderama 2009-08-20 17:30:31

+0

@RD。我的經驗是,編輯你的問題,使其更精確確實會帶來更多的讀者,而要求一個新的更精確但重複的問題往往會導致其中一個問題關閉。 – Shawn 2013-01-10 20:47:40

1
drupal_get_messages($type = NULL, $clear_queue = TRUE) 

除非我錯了,但是您必須設置錯誤div或以某種方式顯示它們。

編輯後評論:

OH!通常情況下,這些消息會在page.tpl.php的頁面加載中顯示,因此您必須手動將它們放在div中以便立即顯示。

你應該能夠調用的主題()在適當的PARAMS每一個路過觸發所有Drupal的鉤子,它會返回你放置到頁面正確的HTML。調用主題會像它們通常出現在頁面上那樣對它們進行格式化,就好像它們是從您的主題打印的一樣,儘管它們不會在page.tpl.php中進行任何額外的更改。

+0

認爲你誤解了。我有一個ajax調用,通過頁面a從頁面b調用drupals_set_messages。在頁面b被調用後,未改變。在頁面上,我需要某種類型的JAVASCRIPT調用,以在頁面a上顯示會話中的消息。那有意義嗎? – coderama 2009-08-20 15:41:49

+0

O ...我在那裏看到你只是告訴我讓他們。我知道。我可以得到它們。我只想通過調用INTERNAL DRUPAL FUNCTIONS將它們顯示在屏幕上來顯示它們。必須有drupal所做的一些事情來顯示屏幕上的錯誤消息。我的問題是什麼? – coderama 2009-08-20 15:43:07

+0

我編輯了我的帖子以解決註釋 – McAden 2009-08-20 15:54:08

1

我認爲問題的關鍵是視圖在預覽視圖或編輯組件時顯示消息的方式。這非常有用地允許您將dsm()語句添加到Views處理程序的代碼中,並查看與調試相關的輸出。

意見做這樣的:

if ($messages = theme('status_messages')) { 
    $display = '<div class="views-messages">' . $messages . '</div>'; 
} 

如果您打印在你的Ajax回調取決於你的代碼的特殊性。