问题描述
在 Alfresco 中,我有多个工作流程,在这些工作流程中我会根据特定事件发送电子邮件。每个电子邮件模板都使用相同的布局和设计。因此,我想导入一个“shell”模板,并根据工作流和事件的类型传入不同的变量。
// lib/utils.html.ftl
<#macro shell greeting>
${greeting}
</#macro>
例如,我有一个 task-assignment.ftl
模板,我想在其中导入我的基本模板。
// task-assignment.html.ftl
<#import "./lib/utils.html.ftl" as utils>
<#assign greeting="${greeting!'Hello User'}" />
<@utils.shell greeting />
我的问题是 Freemarker 中文件的路径的值。
我不知道如何以 Freemarker 理解且 Alfresco 可以提供的格式获取路径。
var file = companyhome.childrenByXPath("/app:company_home/app:dictionary/app:email_templates/cm:test/cm:utils.html.ftl");
logger.log(file[0].url) => /d/d/workspace/Spacesstore/08234083-23948234-2349834/utils.html.ftl
<#import file as utils>
Caused by: freemarker.core._MiscTemplateException: Error reading imported template string://d/d/workspace/Spacesstore/08234083-23948234-2349834/utils.html.ftl
有谁知道如何以 Freemarker 满意且 Alfresco 能够提供的格式获取文件路径?
我使用的是 Freemarker 2.3.20 版和 Alfresco Community 6.1.2 版。
解决方法
如果它也在你的类路径中,你可以使用导入你的基本模板。请参阅下面的代码片段。
<#import "../refresh_script.html.ftl" as refresh>
<div id="Rec1" class="info">
<div id="Ctrl_top_read" class="titremontre hd" ><img src="${url.context}/images/deployment_report.gif" alt="icon"><span class="titlebox">${msg("mostread")}</span></div>
<@refresh.displayRefreshButton />
<div onClick="Display(this)" id="bt_top_read" class="button buttonUp"></div>
<div id="top_read" class="montre bd">
<#if topread?string?trim=="nodata" || topread?string?trim=="error" || topread?string?trim=="invalid">
<div class="${topread?string?trim}">${msg("${topread?string?trim}")}</div>
<#else>
${topread}
</#if>
</div>
</div>
获取 ftl 文件中的 Noderef。
在您的操作中定义 <param name="destination">{node.nodeRef}</param>
将 noderef 作为隐藏的输入字段。
然后你可以执行 document.getElementById("{}").value or YAHOO.util.Dom.get("{}").value
来获取 nodeRef。