我们正在使用 Liferay 7.3 (CE),并尝试将“内容页面”与“页面片段”这一相对较新的功能结合起来。我们能够使用以下方法开发已经包含 portlet(在内容页面的上下文中称为“小部件”)的页面片段:<lfr-widget-WIDGETALIAS>
标签。到目前为止,这有效。
现在我们正在尝试准备嵌入 portlet 的页面片段应用了特殊的 portlet 配置。例如,我们想要准备一个页面片段,仅显示一个资产发布者 portlet,该 portlet 配置为列出来自预定义类别的 WebContent 文章。用户应该能够将该片段放到页面上,而不必关心资产发布者 portlet 的配置。
我们没有找到任何直接的方法来实现这一点——我们的第一个猜测是配置可以写为属性或内容<lfr-widget-...>
该标签因 liferay 文档中的提示而被阻止,即没有有效的属性或内容可附加到该标签。
有人知道如何通过应用预定义的 portlet 配置在页面片段中嵌入 portlet 吗? (包括开箱即用的 Liferay portlet?)
我自己想出来了。
片段编辑器没有告诉您的一件事是片段的 HTML 部分实际上被解释为 Freemarker 模板,但需要注意的是,仅自由标记者替代语法 https://freemarker.apache.org/docs/dgui_misc_alternativesyntax.html被允许。
反过来,这意味着 Liferays 标签库可用,这意味着我们可以使用标签<liferay-portlet:runtime>
(当然,移植到 freemarker 替代语法),它接受defaultPreferences
属性。现在我们只需配置 portlet 一次,在数据库中找到它的 portletPreferences XML 数据(参见表 PortletPreferences),删除我们不想预先配置的值,然后使用生成的首选项 XML 作为defaultPreferences
的属性<liferay-portlet:runtime>
tag.
必须小心任何 ID(例如,如果您想预配置 AssetCategory 过滤器)。最好从相应的服务中获取相应的对象,并从该对象中获取 ID。
此示例提供页面片段的 HTML 部分,该片段将 AssetPublisher 放置到页面上,预配置为显示 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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)