2012-12-20 53 views
1

背景:
我正在構建一個網站,該網站使用webform從用戶收集信息,使用收集的值計算一些結果,然後使用從列表中選擇建議解決方案的結果(或者抱怨程序無法從提供的參數提供答案)。

當用戶點擊提交時,通過hook_webform_submission_presave()完成計算,並將計算結果存儲在$ _SESSION數組的元素中(一個容量數字,用負值編碼爲「無法提供答案「上面提到的情況)以及如果有解決方案的話,建議使用型號。在webform提交發生後,Drupal將鏈接到一個新的(標準內容頁面),它(我本來打算的)將被hook_page_alter()更改。所以,現在到這個問題:

我已經計劃讓hook_page_alter去尋找簡單內容頁面(字符串xxxxxx)的元素,並替換該字符串頁面實際上應該包含的內容(無論是請注意選擇的解決方案,或者要求用戶再次嘗試或通過電子郵件或其他方式與我們聯繫的錯誤消息)。

問題:
hook_page_alter()接收到一個巨大的數組$ page來操作。我正在操作的部分是$ page ['content],但即使在這種情況下,我的觸發字符串('xxxxxx')也會頻繁出現(21次,當我轉儲$ page ['content'] ['system_main '] [' 節點] [$ NID])。

更有趣的是(對我來說),如果我用下面的代碼替換字符串'yyyyyy'爲'xxxxxx'(是的,它很醜,但是在深夜,而且我已經完整調試模式在這裏:

經歷DPR的輸出()和看實際獲取呈現什麼是有趣的 - 由小代換,XXXXXX的出現的次數被減少到11,以及(更有趣!)我發現有8次出現yyyyyy。不幸的是,頁面呈現不受我替換的影響 - xxxxxx仍然存在。

W我感興趣的是找到$ page數組元素中的哪一個是被渲染的 - 我想明天就會通過消除(我會找到它的時候會發布)來解決這個問題。你有什麼提示嚮導?

另外,還有更多「drupal-esque」的方式,我應該看着做這件事嗎?

第二個問題是更多的學術興趣 - 我是如何改變這部分$ page數組中的一個元素的: $ xx-> body ['und'] [0] ['value'] = $ Z Z; 得到複製到我發現它的其他7個地方? 見解?註釋 ? (有禮貌,請 - 我一直在使用Drupal工作了約6個月,但已經比這長得多編寫軟件)提前

感謝,

德里克

+0

主要問題解決了......呈現給頁面的內容在這裏: $ page ['content'] ['system_main'] ['nodes'] [5] ['body'] [0] [ '#markup'] –

回答

0

要回答你的問題在標題中,它本身就是$pagehook_page_alter有一個參數,該參數是第一級的區域數組。 因此,如果您將參數命名爲$ page,則$page['content']是內容區域(不要與此內容相混淆)。其他元素也是內容。

如果沒有看到完整的hook_page_alter函數,很難分辨出確切的問題。

作爲一個方面說明,我會建議不要使用這個鉤子這種情況。對我而言,聽起來應該有更好的(並且在服務器資源使用方面更便宜)解決方案。 Webform是又一個Drupal表單,所以hook_form_alter的東西在這裏適用。 您可以將額外的提交處理程序添加到現有的webform甚至菜單註冊表中的新頁面(保留一些路徑或使用通配符的一組路徑),因此實際上不需要爲您的案例IMO使用hook_page_alter。注意:this podcast from LullaBot guys

相關問題