我们正在使用 Liferay 7.3 (CE) 并试图通过“页面片段”来包含“内容页面”的相对较新的功能。我们能够使用<lfr-widget-WIDGETALIAS>标记开发已经包含 portlet(在内容页面的上下文中称为“小部件”)的页面片段。到目前为止,这是有效的。
现在,我们正在尝试准备嵌入应用了特殊 portlet 配置的portlet 的页面片段。例如,我们想要准备一个页面片段,它只显示一个资产发布者 portlet,该 portlet 被配置为列出来自预定义类别的 WebContent 文章。用户应该能够将该片段放到页面上,而不必关心资产发布者 portlet 的配置。
我们没有找到任何直接的方法来实现这一点——我们的第一个猜测是,配置可以写成<lfr-widget-...>标签的属性或内容,但被 liferay 文档中的一个提示阻止了,即没有有效的属性或内容可以附加到该标签.
是否有人对如何在应用预定义的 Portlet 配置的页面片段中嵌入 Portlet 有所了解?(包括开箱即用的 Liferay portlet?)
我自己想通了。
片段编辑器没有告诉您的一件事是片段的 HTML 部分实际上被解释为 Freemarker 模板,但需要注意的是只允许使用Freemarker替代语法。
反过来,这意味着 Liferays 标签库可用,这意味着我们可以使用标签<liferay-portlet:runtime>(当然,移植到 freemarker 替代语法),它接受一个defaultPreferences属性。现在我们只需配置 portlet 一次,在 DB 中找到它的 portletPreferences XML 数据(参见表 PortletPreferences),删除我们不想预先配置的值,然后只使用生成的首选项 XML 作为标记defaultPreferences属性的值<liferay-portlet:runtime>。
必须注意任何 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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1052 次 |
| 最近记录: |