2017-06-13 47 views
0

我在liferay 6.2網站上工作,我有一個web內容頁面,可以在其中添加文章和其他一些資源。我想創建一個功能,可以在彈出的動作中複製或移動到選定的目的地。我如何在liferay 6.2 web內容中添加操作

但我不知道如何將這些操作添加到我的liferay門戶。

enter image description here

我想有在當用戶點擊彈出的「操作」按鈕(紅圈)可用我的新的行動。

回答

2

創建掛鉤

From Liferay's Knowledge base

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

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

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

./create.sh journal-hook "Journal Hook" 

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

create.bat journal-hook "Journal Hook" 

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

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

一旦鉤創建開放在你的Liferay IDE或Liferay的開發者工作室(或者Eclipse)。你應該看到類似的東西。

enter image description here


雜誌Java服務器頁面(JSP)掛鉤

如果您發現上面我用這個詞雜誌在鉤插件的名稱。 Journal與Liferay中的網頁內容同義。通常,您會在用戶和管理員的書面材料中看到Web內容,並在開發者材料中使用日記。

你的問題相當大,它確實要求三個主要的東西。

  1. 我們如何創建一個鉤子
  2. 什麼網頁我重寫
  3. 如何在圖標菜單中添加一個附加動作
  4. 如何創建,當我選擇生成一個彈出窗口,我新菜單選項

問題#1已被回答。問題#2是不是從您的文章明確清楚,但我會假設你正在談論的雜誌內容門戶

有幾件事情需要注意的view.jsp的。 View.jsp是Liferay的目錄索引頁面 (類似於Apache的index.html)。 Liferay的「核心」功能實際上是(大部分) 數十個JSR-286和JSR-186 portlet。

問題三最後是我們開始編碼的地方。在您的META-INF文件夾下創建一個名爲jsp的目錄(這是我們按照約定放置JSP覆蓋文件的位置)。導航到liferay-hook.xml文件,清除任何現有內容,然後粘貼以下xml。

的Liferay-hook.xml

<hook> 
    <custom-jsp-dir>/META-INF/jsp</custom-jsp-dir> 
</hook> 

如果你在Liferay的開發工作室確保您在 標籤而不是在概述標籤。

此文件夾現在將包含您希望覆蓋的每個jsp文件。在這個例子中,我們只會覆蓋一個文件。這個目錄遵循一個特定的慣例而不是配置,你希望覆蓋的任何jsp文件都必須存在於這個目錄中,並且存在於它在門戶本身中的相同位置。

對於我們的特定示例,Journal內容Portlet的目錄索引文件存在於以下目錄中。

META-INF/ 
     jsp/ 
     html/ 
      portlet/ 
      journal_content/ 
       + view.jsp 

您不需要自己創建整個結構。您只能創建您的jsp文件夾。創建該文件夾後,再次打開liferay-hook.xml,但是這次打開概覽。執行以下步驟

  1. 單擊Custom jsps標籤旁邊的綠色加號。
  2. 搜索/ html/portlet/journal_content/view。JSP
  3. 什麼應該是唯一的項目雙擊搜索返回
  4. 按Ctrl + S保存

enter image description here

您應該看到創建的文件夾結構和目錄索引文件。如果您切換回來源視圖,您會注意到沒有生成新的xml。這就是配置的約定的工作原理。現在

enter image description here

,在你的WEB-INF文件夾中創建一個名爲HTML新的文件夾。在該文件夾內創建一個名爲view.jsp的新jsp。這將是你的鉤子目錄索引,它將是你的彈出窗口。你的結構應該看起來像這樣。

enter image description here

鉤子插件配置完成,所有剩下的就是編碼。在/html/view.jsp中輸入一些樣板代碼。

<%@ taglib uri="http://liferay.com/tld/ui" prefix="liferay-ui" %> 
<%@ taglib uri="http://liferay.com/tld/aui" prefix="aui"%> 
<%@ taglib uri="http://liferay.com/tld/util" prefix="liferay-util"%> 

<liferay-ui:panel collapsible="false" title="Custom Option"> 
    <aui:form name="fm" onSubmit="event.preventDefault();"> 
     <aui:input name="name" label="Name"></aui:input> 
     <aui:button-row> 
      <aui:button type="cancel" onClick="closeWindow('journalWindow');"></aui:button> 
      <aui:button type="submit"></aui:button> 
     </aui:button-row> 
    </aui:form> 
</liferay-ui:panel> 

我們只是創建一個簡單的表單,它不會嚴格執行任何操作。如您所見,有一個

closeWindow(string) 

函數,我們將在其他頁面上定義。現在,打開../journal_content/view.jsp頁面。正下方

<%@ include file="/html/portlet/journal_content/init.jsp" %> 

添加以下代碼

<liferay-portlet:renderURL var="customActionURL" windowState="<%=LiferayWindowState.POP_UP.toString()%>"> 
    <portlet:param name="mvcPath" value="/html/view.jsp" /> 
</liferay-portlet:renderURL> 

