在Portlet Liferay 6.1中呈现Liferay页面URL

在Portlet Liferay 6.1中呈现Liferay页面URL,liferay,liferay-6,liferay-velocity,liferay-theme,Liferay,Liferay 6,Liferay Velocity,Liferay Theme,我是liferay的新手,几乎可以肯定这非常简单:使用velocity标记,我希望能够生成指向liferay网站中页面的链接,并将它们嵌入到不同页面上的Portlet中 我对怎么做有一个模糊的想法,所以我四处搜索,想把它贴在什么地方,但我找不到任何东西。顺便说一句,我想把我想到的任何代码放在portlet的view.jsp中。我会在这里使用velocity标记,但我不认为(不确定)jsp中是否允许使用velocity标记 如果您需要更多信息来回复,请告诉我。有关Velocity: 好的,要在ve

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

我对怎么做有一个模糊的想法,所以我四处搜索,想把它贴在什么地方,但我找不到任何东西。顺便说一句,我想把我想到的任何代码放在portlet的view.jsp中。我会在这里使用velocity标记,但我不认为(不确定)jsp中是否允许使用velocity标记


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

有关Velocity:

好的,要在velocity中为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>

#语言(“导航”)
    #foreach($nav_项目中的nav_项目) #如果($nav_item.isSelected())
  • #否则
  • #结束 #如果($nav_item.hasChildren())
      #foreach($nav_item.getChildren()中的$nav_child) #如果($nav_child.isSelected())
    • #否则
    • #结束
    • #结束
    #结束
  • #结束

因此Velocity正在查看一个名为$nav_items的集合,然后对每个项调用getURL()方法来生成链接

对于JSP:

  • 您需要使用LayoutLocalServiceUtil类,并在 特定的getLayouts()方法之一。您必须选择最适合您需要的方法
  • 这将返回布局列表(您的页面),然后您可以 对每个布局调用getFriendlyURL()以返回其url 这将是您站点的相对url,因此 /我的网站主页
  • 如果您还有任何问题,请告诉我

    我会在这里使用velocity标记,但我不认为(不确定)jsp中是否允许使用velocity标记

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

    虽然这里有一个可以帮助您在JSP中嵌入velocity的方法

    注意:在我看来,将velocity嵌入到portlet中的JSP中不是一个好的实践

    JSP中的

    • 您将需要一个
      布局
      对象,您可以借助中的静态方法获得该对象
    • 获得布局后,可以使用静态方法,如
      getLayoutFriendlyURL
      getLayoutFullURL
      等来构建URL
    在VM中(这些将是主题中的
    *.VM
    文件):
    您可以按照JSP中提到的所有相同步骤进行操作。您需要做的事情是:

    • LayoutLocalService
      的实例,可以使用以下代码(取自此代码)找到:

      现在,您可以使用velocity变量
      $layoutLocalService
      调用服务方法来获取布局

    • 然后,您可以使用可用于主题中的
      *.vm
      文件的变量
      $PortalUtil
      调用
      PortalUtil
      类的方法

    您可以查看以下文件以了解更多详细信息(如果您感兴趣):

  • ,其中包含主题中可用的所有速度变量。感兴趣的变量可能是
    $theme
    $theme\u display
    $layout
    $navItems
  • ,此文件是用于显示各个portlet的模板
  • ,包含用于显示带有页面链接的导航菜单的代码
  • ,此文件表示liferay中的页面模板,其中包含其他文件,如
    navigation.vm
    &
    portlet.vm

  • 先生们,非常感谢你们的回复。我只想到在jsp中使用vm,因为这是我目前对Liferay开发最了解的,但即使如此,我还是刚刚开始。俗话说,当你唯一的工具是锤子时,一切看起来都像钉子。因此,由于我的目标是在portlet中呈现URL,因此我将尝试从您的两个响应中将其组合在一起。如果你们中的任何一位能告诉我如何构造这样一个东西的示例代码,那就太好了,给我一个非常需要的正确方向的提示编号列表中的链接都是404。谢谢@mmcglyn,已经更新了链接。我给了主的链接哪些变化,现在他们都指向6.2分支。
    #set($layoutLocalService = $serviceLocator.findService("com.liferay.portal.service.LayoutLocalService"))