2011-02-11 29 views
1

當我進入Drupal 7時,我突然對我認爲理解的事情感到困惑(或者不需要了解我在Druppal 5和6中花費了相當多的時間 -在Drupal 7中的節點之前生成頁面嗎?

我將在一個模塊上工作,在開發代碼的過程中,我會向dsm()和/或drupal_set_message()發出幾個調用。在我以前的工作中,這些調用總是以我的方式工作預計 - 在接下來的頁面提交中,dsm將運行,生成他們生成的任何內容,結果將在頁面上結束。在Drupal 7中,我正在做同樣的事情,但是我發現它們正在顯示一個頁面太晚了 - 我必須刷新頁面才能看到它們,這讓我認爲Drupal 7評估模型是選定的頁面模板得到評估,然後 - 然後 - 只有這樣 - 節點是di在頁面上展開得到加載和渲染。果然,用watchdog()和sleep()進行的一些測試證實了這一點 - 頁面模板在處理頁面內的節點之前明確開始處理。 (這是標準D7頁面模板只有非常微小變化的版本,並沒有時髦的內部D7行爲,順便說一句,我沒有做任何特別的緩存 - 所有緩存選項上的配置>開發>性能已關閉。)

這解釋了消息行爲 - 頁面模板在頁面呈現過程開始時放置它可用的任何消息,然後在節點上運行。如果在節點獲得渲染時生成了任何消息,則它們將繼續消息堆棧,但它們不會出現在此版本的頁面上,因爲消息堆棧已由頁面模板呈現(並清除)。但這似乎是錯誤的 - 我希望這些消息作爲頁面即時呈現的一部分出現。我也確定D6沒有這樣的行爲--dsm()消息會馬上出現。這不僅僅是一個調試問題;正是由於這個原因,它也搞亂了一些表單驗證代碼,其中驗證錯誤沒有出現在表單提交產生的​​頁面上。

或者我想,無論如何。我瘋了,還是被迷惑,還是別的什麼? D7有沒有改變,導致這種看似新的行爲,還是我只是困惑?非常感謝任何澄清可能在那裏......

回答

2

你究竟在哪裏添加你的dsm()調用?

的狀態消息中http://api.drupal.org/api/drupal/includes--theme.inc/function/template_process_page/7主題(在D6 template_preprocess_page)

其是步驟之後加入的所有郵件,那些在page.tpl.php中,例如,僅顯示下一個頁面上。不知道D5,但這在D6中完全一樣。

而且在菜單回調處理過程中發生的所有事情都應在之前執行並在同一頁面上顯示。

+0

例如,我可能會將dsm調用放入節點 - something.tpl.php中;在提交的頁面之後的頁面上顯示結果。無論如何,我只是重複了將看門狗語句放入node - something.tpl.php和page - something.tpl.php的測試,這次是在D6和D7站點上進行的。在D6中,節點模板在頁面模板之前運行;在D7中,頁面模板在節點模板之前運行。我檢查了我的template.php文件,並且我看不到任何會對這些東西產生任何影響的東西。更令人困惑的是...... – 2011-02-11 17:12:15