<aui:script use="aui-base, liferay-util-window, aui-io-plugin-deprecated"> 
    var A = AUI(); 
    A.one('#<portlet:namespace/>customAction').on('click', function(event){ 
    var custom_popup= Liferay.Util.Window.getWindow({ 
     dialog: { 
      centered: true, 
      constrain2view: true, 
      modal: true, 
      resizable: false, 
      width: 475 
     } 
    }).plug(A.Plugin.DialogIframe, { 
     autoLoad: true, 
     iframeCssClass: 'dialog-iframe', 
     uri:'<%=customActionURL.toString()%>' 
    }).render(); 

    login_popup.show(); 
    login_popup.titleNode.html("Custom Action"); 
}); 


Liferay.provide(window, 'closeWindow', function(id) { 
    var dialog = Liferay.Util.getWindow(id); 
    dialog.destroy(); 
}, ['aui-base','aui-dialog','aui-dialog-iframe']); 
</aui:script> 

代碼是非常自我解釋,但我會給出一個簡要的概述。前幾行我們創建了一個url到我們的view.jsp頁面。我們給它一個變量名customActionURL稍後referernced,指定它是一個彈出窗口(所以它不顯示在窗口內的門戶網站主題的標題,我們發送mvcPath參數用了目的地。

<liferay-portlet:renderURL var="customActionURL" windowState="<%=LiferayWindowState.POP_UP.toString()%>"> 
    <portlet:param name="mvcPath" value="/html/view.jsp" /> 
</liferay-portlet:renderURL> 

然後,我們創建一個事件偵聽我們尚未創建customAction圖標,當點擊它會推出一個新的彈出窗口與我們的renderURL目的地。最後,我們創造出關閉彈出AA closeWindow功能。

最後,我們需要在列表中實際添加新的圖標項目。找到以下代碼片段。

<div class="lfr-icon-actions"> 
    <c:if test="<%= showEditArticleIcon %>"> 
     <liferay-portlet:renderURL portletName="<%= PortletKeys.JOURNAL %>" var="editURL" windowState="<%= WindowState.MAXIMIZED.toString() %>"> 
      <portlet:param name="struts_action" value="/journal/edit_article" /> 
      <portlet:param name="redirect" value="<%= currentURL %>" /> 
      <portlet:param name="groupId" value="<%= String.valueOf(latestArticle.getGroupId()) %>" /> 
      <portlet:param name="folderId" value="<%= String.valueOf(latestArticle.getFolderId()) %>" /> 
      <portlet:param name="articleId" value="<%= latestArticle.getArticleId() %>" /> 
      <portlet:param name="version" value="<%= String.valueOf(latestArticle.getVersion()) %>" /> 
     </liferay-portlet:renderURL> 

     <liferay-ui:icon 
      cssClass="lfr-icon-action lfr-icon-action-edit" 
      image="edit" 
      label="<%= true %>" 
      message="edit" 
      url="<%= editURL %>" 
     /> 
    </c:if> 

直接在此代碼下寫下以下內容。

<liferay-ui:icon iconCssClass="icon-link" message="Custom Action" id="customAction" /> 

如果父窗口被重定向,你可能需要添加下列屬性

<liferay-ui:icon iconCssClass="icon-link" message="Custom Action" id="customAction" url="event.preventDefault()" /> 

編譯和運行

構建和部署掛鉤是一個輕鬆的過程。這個方向不能確切,因爲它們依賴於你的應用服務器。

這些說明也取決於您的構建工具。 Liferay支持ANT,IVY,Maven和Gradle。我假設你正在使用ANT。

在你的IDE裏面找到你的hook的build.xml文件。這是你的ANT構建腳本。只需將該文件拖放到您的ANT視角。

enter image description here

現在雙擊上的所有目標。

您還可以通過導航到你的鉤子文件夾中的系統資源管理器和運行

ant all 

一旦完成後,只需啓動你的嵌入式的Tomcat(或servlet容器使用)在命令行中運行此。

希望這對我有所幫助。請讓我知道任何問題,意見,關切等,我也非常感謝您的反饋!

+0

我已經自定義掛鉤(如權限),我嘗試添加一個,將Web內容複製/移動到另一個站點或子站點。我有覆蓋liferay類CopyArticleAction(尚未修改)。但是當我點擊我的行動時,我到達了一個灰色的空白頁面。我的卡塔利娜日誌告訴我:轉發不存在。 我的鉤子已經存在並已被集成到我的項目中,但我的項目使用struts。我嘗試將新的JSP和Java類添加到文件「struts-config-ext.xml」和「tiles-def-ext.xml」中,但我仍然有一個灰色的空白頁面。 – Fred37b

+0

從最初發布此版本或之後發佈版本起,您距離目標有多遠?這個問題似乎已經完全改變了,我不確定你需要什麼幫助。如果相信我也在Liferay論壇上偶然發現了你的問題。如果你需要一段非常具體的代碼的幫助,可以在SO上發佈另一篇文章,但是如果你只是需要幫助,一般都會對Liferay線索做出迴應,因爲它爲我們提供了一個更好的論壇來回傳遞 –