我在liferay 6.2網站上工作,我有一個web內容頁面,可以在其中添加文章和其他一些資源。我想創建一個功能,可以在彈出的動作中複製或移動到選定的目的地。我如何在liferay 6.2 web內容中添加操作
但我不知道如何將這些操作添加到我的liferay門戶。
我想有在當用戶點擊彈出的「操作」按鈕(紅圈)可用我的新的行動。
我在liferay 6.2網站上工作,我有一個web內容頁面,可以在其中添加文章和其他一些資源。我想創建一個功能,可以在彈出的動作中複製或移動到選定的目的地。我如何在liferay 6.2 web內容中添加操作
但我不知道如何將這些操作添加到我的liferay門戶。
我想有在當用戶點擊彈出的「操作」按鈕(紅圈)可用我的新的行動。
從你的命令行終端,瀏覽到您的插件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)。你應該看到類似的東西。
如果您發現上面我用這個詞雜誌在鉤插件的名稱。 Journal與Liferay中的網頁內容同義。通常,您會在用戶和管理員的書面材料中看到Web內容,並在開發者材料中使用日記。
你的問題相當大,它確實要求三個主要的東西。
問題#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,但是這次打開概覽。執行以下步驟
您應該看到創建的文件夾結構和目錄索引文件。如果您切換回來源視圖,您會注意到沒有生成新的xml。這就是配置的約定的工作原理。現在
,在你的WEB-INF文件夾中創建一個名爲HTML新的文件夾。在該文件夾內創建一個名爲view.jsp的新jsp。這將是你的鉤子目錄索引,它將是你的彈出窗口。你的結構應該看起來像這樣。
鉤子插件配置完成,所有剩下的就是編碼。在/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視角。
現在雙擊上的所有目標。
您還可以通過導航到你的鉤子文件夾中的系統資源管理器和運行
ant all
一旦完成後,只需啓動你的嵌入式的Tomcat(或servlet容器使用)在命令行中運行此。
我已經自定義掛鉤(如權限),我嘗試添加一個,將Web內容複製/移動到另一個站點或子站點。我有覆蓋liferay類CopyArticleAction(尚未修改)。但是當我點擊我的行動時,我到達了一個灰色的空白頁面。我的卡塔利娜日誌告訴我:轉發不存在。 我的鉤子已經存在並已被集成到我的項目中,但我的項目使用struts。我嘗試將新的JSP和Java類添加到文件「struts-config-ext.xml」和「tiles-def-ext.xml」中,但我仍然有一個灰色的空白頁面。 – Fred37b
從最初發布此版本或之後發佈版本起,您距離目標有多遠?這個問題似乎已經完全改變了,我不確定你需要什麼幫助。如果相信我也在Liferay論壇上偶然發現了你的問題。如果你需要一段非常具體的代碼的幫助,可以在SO上發佈另一篇文章,但是如果你只是需要幫助,一般都會對Liferay線索做出迴應,因爲它爲我們提供了一個更好的論壇來回傳遞 –