2017-06-11 40 views
-1

如何設置由programmatically.PFA圖像的文件夾,文件的根文件夾,媒體展示portlet的一個 enter image description here怎麼點DAM顯示portlet的根文件夾編程

+0

我有一個很好的指針,但會一直等到你採取行動http://meta.stackexchange.com/questions/141823/why-is-cross-posting-wrong-on-an-external-site –

回答

1

Liferay的主版本

你問題標記爲Liferay 6 and Liferay 7。這兩個版本有很大的不同。此答案假定您使用的是Liferay 6.x,因爲您詢問的是DDM portlet,而不是OSGI模塊。

編程設置,輸入資源默認爲您選擇的文件夾需要您在文檔庫展示 Portlet創建一個JavaServer頁面掛鉤的JSP。我將在詳細介紹之前簡要介紹如何創建JSP鉤子。


創建掛鉤

From Liferay's Knowledge base

從你的命令行終端,瀏覽到您的插件SDK的鉤子文件夾。要創建鉤子項目,您必須執行創建腳本。下面是執行該腳本遵循格式:

create.[sh|bat] [project-name] "[Hook Display Name]" 

在Linux和Mac OS X,你會進入一個類似於在這個例子中的命令:

./create.sh doc-lib-disp-hook "Document Library Display Hook" 

在Windows上,您需要輸入類似於此示例中的命令:

create.bat doc-lib-disp-hook "Document Library Display Hook" 

的Liferay IDE的新建項目嚮導和創建腳本生成插件SDK的鉤子鉤夾項目。插件SDK自動將「-hook」附加到您的項目名稱。

您需要安裝Apache ANT才能正常工作。如果您需要安裝它,請參考以下文檔。

一旦鉤創建開放在你的Liferay IDE或Liferay的開發者工作室(或者Eclipse)。

  1. 在IDE中點擊右下方文件(左上角)
  2. 從現有的源
  3. 雙擊該DOC-LIB-DISP鉤選擇Liferay的插件項目的向下箭頭文件夾在您的插件的SDK Hook目錄中打開。

您應該看到與此類似的內容(使用不同的名稱)。

enter image description here


覆蓋JSP

現在你已經成功創建了一個鉤插件,我們需要重寫必要的文件。有兩個特別的文件,我們需要爲這個鉤子

  • HTML /門戶/ document_library_display/configuration.jsp
  • HTML /門戶/ document_library/init.jsp

我們既需要文件從邏輯上遍歷這個例子,儘管我們只需要實際覆蓋其中的一個。

要覆蓋JSP的執行以下步驟

  1. 在您的META-INF文件夾中創建名爲custom_jsp
  2. 打開了Liferay的-hook.xml新目錄概述模式
  3. 單擊綠色加號(在定製JSP標籤的右側)
  4. 搜索上面列出的兩個文件(將URL複製並粘貼到窗口中),然後單擊保存。

您現在會注意到您具有以下目錄結構。

enter image description here

讓我們先打開configuration.jsp。這是生成您拍攝屏幕截圖的GUI的代碼。找到以下代碼塊。

 <aui:field-wrapper label="root-folder"> 
      <div class="input-append"> 
       <liferay-ui:input-resource id="rootFolderName" url="<%= rootFolderName %>" /> 

       <aui:button name="openFolderSelectorButton" value="select" /> 

       <% 
       String taglibRemoveFolder = "Liferay.Util.removeFolderSelection('rootFolderId', 'rootFolderName', '" + renderResponse.getNamespace() + "');"; 
       %> 

       <aui:button disabled="<%= rootFolderId <= 0 %>" name="removeFolderButton" onClick="<%= taglibRemoveFolder %>" value="remove" /> 
      </div> 
     </aui:field-wrapper> 

在該塊內部,您將看到您希望設置的根文件夾元素。

<liferay-ui:input-resource id="rootFolderName" url="<%= rootFolderName %>" /> 

正如你可以看到該文件夾​​的網址已經被默認設置爲可變rootFolderName。我們需要找到變量首先被初始化的位置。

我們根本不需要修改這個文件。我已經包含它並打開它,以便您可以按照邏輯進行操作。

如果您發現rootFolderName沒有在configuration.js P檔的任何地方進行初始化。因此,我們需要調查init.jsp文件,因爲它是包含在頁面頂部的文件。如果你打開這個文件,你會注意到下面的塊。

String portletResource = ParamUtil.getString(request, "portletResource"); 

if (layout.isTypeControlPanel()) { 
    portletPreferences = PortletPreferencesLocalServiceUtil.getPreferences(themeDisplay.getCompanyId(), scopeGroupId, PortletKeys.PREFS_OWNER_TYPE_GROUP, 0, PortletKeys.DOCUMENT_LIBRARY, null); 
} 

long rootFolderId = PrefsParamUtil.getLong(portletPreferences, request, "rootFolderId", DLFolderConstants.DEFAULT_PARENT_FOLDER_ID); 
String rootFolderName = StringPool.BLANK; 

if (rootFolderId != DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) { 
    try { 
     Folder rootFolder = DLAppLocalServiceUtil.getFolder(rootFolderId); 

     rootFolderName = rootFolder.getName(); 
    } 
    catch (NoSuchFolderException nsfe) { 
    } 
} 

這段代碼基本上是說我們要初始化rootFolderName爲空。但是,如果rootFolderId由

  1. Portlet首,或
  2. 請求設置高於0或者參數

然後我們會進行相應的設置rootFolderName。


結論

如果你想rootFolderName默認情況下,您可以在幾件事情編程設置爲您選擇的文件夾。最容易做的事情是獲得該文件夾的ID和修改這樣

long folderIdConstant = 999999L; // place folder id here 

long rootFolderId = PrefsParamUtil.getLong(portletPreferences, request, "rootFolderId", folderIdConstant); 

這將編程設置默認的根文件夾中的代碼。現在就構建並部署。

相關問題