带有把手“每个循环”的 Mandrill API 不起作用

Posted

技术标签:

【中文标题】带有把手“每个循环”的 Mandrill API 不起作用【英文标题】:Mandrill API with Handlebars "each-loop" not working 【发布时间】:2015-06-17 17:57:25 【问题描述】:

使用 Mandrill API 发送事务通讯时遇到问题。我为模板参数选择了 Handlebars。用户名显示正确,但列表中的数据(帖子标题)为空。请帮忙指出我做错了什么。谢谢!

模板如下,发送到端点/messages/send.json

func genhtmlTemplate() string 
    return "code generated template<br>" +
        "Hi name, <br>" + 
        "#each posts<div>" +
        "TITLE title, THIS this<br>" +
        "</div>/each"

我在 mandrillapp.com 的设置面板中的 API 日志显示了参数:


"key": "xxxxxxxxxx",
"message": 
        :
    "merge_language": "handlebars",
    "global_merge_vars": null,
    "merge_vars": [
        
            "rcpt": "xxxxxx@gmail.com",
            "vars": [
                
                    "name": "posts",
                    "content": [
                        
                            "title": "title A"
                        ,
                        
                            "title": "title B"
                        ,
                    ]
                ,
                
                    "name": "name",
                    "content": "John Doe"
                
            ]
        
    ],
      :
    ,
    :

下面是收到的电子邮件。 “标题 A”和“标题 B”应在“TITLE”之后。

code generated template
Hi John Doe,
TITLE, THIS Array
TITLE, THIS Array

【问题讨论】:

mandrill.zendesk.com/hc/en-us/articles/… 使用此链接在代码中使用句柄栏,使用全局变量非常容易。 【参考方案1】:

Mandrill 决定用一些可怕的名字创建自定义车把助手:

https://mandrill.zendesk.com/hc/en-us/articles/205582537-Using-Handlebars-for-Dynamic-Content#inline-helpers-available-in-mandrill

titleurl 如果你的对象碰巧有名为 titleurl 的键,那肯定会让你伤心。为什么他们没有将他们的助手命名为 toTitleCaseencodeUrl 之类的,我无法理解。

就数组和#each 而言,您可以使用this.title 而不是title 来解决它。

【讨论】:

【参考方案2】:

在使用 Mandrill 的示例代码here 进行测试后,我发现关键的“标题”不起作用。不知道原因(Mandrill 的保留关键字?)但将其替换为“title1”、“titleX”或其他可以正确呈现的内容。


    "name": "posts",
    "content": [
        
           "title": "blah blah"  // "title1" or something else works
        ,

【讨论】:

【参考方案3】:

在使用把手作为合并语言时,“标题”是保留的帮助名称,用于把手中的文本以标题大小写。如果默认情况下只做 title,它会将空文本视为标题。尝试给它 title title 这应该可以工作或将键名更改为其他名称(如果您不希望标题出现在标题中)

【讨论】:

【参考方案4】:

我知道这已经晚了,但它可能对目前尝试调试此问题的人有用。请注意山魈中的这一点documentation

通过合并标签添加动态内容的主要方法有两种:Handlebars 或 Mailchimp 合并语言。您可能已经通过创建和编辑 Mailchimp 模板熟悉了 Mailchimp 合并语言。我们还提供 Handlebars 的自定义实现,它是开源的并提供更大的灵活性。

要设置您的合并语言,请导航至发送默认值,然后从合并语言下拉菜单中选择 Mailchimp 或 Handlebars。

我在 Sending Blue 上遇到了类似的问题,他们的默认配置不启用把手,因此不会评估它们。

【讨论】:

以上是关于带有把手“每个循环”的 Mandrill API 不起作用的主要内容,如果未能解决你的问题,请参考以下文章

mandrill 车把每个循环 - 如何检查奇怪的项目

mandrill、merge_vars 和车把阵列问题

带有 sinatra 的 Mandrill API 电子邮件队列

使用车把和 Mandrill-dotnet -library 在 mandrill 中的每个循环

使用带有 laravel 的 Mandrill API 的“异步”参数

带把手的 Mandrill 模板 - 如何格式化日期