我如何渲染一个列表与Mandrill模板在MERGE VARS中传递数组



我必须用merge_vars进行替换。

{
   "key":"some key",
   "template_name":"order-confirmation",
   "template_content":[
      {
         "name":"ORDERNUMBER",
         "content":"12312312321"
      },
      {
         "name":"PRICE",
         "content":"35.10"
      },
      {
         "name":"NAME",
         "content":"Some name"
      },
      {
         "name":"PICKUPDATE",
         "content":"2013-05-10"
      },
      {
         "name":"ORDERITEMS",
         "content":[
            {
               "NUMPRODUCTS":"26",
               "PRODUCTNAME":"Milk",
               "PRODUCTPRICE":"1.35 EUR"
            }
         ]
      },
      {
         "name":"SERVICENUMBER",
         "content":"12345"
      },
      {
         "name":"PICKUPPOINT",
         "content":"AAA 350"
      },
      "message":{
         "from_email":"support@support.com",
         "to":[
            {
               "email":"asdasd@asda.com"
            }
         ],
         "subject":"Subject text",
         "attachments":[
         ]
      },
      "async":false
   }
}

如何制作html占位符?我这样做了,但它不起作用。我只对ORDERITEMS感兴趣。

<tr>
 <td>*|ORDERITEMS:NUMPRODUCTS|*</td>
 <td>*|ORDERITEMS:PRODUCTNAME|*</td>
 <td>*|ORDERITEMS:PRODUCTPRICE|*</td>
</tr>

据我所知,使用Mandrill中的普通模板引擎,content属性唯一支持的类型是string,因此无法提供结构。

最近,(2015年1月13日)Mandrill宣布支持车把模板,并有可能在content中包含数组。

http://blog.mandrill.com/handlebars-for-templates-and-dynamic-content.html

使用这个新的模板语言,不仅可以根据需要访问子属性,还可以在数组内循环,甚至嵌套do循环。(见博客上的评论)

这是一个从博客文章中提取的循环示例:

合并变量或模板内容:

{
    "name": "products",
    "content": [
        {
            "img": "http://kbcdn.mandrill.com/nesting-penguin.png",
            "qty": 2,
            "sku": "PENG001",
            "name": "Penguin",
            "description": "Solid wood, hand-painted penguin nesting doll with 5 different sizes included. Limited Edition.",
            "price": "12.99",
            "ordPrice": "25.98"
        },
        {
            "img": "http://kbcdn.mandrill.com/nesting-bear.png",
            "qty": 3,
            "sku": "BBEAR001",
            "name": "Brown bear",
            "description": "Solid wood, hand-painted brown bear nesting doll. Coordinates with our entire Bear collection. Includes 6 nested sizes.",
            "price": "12.99",
            "ordPrice": "38.97"
        }
    ]
}

在模板中是这样使用它的:

{{#each products}}
<tr class="item">
    <td valign="top" class="textContent">
        <img src="{{img}}" width="50" height="75" class="itemImage" />
        <h4 class="itemName">{{name}}</h4>
        <span class="contentSecondary">Qty: {{qty}} x ${{price}}/each</span><br />
        <span class="contentSecondary sku"><em>{{sku}}</em></span><br />
        <span class="contentSecondary itemDescription">{{description}}</span>
    </td>
    <td valign="top" class="textContent alignRight priceWidth">
        ${{ordPrice}}
    </td>
</tr>
{{/each}}

在你的情况下,你可以这样做:

{{#each ORDERITEMS}}
<tr>
 <td>{{NUMPRODUCTS}}*</td>
 <td>{{PRODUCTNAME}}</td>
 <td>{{PRODUCTPRICE}}</td>
</tr>
{{/each}}

如果有人有这些相同的问题,并且文档解决方案不起作用,请检查您的消息json中的merge_language字段。它必须定义为车把

10年过去了,这个问题仍然有用,但这里有一些更新给那些可能需要它的人。

Handlebars是尝试在mandrill/mailchimp电子邮件中呈现列表的方法。这里的主要要点是,要使用车把,你需要确保启用了"车把"。默认设置为mailchimp

在API中,这是通过将merge_language添加到message字典来完成的:

merge_language: the merge tag language to use when evaluating merge
tags, either mailchimp or handlebars Possible values: "mailchimp" 
or "handlebars".
例如:


response = client.messages.send_template(
    {
        "template_name": "template_name",
        "template_content": [{}], 
        "message": {
            "merge_language": "handlebars",
        }
    }
)

最新更新