如何以编程方式创建 Liferay 7 Web 内容模板?

Posted

技术标签:

【中文标题】如何以编程方式创建 Liferay 7 Web 内容模板?【英文标题】:How to create a Liferay 7 Web Content template programmatically? 【发布时间】:2017-11-07 02:44:30 【问题描述】:

在 Liferay 7 中,我有一个结构,一些 FTL 代码,我想在 Java Liferay 模块(无 portlet)中创建一个模板。就像人类对下面的 UI 所做的那样,但以编程方式:

注意:How to create Structure & Template programmatically in Liferay 6 提出的代码不起作用,它会导致Someone may be trying to circumvent the permission checker 异常。

另见:How to create a Liferay 7 structure programmatically?

【问题讨论】:

【参考方案1】:

此代码采用structure (DDMStructure) 并成功创建模板:

ServiceContext serviceContext = new ServiceContext();
serviceContext.setScopeGroupId(group.getGroupId());
serviceContext.setAddGroupPermissions(true);
serviceContext.setAddGuestPermissions(true);
serviceContext.setWorkflowAction(WorkflowConstants.ACTION_PUBLISH);

String templateKey = "my template"; // Any name you want.

long classNameId = PortalUtil.getPortal().getClassNameId(DDMStructure.class);
long classPK = structure.getPrimaryKey();
long resourceClassNameId = PortalUtil.getPortal().getClassNameId(JournalArticle.class);
nameMap = Utils.createLocalesMap(templateKey);
descriptionMap = nameMap; // Use the same.
String type = "display";
String mode = "create";
String language = "ftl";
String script = null;
try 
    script = new String(Files.readAllBytes(Paths.get("/path/to/my/template.ftl")));
 catch (IOException e) 
    log.error("Exception when reading template: " + templateDefinitionFilePath, e);


try 
    DDMTemplate template = DDMTemplateLocalServiceUtil.addTemplate(
        user.getUserId(), group.getGroupId(), classNameId, classPK,
        resourceClassNameId, nameMap, descriptionMap,
        type, mode, language, script, serviceContext);
 catch (PortalException e) 
    log.error("Exception when creating template: " + templateDefinitionFilePath, e);
    return false;

【讨论】:

“有人可能试图绕过权限检查器”是权限检查器抛出的异常。可能是您或某些服务在内部使用安全 API ...

以上是关于如何以编程方式创建 Liferay 7 Web 内容模板?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式获取在 Liferay 7.2 中部署的 Portlet 列表

我们如何在Liferay中以编程方式创建用户和网站模板的角色,权限?

在 liferay 中以编程方式创建站点(组)

如何在网络表单 Liferay 7 中支持文件上传?

如何在 Sharepoint 的 c# 非可视 Web 部件中以编程方式创建进度更新控件

Liferay 7 - 列出模板 FreeMarker 中的所有博客