Шаблоны страниц в 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=""/>
Предварительно в свойствах портала разрешаем работу с serviceLocator. Добавляем в portal-ext.properties директиву:
journal.template.velocity.restricted.variables=
Добавляем статью в созданную структуру и накидываем портлет "Отображение сетевого контента" с выводом этой статьи: портлет внутри статьи отрабатывает уже настроенным!!!
При этом, число портлетов вызываемых в статье по шаблону может быть более одного.
В результате, я создал 2 статьи "Левая колонка" и "Правая колонка", закрепил на всех страницах сайта в соответствующих областях разметки. Для изменения левой или правой колонки редактирую соответствующую статью.
Получилось некое подобие стандартного портлета Liferay "Вложенные портлеты", при этом конфигурация вложенных портлетов инициализируется на страницах автоматически.