我是 Liferay 的新手,我几乎可以肯定这非常简单:使用速度标记,我希望能够生成指向 Liferay 网站内页面的链接,并将它们嵌入到不同页面上的 portlet 中。
我对如何完成它有一个模糊的想法,所以我四处寻找它会发布在某个地方,但我找不到任何东西。顺便说一句,我想把我想出的任何代码放在 portlet 的 view.jsp 中。我会在这里使用速度标记,但我不认为(不确定)在 jsp 内部是否允许这样做。
如果您需要更多信息来回复,请告诉我。
我是 Liferay 的新手,我几乎可以肯定这非常简单:使用速度标记,我希望能够生成指向 Liferay 网站内页面的链接,并将它们嵌入到不同页面上的 portlet 中。
我对如何完成它有一个模糊的想法,所以我四处寻找它会发布在某个地方,但我找不到任何东西。顺便说一句,我想把我想出的任何代码放在 portlet 的 view.jsp 中。我会在这里使用速度标记,但我不认为(不确定)在 jsp 内部是否允许这样做。
如果您需要更多信息来回复,请告诉我。
我会在这里使用速度标记,但我不认为(不确定)在 jsp 内部是否允许这样做。
为什么要在 JSP ( view.jsp
) 中使用 Velocity 标记?除了你在速度方面真的很棒的论点之外,我看不出这样做有什么好处。
虽然这里有一个链接可以帮助您在 JSP 中嵌入速度。
注意:在我看来,在 Portlet 的 JSP 中嵌入速度并不是一个好习惯
在 JSP 中:
Layout
对象,您可以借助LayoutLocalServiceUtil
.com.liferay.portal.util.PortalUtil
likegetLayoutFriendlyURL
等静态方法getLayoutFullURL
来构建 URL。在 VM中(这些将是*.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
,此文件是显示各个 portlet 的模板。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:
如果您还有其他问题,请告诉我!