Как добавить действие в веб-контент liferay 6.2

Я работаю над веб-сайтом liferay 6.2, у меня есть страница с веб-контентом, на которую я могу добавлять статьи и некоторые другие ресурсы. Я хочу создать функцию, которая доступна во всплывающем окне для копирования или перемещения в выбранное место назначения.

Но я не знаю, как добавить эти действия на мой портал liferay.

введите здесь описание изображения

Я хочу, чтобы мои новые действия были доступны во всплывающем окне, когда пользователь нажимает кнопку «Действие» (обведено красным).


person Fred37b    schedule 13.06.2017    source источник


Ответы (1)


Создать крючок

Из базы знаний 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. Какую страницу переопределить
  3. Как добавить дополнительное действие в это меню значков
  4. Как создать всплывающее окно, которое появляется, когда я выбираю новый пункт меню

Ответ на вопрос №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, но на этот раз откройте его в разделе Обзор. Выполните следующие шаги

  1. Щелкните зеленый знак «плюс» рядом с меткой Custom jsps.
  2. Найдите файл /html/portlet/journal_content/view.jsp.
  3. Дважды щелкните по тому, что должно быть единственным элементом, возвращаемым в результате поиска.
  4. 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
comment
У меня уже есть пользовательский хук (например, разрешения), и я пытаюсь добавить его, чтобы дублировать/переместить веб-контент на другой сайт или дочерний сайт. Я переопределил класс Liferay CopyArticleAction (пока не изменен). Но когда я нажимаю на свое действие, я попадаю на серую пустую страницу. Мой журнал каталины показывает мне: форварды не существуют. Мой хук уже существует и интегрирован в мой проект, но в моем проекте используются стойки. Я пытаюсь добавить свой новый класс JSP и Java в файлы struts-config-ext.xml иtiles-def-ext.xml, но у меня все еще есть серая пустая страница. - person Fred37b; 15.06.2017
comment
Так далеко вы ушли с того момента, когда вы впервые опубликовали это, или с тех пор? Вопрос, кажется, полностью изменился, и я не совсем уверен, в чем именно вам нужна помощь. Если верить, я также наткнулся на ваш вопрос на форуме Liferay. Если вам нужна помощь с очень специфическим фрагментом кода, сделайте еще один пост на SO, но если вам просто нужна помощь, чтобы понять все это, ответьте на ветку Liferay, поскольку она обеспечивает лучший форум для нас, чтобы общаться туда и обратно - person Chris Maggiulli; 15.06.2017