2015-11-06 43 views
0

當前當您複製頁面時,只複製頁面本身,而不復制頁面上的內容。因此,您可以在新頁面上獲得相同的portlet,配置爲顯示相同的內容,但內容本身只是對相同內容的引用。我們能否創建克隆頁面的能力?在6.2中,我們只能複製使用相同網頁內容的頁面,這在大多數情況下都會失敗。這個想法是能夠將具有相同內容的頁面複製到新的Web內容ID和新頁面。在Liferay中的版面(頁)深度複製

請參閱實際需求here。它是2015年Liferay的GSoc propsal。

+0

Stackoverflow是功能請求的錯誤位置 - 請改用https://issues.liferay.com。如果你想問如何克隆內容 - 已經有一個問題:[使用未引用的Web內容複製Liferay網頁](http://stackoverflow.com/questions/33116420/duplicating-a-liferay- web-page-with-non- -web-web-contents) –

+0

我從這裏得到了要求https://www.liferay.com/community/wiki//wiki/Proposals/Layout+%28Page%29%20Deep+Copy 。並在此處創建了一個問題https://issues.liferay.com/browse/LPS-60242。 – nasminspy

回答

2

Liferay通過UI提供的一切都是通過使用Liferay的API實現的。如果Liferay的「複製頁面」不符合你想要實現的內容,你可以自己實現 - 但是,請注意,Liferay可能對各種portlet的內容沒有深入的瞭解,因此深層複製將永遠不會完全一致:使用顯示客戶數據的portlet的功能 - 您是否想在複製頁面時複製該客戶?

由於這個原因,我同意目前的副本可能不會做期望複製網頁內容。但它唯一可以一貫實施的東西。其餘的對您的擴展開放。 Tobias Liefke在他的評論中發佈了輸入功能請求的指針。

+0

即使對於網頁內容,也很難決定在頁面中克隆哪些部分。例如,如果頁面上還有其他_teasers_ - 您在複製頁面時通常不想克隆。 –

+1

不要忘記圖像 - 嵌入在內容中或以其他方式顯示。 「深層複製」的概念是那些容易要求但難以用防彈的方式描述的概念之一。在doclib中顯示一個文件夾?複製它? –

+0

我開發了一個鉤子來克隆頁面(克隆網頁內容,圖像和元信息的佈局的深層副本)。該要求是2015年Liferay GSOC提案(https://www.liferay.com/community/wiki/-/wiki/Proposals/Layout+%28Page%29%20Deep+Copy)。我所做的是在複製頁面時複製Portlet的Web內容文章和元數據,並用新克隆的信息更新Portlet首選項。 – nasminspy

0

是,

我已經找到了解決方案,在您想要的網頁內容的副本,如果你改變克隆頁面上網頁內容顯示portlet中的內容不改變原來的頁面的網頁內容這種特殊的情況。

我都做到了通過分機,

創建一個分機插件,然後複製下面的文件,它包含了需要將網頁內容複製爲well.Deploy這個內線,再次克隆頁面的變化。您必須覆蓋包含克隆邏輯的「EditLayoutsAction.java」(包是com.liferay.portlet.layoutsadmin.action)文件。

在UpdateLayout請(ActionRequest裏,ActionResponse的)方法,找到下面的代碼下找到代碼

if (copyLayout != null) { 
       if (copyLayout.isTypePortlet()) { 
        ActionUtil.copyPreferences(
         actionRequest, layout, copyLayout); 

下面的代碼複製

long companyId = themeDisplay.getCompanyId(); 
        long ownerId = PortletKeys.PREFS_OWNER_ID_DEFAULT; 
        int ownerType = PortletKeys.PREFS_OWNER_TYPE_LAYOUT; 

        for (String portletId : portletllist) { 

         if(portletId.startsWith("56_INSTANCE")) 
         { 

          javax.portlet.PortletPreferences prefs = PortletPreferencesLocalServiceUtil.getPreferences(companyId, 
            ownerId, 
            ownerType, 
            copyLayout.getPlid(), 
            portletId); 

          String articleId = prefs.getValue("articleId", "1234"); 

          if(!(articleId.equalsIgnoreCase("1234"))){ 

          JournalArticle jArticle=JournalArticleServiceUtil.copyArticle(themeDisplay.getScopeGroupId(), articleId, "0", true, Double.parseDouble("1")); 


          javax.portlet.PortletPreferences newPrefs = PortletPreferencesLocalServiceUtil.getPreferences(companyId, 
            ownerId, 
            ownerType, 
            layout.getPlid(), 
            portletId); 

          newPrefs.setValue("articleId", jArticle.getArticleId()); 


          PortletPreferencesLocalServiceUtil.updatePreferences(ownerId, ownerType, layout.getPlid(), portletId , newPrefs); 

然後創建分機和部署,並按照同一個克隆的過程,但現在這它會生成文章的副本,以便克隆網站內容的更改不會反映到原始頁面。