Создать крючок
Из базы знаний 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 и сценарии создания генерируют проекты ловушек в папке крючков SDK вашего плагина. Plugins SDK автоматически добавляет «-hook» к имени вашего проекта.
Для этого вам потребуется установить Apache ANT. Пожалуйста, обратитесь к следующей документации, если вам нужно установить его.
После создания хука откройте его в Liferay IDE или Liferay Developers Studio (или Eclipse). Вы должны увидеть что-то похожее на это.
Хук журнала JavaServer Page (JSP)
Если вы заметили выше, я использовал слово journal в названии подключаемого модуля. Журнал является синонимом веб-контента в Liferay. Как правило, вы увидите веб-контент, используемый в письменных материалах для пользователей и администраторов, и журнал, используемый в материалах для разработчиков.
Ваш вопрос довольно большой, и он действительно задает три основных вопроса.
- Как мы создаем крючок
- Какую страницу переопределить
- Как добавить дополнительное действие в это меню значков
- Как создать всплывающее окно, которое появляется, когда я выбираю новый пункт меню
Ответ на вопрос №1 уже дан. Вопрос № 2 явно не ясен из вашего поста, однако я предполагаю, что вы говорите о view.jsp портлета Journal Content
Несколько замечаний. View.jsp — это индексная страница каталога Liferay (похожая на index.html Apache). «Основная» функциональность Liferay на самом деле (по большей части) состоит из десятков портлетов JSR-286 и JSR-186.
Наконец, третий вопрос — это то, с чего мы начинаем кодировать. В папке META-INF создайте каталог с именем jsp (здесь мы помещаем файлы переопределения JSP по соглашению). Перейдите к файлу liferay-hook.xml, очистите все существующее содержимое и вставьте следующий XML.
liferay-hook.xml
<hook>
<custom-jsp-dir>/META-INF/jsp</custom-jsp-dir>
</hook>
Если вы находитесь в Liferay Developer Studio, убедитесь, что вы находитесь на вкладке источник, а не на вкладке Обзор.
Теперь в этой папке будут храниться все файлы jsp, которые вы хотите переопределить. В этом примере мы будем переопределять только один файл. Этот каталог соответствует определенному соглашению о конфигурации, в соответствии с которым любой файл jsp, который вы хотите переопределить, должен находиться внутри этого каталога в том же относительном месте, что и на самом портале.
В нашем конкретном примере индексный файл каталога портлета «Содержимое журнала» находится в следующем каталоге.
META-INF/
jsp/
html/
portlet/
journal_content/
+ view.jsp
Вам не нужно создавать всю конструкцию самостоятельно. Вы должны создать только папку jsp. После создания этой папки снова откройте файл liferay-hook.xml, но на этот раз откройте его в разделе Обзор. Выполните следующие шаги
- Щелкните зеленый знак «плюс» рядом с меткой Custom jsps.
- Найдите файл /html/portlet/journal_content/view.jsp.
- Дважды щелкните по тому, что должно быть единственным элементом, возвращаемым в результате поиска.
- Ctrl + S, чтобы сохранить
Вы должны увидеть созданную структуру папок и индексный файл каталога. Если вы вернетесь к представлению исходный код, вы заметите, что новый xml не был сгенерирован. Вот как работает соглашение о конфигурации.
Теперь в папке WEB-INF создайте новую папку с именем html. Внутри этой папки создайте новый jsp с именем view.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, чтобы ссылаться на нее позже, указываем, что это всплывающее окно (чтобы оно не отображало заголовок темы портала внутри окна, и мы отправляем параметр mvcPath без адресата.
<liferay-portlet:renderURL var="customActionURL" windowState="<%=LiferayWindowState.POP_UP.toString()%>">
<portlet:param name="mvcPath" value="/html/view.jsp" />
</liferay-portlet:renderURL>
Затем мы создаем прослушиватель событий для нашего еще не созданного значка customAction. При нажатии на него откроется новое всплывающее окно с нашим пунктом назначения renderURL. Наконец, мы создаем функцию 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 найдите файл build.xml вашего хука. Это ваш скрипт сборки ANT. Просто перетащите этот файл в перспективу ANT.
Теперь дважды щелкните все цели.
Вы также можете запустить это в командной строке, перейдя в папку с крючками в системном проводнике и запустив
ant all
После завершения просто запустите встроенный Tomcat (или какой контейнер сервлетов вы используете).
Надеюсь, это помогло. Пожалуйста, дайте мне знать любые вопросы, комментарии, проблемы и т.д. Я также был бы очень признателен за обратную связь!
person
Chris Maggiulli
schedule
13.06.2017