Liferay 7.3:如何预配置嵌入页面片段的 portlet?
Liferay 7.3: How to preconfigure a portlet embedded in a page fragment?
我们正在使用 Liferay 7.3 (CE) 并尝试将 "Content Pages" 的相对较新的功能与 "Page Fragments" 相结合。我们能够使用 <lfr-widget-WIDGETALIAS>
标记开发已经包含 portlet(在内容页面上下文中名为 "widgets")的页面片段。到目前为止,这有效。
现在我们正在尝试准备嵌入 portlet 的页面片段应用了特殊的 portlet 配置。例如,我们想要准备一个页面片段,它只显示一个资产发布者 portlet,该 portlet 配置为列出来自预定义类别的 WebContent 文章。用户应该能够直接将该片段放到页面上,而不必关心资产发布者 portlet 的配置。
我们没有找到任何直接的方法来实现这一点——我们最初的猜测是配置可以写成 <lfr-widget-...>
标签的属性或内容,但被 liferay 文档中的提示打消了没有可附加到该标签的有效属性或内容。
是否有人对如何在应用了预定义 portlet 配置的页面片段中实现嵌入 portlet 有所了解? (包括开箱即用的 Liferay portlet?)
我自己想出来了。
片段编辑器没有告诉您的一件事是片段的 HTML 部分实际上被解释为 Freemarker 模板,但需要注意的是只允许 Freemarkers alternative syntax。
反过来,这意味着 Liferays 标签库可用,这意味着我们可以使用标签 <liferay-portlet:runtime>
(当然,移植到 freemarker 替代语法),它接受 defaultPreferences
属性.现在我们可以只配置一次 portlet,在数据库中找到它的 portletPreferences XML 数据(参见 table PortletPreferences),删除我们不想预配置的值,然后只使用生成的首选项 XML 作为 <liferay-portlet:runtime>
标签的 defaultPreferences
属性的值。
必须注意任何 ID(例如,如果您想预配置 AssetCategory 过滤器)。最好从相应的服务中获取相应的对象,并从该对象中获取 ID。
此示例为将 AssetPublisher 放置到页面上的页面片段提供 HTML 部分,预配置为显示 12 个项目(而不是默认的 20 个)。 (CSS,片段的JS和配置是页面片段编辑器默认的。)
<div class="fragment-12345">
[#assign assetPublisherPortletPreferences="<portlet-preferences>
<preference>
<name>delta</name>
<value>12</value>
</preference>
</portlet-preferences>" /]
[@liferay_portlet["runtime"]
instanceId="${fragmentEntryLinkNamespace}assets"
portletName="com_liferay_asset_publisher_web_portlet_AssetPublisherPortlet"
defaultPreferences="${assetPublisherPortletPreferences}"
/]
</div>
谢谢你,@orithena。你帮我省了很多麻烦。
要获得相同结果但语法更简单的另一种选择是使用 built-in freeMarkerPortletPreferences
:
[#assign assetPublisherPortletPreferences=freeMarkerPortletPreferences.getPreferences({
"delta": "12",
} /]
我们正在使用 Liferay 7.3 (CE) 并尝试将 "Content Pages" 的相对较新的功能与 "Page Fragments" 相结合。我们能够使用 <lfr-widget-WIDGETALIAS>
标记开发已经包含 portlet(在内容页面上下文中名为 "widgets")的页面片段。到目前为止,这有效。
现在我们正在尝试准备嵌入 portlet 的页面片段应用了特殊的 portlet 配置。例如,我们想要准备一个页面片段,它只显示一个资产发布者 portlet,该 portlet 配置为列出来自预定义类别的 WebContent 文章。用户应该能够直接将该片段放到页面上,而不必关心资产发布者 portlet 的配置。
我们没有找到任何直接的方法来实现这一点——我们最初的猜测是配置可以写成 <lfr-widget-...>
标签的属性或内容,但被 liferay 文档中的提示打消了没有可附加到该标签的有效属性或内容。
是否有人对如何在应用了预定义 portlet 配置的页面片段中实现嵌入 portlet 有所了解? (包括开箱即用的 Liferay portlet?)
我自己想出来了。
片段编辑器没有告诉您的一件事是片段的 HTML 部分实际上被解释为 Freemarker 模板,但需要注意的是只允许 Freemarkers alternative syntax。
反过来,这意味着 Liferays 标签库可用,这意味着我们可以使用标签 <liferay-portlet:runtime>
(当然,移植到 freemarker 替代语法),它接受 defaultPreferences
属性.现在我们可以只配置一次 portlet,在数据库中找到它的 portletPreferences XML 数据(参见 table PortletPreferences),删除我们不想预配置的值,然后只使用生成的首选项 XML 作为 <liferay-portlet:runtime>
标签的 defaultPreferences
属性的值。
必须注意任何 ID(例如,如果您想预配置 AssetCategory 过滤器)。最好从相应的服务中获取相应的对象,并从该对象中获取 ID。
此示例为将 AssetPublisher 放置到页面上的页面片段提供 HTML 部分,预配置为显示 12 个项目(而不是默认的 20 个)。 (CSS,片段的JS和配置是页面片段编辑器默认的。)
<div class="fragment-12345">
[#assign assetPublisherPortletPreferences="<portlet-preferences>
<preference>
<name>delta</name>
<value>12</value>
</preference>
</portlet-preferences>" /]
[@liferay_portlet["runtime"]
instanceId="${fragmentEntryLinkNamespace}assets"
portletName="com_liferay_asset_publisher_web_portlet_AssetPublisherPortlet"
defaultPreferences="${assetPublisherPortletPreferences}"
/]
</div>
谢谢你,@orithena。你帮我省了很多麻烦。
要获得相同结果但语法更简单的另一种选择是使用 built-in freeMarkerPortletPreferences
:
[#assign assetPublisherPortletPreferences=freeMarkerPortletPreferences.getPreferences({
"delta": "12",
} /]