【问题标题】:How to use and import an Alfresco NodeRef in Freemarker template?如何在 Freemarker 模板中使用和导入 Alfresco NodeRef?
【发布时间】:2021-04-19 16:58:29
【问题描述】:

在 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 中文件的 path 值。

我不知道如何以 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 版。

【问题讨论】:

    标签: alfresco freemarker alfresco-share


    【解决方案1】:

    如果你的基本模板也在你的类路径中,你可以使用它。见下面代码sn-p。

    <#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。

    在您的操作中定义 &lt;param name="destination"&gt;{node.nodeRef}&lt;/param&gt; alfresco 包括 noderef 作为隐藏输入字段。

    然后你可以通过document.getElementById("{}").value or YAHOO.util.Dom.get("{}").value 获取nodeRef。

    【讨论】:

    • 感谢您的回复。它与问题有什么关系?我很确定我没有很好地提出我的问题。问题是:如何在 Freemarker 模板(例如 shell.html.ftl)中导入一个 Alfresco NodeRef(例如指向 task-assignment.html.ftl)?
    • 我已经更新了我的原始答案并添加了代码 sn-ps 以获取 noderef un ftl 文件。希望这会有所帮助
    • 我正在 JavaScript 控制台中进行测试。在 JavaScript 输入中: var file = companyhome.childrenByXPath("/app:company"....etc);模型['file'] = 文件[0].nodeRef;然后在 Freemarker 输入: 'Error reading import template Node Type: {alfresco.org/model/content/1.0}content Node Ref: workspace://SpacesStore/34987sdf-9a8sdfa-asdfasdfasdf87
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多