Программная фильтрация веб-контента по области действия в Liferay 6.2.GA2

Обновление для получения дополнительной информации: есть ли способ программно выбрать весь веб-контент из глобальной области или текущей выбранной области сайта.

Я хочу сделать это в шаблоне скорости "portal_normal.vm". Я написал "$themeDisplay.getScopeGroupId().toString()", чтобы получить идентификатор группы.

У меня есть 2 сайта/сообщества, и я закрепил за каждым из них одного пользователя. Один сайт является сайтом liferay по умолчанию, у которого есть пользователь liferay по умолчанию. Другой сайт является моим пользовательским сайтом и имеет моего собственного пользователя. Когда я пытаюсь войти в систему с каждым из них, я всегда получаю идентификатор группы сайта liferay. Есть ли какой-либо другой метод, который мне нужно использовать, чтобы получить сайт текущего вошедшего в систему пользователя?


person Mani    schedule 19.06.2014    source источник
comment
что вы подразумеваете под выбором всего веб-контента?   -  person Pankaj Kathiriya    schedule 19.06.2014
comment
Также, пожалуйста, предоставьте все усилия, которые вы приложили для этого/   -  person Pankaj Kathiriya    schedule 19.06.2014


Ответы (1)


Вы должны разрешить использование ServiceLocator в ваших шаблонах Velocity. В вашем portal-ext.properties установите следующее:

journal.template.velocity.restricted.variables=

Если у вас уже установлены эти ключи, просто удалите serviceLocator из списка.

Используя serviceLocator, мы можем загрузить GroupLocalServiceUtil и JournalArticleLocalServiceUtil. Получить все сайты WebContent очень просто:

#set ($journal_article_local_service = $serviceLocator.findService("com.liferay.portal.service.JournalArticleLocalService"))

#set ($journal_articles = $journal_article_local_service.getArticles($theme_display.getScopeGroupId()))

Чтобы получить все в глобальной области:

Для глобальной группы:

#set ($group_local_service = $serviceLocator.findService("com.liferay.portal.service.GroupLocalService"))

#set ($global_group = $group_local_service.getGroup($theme_display.getCompanyId(), "Global"))

#set ($journal_article_local_service = $serviceLocator.findService("com.liferay.portal.service.JournalArticleLocalService"))

#set ($journal_articles = $journal_article_local_service.getArticles($global_group.getGroupId()))
person rp.    schedule 19.06.2014
comment
Спасибо за ответ. На самом деле я хочу сделать это в шаблоне скорости portal_normal.vm. Я написал $themeDisplay.getScopeGroupId().toString(), чтобы получить идентификатор группы. У меня есть 2 сайта/сообщества в моей жизни, и каждому из них назначен один пользователь. Один сайт является сайтом liferay по умолчанию, у которого есть пользователь liferay по умолчанию. Другой сайт является моим пользовательским сайтом и имеет моего собственного пользователя. Когда я пытаюсь войти в систему с каждым из них, я всегда получаю идентификатор группы сайта liferay. Есть ли какой-либо другой метод, который мне нужно использовать, чтобы получить сайт текущего вошедшего в систему пользователя? - person Mani; 20.06.2014
comment
Без проблем! Для остальной части сообщества, пожалуйста, обновите вопрос, чтобы отразить ваш комментарий. Я обновлю его. - person rp.; 20.06.2014
comment
Большое вам спасибо за это. Я попробую этот код и обновлю его, как только проверю. Если я правильно его понимаю, $themeDisplay.getScopeGroupId(). собирается вернуть идентификатор сайта текущего вошедшего в систему пользователя, верно? - person Mani; 20.06.2014
comment
Он вернет groupId сайта, который пользователь просматривает в данный момент. - person rp.; 21.06.2014
comment
Я пытался получить идентификатор сообщества с помощью getScopeGroupId, но я всегда возвращаю идентификатор сообщества/сайта liferay по умолчанию. Когда я вхожу в систему с пользователем, которому назначен мой пользовательский сайт/сообщество, я ожидаю, что его идентификатор будет возвращен. Любая подсказка, почему это может происходить ? Также, когда я пытаюсь получить статьи, я получаю статьи со всеми их версиями, где я ищу только последнюю версию статьи. Должен ли я удалять дубликаты самостоятельно? - person Mani; 23.06.2014
comment
@manni, getScopeGroupId получает сайт, который просматривает пользователь. Вам нужно будет получить groupId для вашего сайта по-другому. Например, вы можете получить список всех groupIds пользователя, вызвав user.getGroupIds(). - person rp.; 23.06.2014
comment
Спасибо, я попытался получить группы текущего пользователя, используя этот метод. Затем для всех групп я проверяю, является ли это сообществом (используя API isRegularSite). Если это сообщество, я извлекаю все статьи для этого идентификатора группы и использую этот идентификатор статьи. для динамического добавления контента с помощью портлета отображения веб-контента в portal_normal.vm. По какой-то причине я получаю правильный идентификатор статьи, но не могу отображать их в портлете отображения веб-контента. Это отлично работает для области сайта Liferay по умолчанию и может отображать все контент на сайте Liferay. Что может быть причиной того, что он не отображает содержимое моего пользовательского сайта? - person Mani; 24.06.2014