2013-01-11 61 views
3

是否有可能以編程方式創建一個具有起始時間一段時間在未來CQ5頁面的新版本?如何以編程方式創建CQ5頁面的新版本?

舉個例子,假設我們有一個顯示稅率的頁面。我們有一個組件允許作者上傳新的費率表(以css文件的形式),並創建費率頁面內容。我們希望允許作者上傳將於下個月開始生效的費率。

我知道JCR支持節點的多個版本,但其不清楚如何(或者是否)這涉及到CQ5網頁版本。此外,未來是否可以激活新版本。

+2

我假設你的意思是csv,而不是css文件? – shsteimer

回答

0

我沒有親自試過,但是...

我認爲你可以使用PageManager中服務的createRevision方法,然後如果沒有拋出異常返回時,你可以調用page.getContentResource.adaptTo( Node.class),並從那裏獲取返回的節點並編輯您的稅率組件的JCR屬性。

PageManager

0

你可以寫一個workflow包括由一個日曆日期的到來引發了出版的一步。具有新稅率的頁面版本以草稿形式保留在工作流程管道中,並且僅在日期到達時才發佈/激活。 (所以你需要某種形式的過程中,一旦醒來,每天檢查的日曆。)

1

鑑於如你所描述他們的要求,我可能會完成任務的方式略有不同...

而不是頁面的JCR中直接存儲我的速度表信息:內容節點(或子節點的的),我可能抽象出來,以在資源庫中的其他地方。然後,如果您願意,可以創建某種管理界面,以允許內容作者上傳他們的新費率的csv文件,並根據需要將其提取到存儲庫中。或者,假設數據來自某種數據庫,您可能只需編寫一個作業,通過使用來自CQ的JDBC連接以某種排定的方式自動注入它。一旦數據存儲在存儲庫中,您就可以編寫顯示組件來從存儲庫讀取數據,而不是直接在頁面內部讀取數據。

這一機制是可重複使用的數據中CQ在多個頁面,多個網站,甚至有許多不同的顯示格式,如果需要的話要顯示的優勢。另外,您可以設計您的jcr結構以支持您對數據更新(包括每日,每月,每週,每年等)的任何要求,顯然這取決於具體要求。

這樣做的缺點是,由於數據和顯示的頁面之間存在分離,所以您可能需要找到一種方法,以確保只要數據有效就能正確清除緩存更改。

更新(根據您的評論):

我用版本的頁面預見的問題,並授予我沒試過,所以也許它會工作,是有永遠只能是一個在活動版本一次。因此,一旦下個月的數據上傳,您需要同時維護舊數據(活動)和新數據(尚未活動)。如果您在該窗口期間需要單獨更改內容,那麼會發生什麼......從業務流程的角度來看,這對我來說似乎很混亂。

返回緩存明確的問題,如果您知道受影響的網頁,特別是如果他們都在一個子樹,你可以寫一個使用複製服務,以清除緩存爲受影響的網頁自定義工作流過程,然後設置一個啓動程序在節點上運行wf以更改數據。

另一個選項,這個在我的腦海中沒有定義,所以一些實驗需要使用後來激活的CQ,並且關閉後面的功能。

也許爲費率數據創建一個特定的模板,隱含的要求是一次只有一個使用該模板的頁面處於活動狀態。您的顯示組件可以使用查詢來查找當前活動的費率數據。

+0

這是我們目前實施的。我們完全擔心緩存。看來我們應該能夠更好地利用cq5/sling/jcr提供的功能。 – hsfear

0

每次頁面被修改時,cq創建頁面的一個版本。 修改頁面的修改時間在頁面的jcr:lastModified屬性中設置。 可以通過操作此屬性來保存將來的日期並激活該日期的頁面,儘管它不是首選的方式。 您可以將未來日期作爲屬性存儲在頁面中。 稍後根據@David建議,您可以創建一個工作流程或一個計劃作業,用於激活未來日期的頁面。