2009-12-18 68 views
4

這個問題是一個普遍的問題,我已經發布了它的一個版本here。不過,我希望,在這個論壇上提問,我會有更好的機會獲得迴應,並且會對更多人有用。「上下文」在drupal頁面

將所有內容加載到drupal頁面時將內容關聯在一起是棘手的業務。在drupal中,每個頁面,無論網站,基本上都是一樣的:中間的主要內容(一個視圖,一個節點或多個節點)以及圍繞該中心內容的塊。爲了讓這些模塊知道中間是什麼,(更少意識到對方),您必須在自己的自定義模塊中做一些非常奇特的步法,或者您必須在URL中提供「參數」。

我一直在研究spaces/context/features/purl套件由developmentseed提供的模塊,而且我也看了成伯爵邁爾斯(誰寫的意見的傢伙)所做的Panels/Ctools模塊。儘管兩者都提供了使工作更輕鬆的工具,但我的理解是,如果我想要我的「上下文」定義的塊的內容,我仍然需要在URL中放置「參數」(我在一般情況下使用該參數意義,而不是以上下文模塊或Ctools中的上下文概念的特定意義)。

我錯過了什麼,或者是我們在Drupal的地方?

最後,我應該說最後,我知道其他模塊,在有限的,個案的基礎上幫助這種事情。例如,Views attach模塊和Node reference views模塊每個都會針對特定用例解決此問題。它們都是很好的模塊,還有其他類似的模塊,但我一般很想找到解決這個問題的方法。

+0

如果你想討論/對話不是真正的答案,問題多,你應該讓你的問題變成一個社會的維基。 – googletorp 2009-12-18 15:30:33

+0

@googletorp 我只是把它做成了一個維基 - 感謝您的建議! – ldweeks 2009-12-18 15:44:08

回答

7

我想我真的不明白你想做什麼,但我會盡力盡管如此:

爲每個非靜態的網站,不論是基於Drupal的或其他任何東西,也有提供兩個基本的東西用於決定在給定請求時要交付什麼內容的「上下文」。

第一件也是最重要的事情顯然是請求本身。這是唯一的信息,總是保證在那裏。在大多數情況下,這只是一個GET請求,並且對於這些請求,URL隱含地是可用的「上下文」的主要來源。除了URL之外,POST請求還可以提供更多的「上下文」,但是對於你的問題,人們可能會爭辯說它們只是GET請求的一個更復雜的變體,除了URL之外還提供了更多的「參數」大多數情況下,可以將POST請求變成GET請求,並帶有更詳細的URL)。

第二個'上下文提供'的東西是會話。無論機制會話處理是基於什麼(現在主要是cookies),目標總是相同的,即在固有無狀態請求的邊界上攜帶一些「狀態」信息。它通過將一個給定的請求與以前請求中存儲在服務器端的信息綁定來實現此目的。這允許「豐富」可用於決定請求的內容的信息。基本上,我們可以把它看作是向請求添加更多「參數」的一種方式。

就是這樣。組裝響應所需的任何其他信息需要以某種方式從請求中提供的信息中派生出來(可以說會話處理已經是這樣做的主要過程,通過基於cookie或其他標識符添加「上下文」與請求一起來)。

Drupal很好地反映了這個過程,恕我直言,因爲它首先爲基於URL的響應組裝'主要'內容,並在會話中附加了附加信息(例如關於用戶)。只有後的主要內容得到了通過調用的index.php $return = menu_execute_active_handler()組裝,即一個應答的其他元素被添加(例如塊,菜單等),通過調用theme('page', $return);

因此,無論'上下文'是你想'傳遞'給那些其他元素,你必須從已經用於組裝主要內容(URL,會話)的信息中'重新提取',或者你有在主要背景生成期間臨時存儲它。你可以用很多方法來做到這一點,例如通過將其添加到已存儲在會話的信息,通過使用靜態緩存某些功能中,通過設置全局變量(不)所以,再通過傳遞東西,通過數據庫,等等

,我似乎並不瞭解你的目標。這裏你錯過了什麼?從亨裏克但我

+1

@亨利克 感謝您花時間提供深思熟慮的回覆。你完全理解我的目標。我遇到了我的問題,因爲我正在使用Drupal構建一個網站,但這個問題與Drupal本質上沒有任何關係。相反,我在Web開發中遇到了一個古老的問題:如何在無狀態的環境中維護狀態。因此,你已經回答了我的問題,因爲你已經幫助我理解我的所有選擇。基本上,我可以使用請求本身(即URL)或會話。此外,臨時存儲是可能的,但要小心...... – ldweeks 2009-12-18 15:42:30

5

回答得好想補充一點,可以有相當多的信息與cookies維護狀態旁邊的請求。認爲重要的HTTP頭像accept或language,甚至是X-REQUESTED-WITH。大多數webframeworks將這些信息包裝成一個方便的數據結構。不幸的是,從給出的答案我必須得出結論,Drupal沒有。