4

我是 Liferay 的新手,我几乎可以肯定这非常简单:使用速度标记,我希望能够生成指向 Liferay 网站内页面的链接,并将它们嵌入到不同页面上的 portlet 中。

我对如何完成它有一个模糊的想法,所以我四处寻找它会发布在某个地方,但我找不到任何东西。顺便说一句,我想把我想出的任何代码放在 portlet 的 view.jsp 中。我会在这里使用速度标记,但我不认为(不确定)在 jsp 内部是否允许这样做。

如果您需要更多信息来回复,请告诉我。

4

2 回答 2

4

我会在这里使用速度标记,但我不认为(不确定)在 jsp 内部是否允许这样做。

为什么要在 JSP ( view.jsp) 中使用 Velocity 标记?除了你在速度方面真的很棒的论点之外,我看不出这样做有什么好处。

虽然这里有一个链接可以帮助您在 JSP 中嵌入速度。

注意:在我看来,在 Portlet 的 JSP 中嵌入速度并不是一个好习惯

在 JSP 中

在 VM中(这些将是*.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,此文件是显示各个 portlet 的模板。
  3. docroot/html/themes/_unstyled/templates/navigation.vm, 包含用于显示带有页面链接的导航菜单的代码。
  4. docroot/html/themes/_unstyled/templates/portal_normal.vm, 这个文件代表 liferay 中的一个页面模板,它包含其他文件,如navigation.vm& portlet.vm
于 2012-08-21T10:34:18.193 回答
1

对于速度:

好的,所以要以速度生成 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 .

如果您还有其他问题,请告诉我!

于 2012-08-21T07:01:12.487 回答