Получить портлет/страницу с веб-контентом в Liferay

Я пытаюсь заставить Liferay (6.0.6) Asset Publisher публиковать все изменения в нескольких сообществах на главной странице портала. Нажав на ссылку, пользователь должен быть перенаправлен в другое сообщество и увидеть новый веб-контент. Проблема в том, что поведение по умолчанию издателя ресурсов (даже с хуком для сбора информации со всех сообществ) пытается получить URL-адрес путем поиска группы текущей страницы (в которой контента нет). Я решил изменить jsp, показывающий страницу, чтобы искать все страницы во всех сообществах и найти первую, содержащую портлет с нужным веб-контентом. Так

  1. Как я могу получить портлет, содержащий веб-контент, по идентификатору журнала веб-контента?
  2. Как получить страницу с портлетом?

Спасибо


person Belda    schedule 06.12.2011    source источник


Ответы (2)


Таблица PortletPreferences в базе данных содержит конфигурации каждого портлета в системе. Конфигурация articleId для портлета отображения веб-материалов хранится в качестве предпочтения в этой таблице. Если вы посмотрите на эту таблицу, там есть 3 важных столбца:

  • plid содержит идентификатор макета (= страницы), на который был перетащен портлет.
  • portletid содержит идентификатор экземпляра портлета. Для портлета Отображение веб-содержимого этот идентификатор имеет формат 56_INSTANCE_XXXX, где XXXX — уникальный хэш.
  • preferences – это строка в формате XML со всеми настройками и их значениями для данного портлета.

Пример настроек XML:

<portlet-preferences>
    <preference><name>group-id</name><value>10139</value></preference>
    <preference><name>article-id</name><value>14295</value></preference>
</portlet-preferences>

Так что это всего лишь вопрос правильного выполнения ваших SQL-запросов. Насколько я знаю, нет службы, в которую можно было бы позвонить напрямую.

SELECT l.friendlyURL
FROM PortletPreferences p, Layout l
WHERE p.plid=l.plid 
AND p.portletid LIKE '56_INSTANCE_%' 
AND p.preferences LIKE '<preference><name>article-id</name><value>14295</value></preference>';
person p.mesotten    schedule 08.12.2011

Что-то вроде следующего позволяет вам найти макет, на котором отображается статья.

List<Long> layoutIds = JournalContentSearchLocalServiceUtil.getLayoutIds(groupId, false, articleId);
long layoutId = 0;

if (!layoutIds.isEmpty()) {
  layoutId = layoutIds.get(0).longValue();
  Layout layout = LayoutLocalServiceUtil.getLayout(groupId, false, layoutId);
  String url = PortalUtil.getLayoutURL(layout, themeDisplay);
  ...
}
person g.verhemeldonck    schedule 11.12.2014