Liferay 7.3:如何预配置嵌入页面片段中的portlet?

Liferay 7.3:如何预配置嵌入页面片段中的portlet?,liferay,liferay-7,Liferay,Liferay 7,我们正在使用Liferay 7.3(CE),并尝试采用相对较新的功能“内容页面”和“页面片段”。我们能够使用标记开发已经包含portlet(在内容页上下文中称为“widgets”)的页面片段。到目前为止,这是可行的 现在,我们正试图准备嵌入应用了特殊portlet配置的portlet的页面片段。例如,我们想要准备一个页面片段,它只显示一个资产发布者portlet,该portlet配置为列出预定义类别中的WebContent文章。用户应该能够将该片段放到页面上,而不必关心资产发布者portlet的

我们正在使用Liferay 7.3(CE),并尝试采用相对较新的功能“内容页面”和“页面片段”。我们能够使用
标记开发已经包含portlet(在内容页上下文中称为“widgets”)的页面片段。到目前为止,这是可行的

现在,我们正试图准备嵌入应用了特殊portlet配置的portlet的页面片段。例如,我们想要准备一个页面片段,它只显示一个资产发布者portlet,该portlet配置为列出预定义类别中的WebContent文章。用户应该能够将该片段放到页面上,而不必关心资产发布者portlet的配置

我们没有找到任何直接的方法来实现这一点——我们的第一个猜测是,配置可以作为
标记的属性或内容来编写,但liferay文档中的一个提示阻止了这一猜测,即没有有效的属性或内容附加到该标记上


有人对如何在应用预定义portlet配置的页面片段中嵌入portlet有什么想法吗?(包括开箱即用的Liferay Portlet?

我自己想出来的

片段编辑器没有告诉您的一件事是,片段的HTML部分实际上被解释为Freemarker模板,但有一点是不允许的

这反过来又意味着Liferay标记库可用,这意味着我们可以使用标记
(当然是移植到freemarker替代语法),它接受
defaultPreferences
属性。现在,我们只需配置一次portlet,在DB中找到它的portletPreferences XML数据(请参见表portletPreferences),删除我们不想预配置的值,然后只使用生成的preferences XML作为
标记的
defaultPreferences
属性的值

必须注意任何ID(例如,如果您想要预配置AssetCategory筛选器)。最好从相应的服务获取相应的对象,并从该对象获取ID

本例提供了页面片段的HTML部分,该页面片段将AssetPublisher放置在页面上,预配置为显示12个项目(而不是默认的20个)。(CSS、JS和片段的配置是页面片段编辑器提供的默认设置。)


[#分配assetPublisherPortletPreferences=”
三角洲
12
" /]
[@liferay_portlet[“运行时”]
instanceId=“${FragmentRylinkNamespace}资产”
portletName=“com\u liferay\u资产\u发布者\u web\u portlet\u资产发布者portlet”
defaultPreferences=“${assetPublisherPortletPreferences}”
/]

谢谢你,奥莉西娜。你给我省了很多麻烦

另一种方法是使用内置的
freeMarkerPortletPreferences
,以获得相同的结果,但语法更简单:

[#assign assetPublisherPortletPreferences=freeMarkerPortletPreferences.getPreferences({
    "delta": "12",
} /]

在模板上下文中没有意识到这个对象,谢谢!(我仍然使用XML而不是类似JSON的语法,因为我所做的只是构建一个XML字符串……我只需从数据库中复制和粘贴即可。)
[#assign assetPublisherPortletPreferences=freeMarkerPortletPreferences.getPreferences({
    "delta": "12",
} /]