Шаблоны страниц в Liferay, к сожалению, не работают так, как хотелось бы:
Можно конечно использовать layout-template устанавливаемые в виде плагина, но в этом случае требуется инструментарий типа IDE. Да и вообще шаблоны страниц должны редактироваться средствами CMS.
Workaround: В JournalArticle есть возможность runtime портлета с помощью тега <runtime-portlet/>, но задать необходимые настройки он не позволяет. Можно предвариательно сохранить PortletPreferences для вызываемого портлета в VM скрипте шаблона сетевого контента. Создаем структуру "LAYOUT_PORTLETS" и шаблон для нее:
Предварительно в свойствах портала разрешаем работу с serviceLocator. Добавляем в portal-ext.properties директиву:
Добавляем статью в созданную структуру и накидываем портлет "Отображение сетевого контента" с выводом этой статьи: портлет внутри статьи отрабатывает уже настроенным!!!
При этом, число портлетов вызываемых в статье по шаблону может быть более одного.
В результате, я создал 2 статьи "Левая колонка" и "Правая колонка", закрепил на всех страницах сайта в соответствующих областях разметки. Для изменения левой или правой колонки редактирую соответствующую статью.
Получилось некое подобие стандартного портлета Liferay "Вложенные портлеты", при этом конфигурация вложенных портлетов инициализируется на страницах автоматически.
- Если для страницы созданной по шаблону включен режим propagation изменений шаблона, то нет возможности кастомизировать страницу (хотя бы в какой-то одной определенной области разметки) LPS-30114
- Отключение propagation сводит на нет управление сквозными областями разметки (например боковые колоки в 2-х или 3-х колончатом макете страниц)
Можно конечно использовать layout-template устанавливаемые в виде плагина, но в этом случае требуется инструментарий типа IDE. Да и вообще шаблоны страниц должны редактироваться средствами CMS.
Workaround: В JournalArticle есть возможность runtime портлета с помощью тега <runtime-portlet/>, но задать необходимые настройки он не позволяет. Можно предвариательно сохранить PortletPreferences для вызываемого портлета в VM скрипте шаблона сетевого контента. Создаем структуру "LAYOUT_PORTLETS" и шаблон для нее:
#set($themeDisplay=$request.get("theme-display"))
#set($companyId=$themeDisplay.get("company-id"))
#set($ownerId=$getterUtil.getLong("0"))
#set($ownerType=$getterUtil.getInteger("3"))
#set($plid=$getterUtil.getLong($themeDisplay.get("plid")))
#set($portletPreferencesService=$serviceLocator.findService("com.liferay.portal.service.PortletPreferencesLocalService"))
## Настраиваем портлет
$velocityPortletPreferences.setValue("portletSetupUseCustomTitle", "true")
$velocityPortletPreferences.setValue("portletSetupTitle_ru_RU", "Урааа!!!")
$velocityPortletPreferences.setValue("groupId", "10180")
$velocityPortletPreferences.setValue("articleId", "10870")
## Проверяем сохранены ли настройки портлета в БД, при необходимости сохраняем
#set($portletId="56_INSTANCE_banner1")
#set($portletPreferences=$portletPreferencesService.getPortletPreferences($ownerId, $ownerType, $plid, $portletId))
#if(!portletPreferences || "$portletPreferences" == "")
#set($portletPreferences=$portletPreferencesService.updatePreferences($ownerId, $ownerType, $plid, $portletId, $velocityPortletPreferences.toString()))
#end
$velocityPortletPreferences.reset()
## Вызываем портлет
<runtime-portlet instance="banner1" name="56" querystring=""/>
journal.template.velocity.restricted.variables=
В результате, я создал 2 статьи "Левая колонка" и "Правая колонка", закрепил на всех страницах сайта в соответствующих областях разметки. Для изменения левой или правой колонки редактирую соответствующую статью.
Получилось некое подобие стандартного портлета Liferay "Вложенные портлеты", при этом конфигурация вложенных портлетов инициализируется на страницах автоматически.
Комментариев нет:
Отправить комментарий