Liferay 如何从应用程序显示模板访问web内容结构模板
在Liferay DXP中,我使用Asset Publisher Portlet来显示Web内容结构条目的列表(本例中为员工)。创建员工Web内容结构时,需要创建一个Web内容模板 但是,我的web内容模板目前只是一个空模板,因为我不知道如何从Asset Publisher portlet用于显示我的员工列表的应用程序显示模板访问它 我的应用程序显示模板当前看起来如下所示:Liferay 如何从应用程序显示模板访问web内容结构模板,liferay,Liferay,在Liferay DXP中,我使用Asset Publisher Portlet来显示Web内容结构条目的列表(本例中为员工)。创建员工Web内容结构时,需要创建一个Web内容模板 但是,我的web内容模板目前只是一个空模板,因为我不知道如何从Asset Publisher portlet用于显示我的员工列表的应用程序显示模板访问它 我的应用程序显示模板当前看起来如下所示: <#if entries?has_content> <div class="staff-memb
<#if entries?has_content>
<div class="staff-members">
<div class="container">
<h3>Our staff</h3>
<div class="row offs">
<#list entries as curEntry>
<#assign docXml = saxReaderUtil.read(curEntry.getAssetRenderer().getArticle().getContent()) />
<#assign name = docXml.valueOf("//dynamic-element[@name='name']/dynamic-content/text()") />
<#assign photo = docXml.valueOf("//dynamic-element[@name='photo']/dynamic-content/text()") />
<#assign bio = docXml.valueOf("//dynamic-element[@name='bio']/dynamic-content/node()") />
<div class="col-md-3 col-sm-6 wow fadeIn animated" data-wow-duration="2s" data-wow-delay="0.2s" style="visibility: visible; animation-duration: 2s; animation-delay: 0.2s; animation-name: fadeIn;">
<div class="thumbnail">
<img src="${photo}" alt="${name}">
<div class="caption">
<h5>
<a href="#">${name}</a>
</h5>
<p>${bio}</p>
</div>
</div>
</div>
</#list>
</div>
</div>
</div>
</#if>
我们的员工
${bio}
如您所见,我需要用额外的标记来包装工作人员标记块;这就是为什么我要使用资产发布器来显示我的应用程序显示模板
正如我提到的,这个设置需要向Liferay添加一个空的Web内容模板(用于员工结构),这看起来很愚蠢。我想做的是在Web内容模板中定义可重复标记,并从ADT中引用模板。像这样:
<#if entries?has_content>
<div class="staff-members">
<div class="container">
<h3>Our staff</h3>
<div class="row offs">
<#list entries as curEntry>
<#assign docXml = saxReaderUtil.read(curEntry.getAssetRenderer().getArticle().getContent()) />
<#assign name = docXml.valueOf("//dynamic-element[@name='name']/dynamic-content/text()") />
<#assign photo = docXml.valueOf("//dynamic-element[@name='photo']/dynamic-content/text()") />
<#assign bio = docXml.valueOf("//dynamic-element[@name='bio']/dynamic-content/node()") />
<!--
CALL WEB CONTENT TEMPLATE HERE PASSING IN DATA
FOR THIS PARTICULAR WEB CONTENT ITEM.
-->
</#list>
</div>
</div>
</div>
</#if>
我们的员工
如何实现这一点?在您描述的这种情况下,您甚至不需要使用SAX提取数据。看看这个工作示例:
<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
<#if entries?has_content>
<#list entries as curEntry>
<#assign article = curEntry.getAssetRenderer().getArticle() />
${journalArticleLocalService.getArticleContent(article, article.getDDMTemplateKey(), "VIEW", locale, objectUtil("com.liferay.portal.kernel.portlet.PortletRequestModel", renderRequest, renderResponse), themeDisplay)}
</#list>
</#if>
${journalArticleLocalService.getArticleContent(article,article.getDDMTemplateKey(),“视图”,区域设置,objectUtil(“com.liferay.portal.kernel.portlet.PortletRequestModel”,renderRequest,renderResponse),主题显示)}
如您所见,我们使用了两个保留变量(serviceLocator和objectUtil),因此您必须在使用该代码段之前在服务器中激活它们
我不是在DXP工作,而是在Liferay 7社区工作,无论如何它都应该工作。谢谢@gonzalezalo,但我在别处找到了一个不涉及任何特殊服务器配置的解决方案 我把它贴在这里,以防其他人正在寻找这个问题的答案 如果我们使用Liferay的
Liferay\u ui
标记(调用asset display
模块)并向其传递对AssetTrender
和我们要发布的文章(curEntry
)的引用,那么Liferay将承担查找与内容相关的模板的重任,使用当前文章填充它并将其呈现回页面:
<#if entries?has_content>
<div class="staff-members">
<div class="container">
<h3>Our staff</h3>
<div class="row offs">
<#list entries as curEntry>
<#assign assetRenderer = curEntry.getAssetRenderer() />
<@liferay_ui["asset-display"]
assetEntry=curEntry
assetRenderer=assetRenderer
showExtraInfo=false />
</#list>
</div>
</div>
</div>
</#if>
我们的员工