Рендеринг URL страниц Liferay внутри портлетов Liferay 6.1
Я новичок в Liferay, и я почти уверен, что это невероятно просто сделать: используя разметку скорости, я хочу иметь возможность генерировать ссылки на страницы моего веб-сайта Liferay и вставлять их в мои портлеты на разных страницах.
У меня есть смутное представление о том, как это можно сделать, поэтому я искал, полагая, что это будет где-то опубликовано, но я ничего не могу найти на нем. Кстати, я хочу поместить любой код, который придумал, в view.jsp портлета. Я бы использовал здесь разметку скорости, но я не думаю (не знаю точно), разрешено ли это внутри jsp.
Пожалуйста, дайте мне знать, если вам нужно больше информации, чтобы ответить.
2 ответа
Я бы использовал здесь разметку скорости, но я не думаю (не знаю точно), разрешено ли это внутри jsp.
Почему вы хотите использовать разметку Velocity внутри JSP (view.jsp
)? Я не вижу никаких преимуществ в этом, кроме аргумента, что вы действительно хороши в скорости.
Хотя здесь есть ссылка, которая поможет вам встроить скорость в JSP.
Примечание. На мой взгляд, не рекомендуется вставлять скорость в JSP в портлет.
В JSP:
- Вам понадобится
Layout
объект, который вы можете получить с помощью статических методов вLayoutLocalServiceUtil
, - После того, как вы получите макеты, вы можете использовать статические методы
com.liferay.portal.util.PortalUtil
лайкgetLayoutFriendlyURL
или жеgetLayoutFullURL
и т.д., чтобы построить URL.
В ВМ (это будет *.vm
файлы в темах):
Вы можете выполнить все те же действия, что и в JSP. Вот что вам нужно сделать:
Экземпляр
LayoutLocalService
, можно узнать с помощью следующего кода (взятого из этого ответа):#set($layoutLocalService = $serviceLocator.findService("com.liferay.portal.service.LayoutLocalService"))
Теперь вы можете использовать переменную скорости
$layoutLocalService
совершать звонки в сервисные методы для получения макетов.Затем вы можете вызвать методы
PortalUtil
класс с помощью переменной$portalUtil
доступны для*.vm
файлы в темах.
Вы можете проверить следующие файлы для более подробной информации (если вы заинтересованы):
docroot/html/themes/_unstyled/templates/init.vm
, содержит все переменные скорости, доступные в темах. Интересующие переменные могут быть$theme
,$theme_display
,$layout
,$navItems
,docroot/html/themes/_unstyled/templates/portlet.vm
этот файл является шаблоном для отображения отдельных портлетов.docroot/html/themes/_unstyled/templates/navigation.vm
, содержит код для отображения меню навигации со ссылками на страницы.docroot/html/themes/_unstyled/templates/portal_normal.vm
этот файл представляет шаблон страницы в LifeRay и содержит другие файлы, такие какnavigation.vm
&portlet.vm
,
Для скорости:
Итак, для быстрой генерации ссылок на страницы Liferay взгляните на следующий файл в исходном коде Liferay:
/portal-web/docroot/html/themes/_unstyled/templates/navigation.vm
Там вы увидите, как стандартная тема Liferay создает структуру навигации для вашего сайта. Чтобы облегчить вам жизнь, вот она:
<nav class="$nav_css_class" id="navigation">
<h1>
<span>#language("navigation")</span>
</h1>
<ul>
#foreach ($nav_item in $nav_items)
#if ($nav_item.isSelected())
<li class="selected">
#else
<li>
#end
<a href="$nav_item.getURL()" $nav_item.getTarget()><span>$nav_item.icon() $nav_item.getName()</span></a>
#if ($nav_item.hasChildren())
<ul class="child-menu">
#foreach ($nav_child in $nav_item.getChildren())
#if ($nav_child.isSelected())
<li class="selected">
#else
<li>
#end
<a href="$nav_child.getURL()" $nav_child.getTarget()>$nav_child.getName()</a>
</li>
#end
</ul>
#end
</li>
#end
</ul>
Поэтому Velocity просматривает коллекцию с именем $nav_items, а затем вызывает метод getURL() для каждого элемента, чтобы сгенерировать ссылку.
Для JSP:
- Вам нужно будет использовать класс LayoutLocalServiceUtil и, в частности, один из методов getLayouts(). Вам нужно будет выбрать тот, который лучше всего соответствует вашим потребностям.
- Это вернет список макетов (ваших страниц), и затем вы можете вызвать getFriendlyURL() для каждого из этих макетов, чтобы вернуть его URL. Это будет относительный URL вашего сайта, поэтому что-то вроде /my-site-home-page,
Позвольте мне знать, если у вас есть еще вопросы!