Рендеринг 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 файлы в темах.

Вы можете проверить следующие файлы для более подробной информации (если вы заинтересованы):

  1. docroot/html/themes/_unstyled/templates/init.vm, содержит все переменные скорости, доступные в темах. Интересующие переменные могут быть $theme, $theme_display, $layout, $navItems,
  2. docroot/html/themes/_unstyled/templates/portlet.vm этот файл является шаблоном для отображения отдельных портлетов.
  3. docroot/html/themes/_unstyled/templates/navigation.vm, содержит код для отображения меню навигации со ссылками на страницы.
  4. 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:

  1. Вам нужно будет использовать класс LayoutLocalServiceUtil и, в частности, один из методов getLayouts(). Вам нужно будет выбрать тот, который лучше всего соответствует вашим потребностям.
  2. Это вернет список макетов (ваших страниц), и затем вы можете вызвать getFriendlyURL() для каждого из этих макетов, чтобы вернуть его URL. Это будет относительный URL вашего сайта, поэтому что-то вроде /my-site-home-page,

Позвольте мне знать, если у вас есть еще вопросы!

Другие вопросы по тегам