Liferay 7.3: Как предварительно настроить портлет, встроенный во фрагмент страницы? - PullRequest
0 голосов
/ 05 мая 2020

Мы используем Liferay 7.3 (CE) и пытаемся использовать относительно новую функцию «Страницы содержимого» с помощью «Фрагментов страниц». Мы можем разрабатывать фрагменты страниц, которые уже включают портлеты (называемые «виджетами» в контексте страниц содержимого), используя тег <lfr-widget-WIDGETALIAS>. Пока это работает.

Теперь мы пытаемся подготовить фрагменты страницы, в которые встроены портлеты с применением специальной конфигурации портлета . Например, мы хотим подготовить фрагмент страницы, который просто показывает портлет издателя ресурсов, настроенный для отображения статей WebContent из заранее определенной категории. Пользователь должен иметь возможность просто поместить этот фрагмент на страницу, не заботясь о конфигурации портлета издателя ресурсов.

Мы не нашли прямого способа добиться этого - наше первое предположение, что конфигурация могло быть записано как атрибуты или содержимое тега <lfr-widget-...> было остановлено намеком в документации liferay, что нет никаких допустимых атрибутов или содержимого для прикрепления к этому тегу.

Есть ли у кого-нибудь намек на идею как добиться встраивания портлетов во фрагменты страницы с применением заранее заданной конфигурации портлета? (включая готовые портлеты Liferay?)

1 Ответ

2 голосов
/ 05 мая 2020

Я понял это сам.

Единственное, что вам не сообщает Fragment Editor, это то, что часть HTML фрагмента фактически интерпретируется как шаблон Freemarker, с оговоркой, что только Freemarkers альтернативный синтаксис разрешен.

Это, в свою очередь, означает, что доступны библиотеки тегов Liferays, что означает, что мы можем использовать тег <liferay-portlet:runtime> (перенесен на альтернативу freemarker синтаксис, конечно), который принимает атрибут defaultPreferences. Теперь мы можем просто один раз настроить портлет, найти его данные portletPreferences XML в базе данных (см. Таблицу PortletPreferences), удалить значения, которые мы не хотим предварительно настраивать, а затем просто использовать полученные предпочтения XML как значение для defaultConfiguration .

Следует проявлять осторожность с любыми идентификаторами (например, если вы хотите предварительно настроить фильтр AssetCategory). Лучше получить соответствующий объект из соответствующей службы и получить идентификатор из этого объекта.

В этом примере предоставляется часть HTML для фрагмента страницы, который размещает AssetPublisher на странице, предварительно настроенный для отображения 12 элементов (вместо этого по умолчанию 20). (CSS, JS и Конфигурация фрагмента - это значение по умолчанию, заданное редактором фрагмента страницы.)

<div class="fragment-12345">
  [#assign assetPublisherPortletPreferences="<portlet-preferences>
    <preference>
        <name>delta</name>
        <value>12</value>
    </preference>
</portlet-preferences>" /]
  [@liferay_portlet["runtime"]
    instanceId="${fragmentEntryLinkNamespace}assets"
    portletName="com_liferay_asset_publisher_web_portlet_AssetPublisherPortlet"
    defaultPreferences="${assetPublisherPortletPreferences}"
  /]
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...