2013-08-02 76 views
0

一些背景:我試圖在左側爲響應式網站創建滑動導航組件。我想在菜單中的所有項目旁邊包含一個使用design_dialog配置的圖像。Adob​​e CQ5全球組件

我正在CQ 5.6.1

我快到的問題,是我目前有「主頁」,「contentpage」和「contactpage」模板。所有3個都使用它們的相似命名組件進行渲染,這些組件是從基本「頁面」組件中派生的。

在這個頁面組件中,我有一個包含我的navpanel組件的body.jsp。一切工作正常,但在主頁上設置導航欄中的圖像時,它們不會在其他兩個上顯示。

我知道這樣做的原因是因爲navpanel設計的路徑是:/etc/designs/testsite/jcr:content/homepage/navpanel

body.jsp,當包括navpanel,我嘗試設置PATH變量在CQ:包括爲絕對路徑(即/etc/designs/testsite/jcr:content/navpanel)因爲根據API,它應該採取絕對路徑,而不是完全修改它。相反,當輸出currentStyle.getPath()時,它會繼續顯示第一個路徑(其中包含主頁)。

爲了實現我的目標,我需要能夠將此組件的設計路徑配置爲「全局」級別,而不是嵌套在模板設計中。

是否有改變此值的程序化方法?聽起來好像有一個錯誤,cq:include path不符合預期的行爲?

回答

0

cq:include並沒有作爲一個組件載入設計路徑(這聽起來像你正在嘗試做的)。

CQ:包括被要麼由包括靜態腳本(使用腳本屬性) 例如:

或組件(使用路徑和resourceType爲屬性) 例如:

currentStyle仍將取該組件的當前模板的designPath的樣式。

例如,當您將徽標(設計模式)切換到其他模板時,您會注意到geometrixx演示站點上的相同內容,然後轉到其他模板。舊徽標仍然會在使用其他模板的頁面上。這就是爲什麼建議在設計模式下儘可能少的做法,除非您打算將您的操作限制在您處於設計模式下的模板中。例如,限制可以在特定模板上使用的組件是設計模式的很大用處。

製作一個使用相同數據作爲數據源的「全局」組件並不是那麼簡單。在你的情況下,你可以嘗試通過將圖像保存/加載到存儲庫中的公共位置來解決此問題。也許你甚至可以實現一個服務來使這個「公共位置」可配置。或者你可以更進一步,並有服務負載/保存圖像。

+0

根據cq的CQ api:include: '資源對象被包含在當前請求處理中的路徑。如果這個路徑是相對的,它會被追加到當前腳本包含給定資源的資源的路徑上。' 這使我相信,如果我指定絕對路徑,我可以指定資源對象的位置。爲什麼這不實際工作? 我也完全相信全球可訪問的對象應該是可行的,並且需要更多關於如何做到這一點的信息,因爲'路徑'似乎沒有按預期工作。 –

+0

你要非常正確地提及絕對路徑是一種選擇,但據我所知,這對設計路徑不起作用。對於一個實際的資源,它應該工作正常。例如:會起作用。 – 3xil3

0

有點晚,但想分享我們如何製作組件全局(可授權組件)。

使用絕對路徑根本不起作用(好,差不多)。對於多頁共享全球組件,我們的工作路徑特性是這樣的:

比方說,我們有10頁共享菜單組件:

  1. 讓所有的人都從默認的頁面組件延伸出來。
  2. 只生成一個頁面(稱之爲myapp/components/pages/A)來擴展頁面,並有一個要包含的共享組件的相對路徑(即:<cq:include path="mysharedcomponent" resourceType="myapp/components/mysharedcomponent" />)。
  3. 使剩餘頁面擴展頁面並使用共享組件的絕對路徑(即:<cq:include path="/myapp/A/jcr:content/mysharedcomponent" resourceType="myapp/components/mysharedcomponent" />)。

這種方法可能是使用有下CQ全球組件的多個模板頁面之間共享,並在編輯模式下工作時也確實支持拖放&拖放功能:任意拖動子成共享組件,並獲得所有可用的組件頁面。