如何在Liferay中使用Freemarker显示Web内容的纯HTML



在Liferay Portal 7.2中,我有一个Web content元素列表。对于这个列表中的每个Web内容,我想获得在Web内容本身定义的HTML结果。

将ADT限制为具有默认模板的一个结构,以列出它为我工作的每个Web内容:

<#list entries as entry>                    

<#if hasCategoryId(entry, selectedYearCategoryId) &&
hasCategoryId(entry, selectedTipoNormativaCategoryId)>

<#assign assetRenderer = entry.getAssetRenderer()/>
<#assign journalArticle = assetRenderer.getAssetObject()/>
<@liferay_journal["journal-article"]
articleId=journalArticle.getArticleId()
groupId=journalArticle.getGroupId()/>                                    
</#if>
</#list>

"hasCategoryId"是一个自定义函数,这个嵌入的ADT需要重新加载整个页面,并在URL中将参数传递给它自己。

我想知道我是否想用Ajax做这件事,并在MVCRenderCommandMVCResourceCommand中做这些事情,存在任何方式将Web内容转换为HTML给予structureId, articleId,…

类似:

JournalArticle.getHTML(structureId, templateId);

我想你正在寻找这个方法

_journalArticleLocalService.getArticleDisplay(
themeDisplay.getScopeGroupId(), articleId, 
templateKey, null, themeDisplay.getLanguageId(), 
themeDisplay).getContent();

你可以在文档中看到更多。

由于您希望通过Ajax调用调用此代码,因此可能应该使用mvcresourccommand。代码应该是这样的:

package com.your.packace;
import com.liferay.journal.service.JournalArticleLocalService;
import com.liferay.portal.kernel.json.JSONFactoryUtil;
import com.liferay.portal.kernel.json.JSONObject;
import com.liferay.portal.kernel.portlet.bridges.mvc.BaseMVCResourceCommand;
import com.liferay.portal.kernel.portlet.bridges.mvc.MVCResourceCommand;
import com.liferay.portal.kernel.theme.ThemeDisplay;
import com.liferay.portal.kernel.util.ContentTypes;
import com.liferay.portal.kernel.util.ParamUtil;
import com.liferay.portal.kernel.util.WebKeys;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
import javax.portlet.ResourceRequest;
import javax.portlet.ResourceResponse;
@Component(
immediate = true,
property = {
"javax.portlet.name=" + YourPortletKeys.YOUR_PORTLET_NAME,
"mvc.command.name=/your/command/name"
},
service = MVCResourceCommand.class
)
public class GetArticleDisplayMVCResourceCommand extends BaseMVCResourceCommand {
@Override
protected void doServeResource(
ResourceRequest resourceRequest, ResourceResponse resourceResponse)
throws Exception {
ThemeDisplay themeDisplay =
(ThemeDisplay) resourceRequest.getAttribute(WebKeys.THEME_DISPLAY);
String articleId = ParamUtil.getString(resourceRequest, "articleId");
String templateKey = ParamUtil.getString(resourceRequest, "templateKey");
JSONObject response = JSONFactoryUtil.createJSONObject();
String html = _journalArticleLocalService.getArticleDisplay(
themeDisplay.getScopeGroupId(), articleId,
templateKey, null, themeDisplay.getLanguageId(),
themeDisplay).getContent();
response.put("html", html);
resourceResponse.setContentType(ContentTypes.APPLICATION_JSON);
resourceResponse.getWriter().write(response.toString());
}
@Reference
private JournalArticleLocalService _journalArticleLocalService;
}

我没有测试这段代码,所以如果有什么问题请告诉我。

如果要使用Ajax,请使用Headless API。您可以轻松地获取JSON或HTML格式的内容。

对不起,我对Ajax和MVCRenderCommand的引用有点困惑…

重读你的问题,我建议你简单地添加一个templateKey到你的标签调用,按照https://docs.liferay.com/dxp/apps/web-experience/7.0.11/taglibdocs/liferay-journal/journal-article.html

类似:

<@liferay_journal["journal-article"]
articleId=journalArticle.getArticleId()
ddmTemplateKey="654321"
groupId=journalArticle.getGroupId()/> 

最新更新