Получить портлет / страницу с веб-контентом в Liferay - PullRequest
1 голос
/ 06 декабря 2011

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

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

Спасибо

Ответы [ 2 ]

1 голос
/ 08 декабря 2011

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

  • plid содержит идентификатор макета (= страницы), на котором был удален портлет.
  • portletid содержит экземпляр id портлета.Для портлета отображения веб-содержимого этот идентификатор имеет формат 56_INSTANCE_XXXX, где XXXX - уникальный хеш.
  • предпочтения - это строка всех предпочтений и их значений для этого портлета в формате 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>';
0 голосов
/ 11 декабря 2014

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

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);
  ...
}
...