代码之家  ›  专栏  ›  技术社区  ›  Dave Sag

Mandrill如何格式化把手模板的复杂数据

  •  1
  • Dave Sag  · 技术社区  · 6 年前

    我正在尝试通过Mandrill发送模板电子邮件,但在模板提取我发送的数据时遇到问题。

    The docs 假设我需要将数据转换为 [{ name: 'propertyName', content: 'the content' }]

    他们给出的示例如下

    数据

    "global_merge_vars": [
      {
        "name": "user_name",
        "content": "Mandrill_User1"
      }
    ]
    

    样板

    <p>Thanks for registering! Your username is {{user_name}}.</p>
    

    后果

    <p>Thanks for registering! Your username is Mandrill_User1.</p>
    

    在我的情况下,数据更加复杂。

    我有点像

    {
      "firstname": "Tyler",
      "lastname": "Durden",
      "fullname": "Tyler Durden",
      "email": "tyler.durden@testy.tes",
      "company": {
        "name": "Company 1",
        "role": {
          "slug": "supplier",
          "name": "Supplier"
        }
      }
    }
    

    我转换为 name : content 配对如下,发送为 global_merge_vars

    [
       { name: 'firstname', content: 'Tyler' },
      { name: 'lastname', content: 'Durden' },
      { name: 'fullname', content: 'Tyler Durden' },
      { name: 'email', content: 'tyler.durden@testy.tes' },
      {
        name: 'company',
        content: [
          { name: 'name', content: 'Company 1' },
          {
            name: 'role',
            content: [
              { name: 'slug', content: 'supplier' },
              { name: 'name', content: 'Supplier' }
            ]
          }
        ]
      }
    ]
    

    我的模板是

    主题

    Dear {{user.firstname}} {{company.name}} has been approved.
    

    身体

    <html>
      <body>
        <p>Dear {{user.firstname}},</p>
        <p>Your company {{company.name}} has been approved.</p>
      </body>
    </html>
    

    但结果是

    主题

    亲爱的已批准。

    身体

    <html>
      <body>
        <p>Dear ,</p>
        <p>Your company  has been approved.</p>
      </body>
    </html>
    

    我已经设置了要使用的Mandrill handlebars 作为其模板语言。

    我错过了什么?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Dave Sag    6 年前

    经过反复试验,我终于解决了这个问题。结果只有 顶层 对象需要转换为 name ,则, content 一对低阶对象结构可以保持为普通JSON对象。

    所以

    {
      "name": "user"
      "content": {
        "firstname": "Tyler",
        "lastname": "Durden",
        "fullname": "Tyler Durden",
        "email": "tyler.durden@testy.tes",
        "company": {
          "name": "Company 1",
          "role": {
            "slug": "supplier",
            "name": "Supplier"
          }
        }
      }
    }
    

    模板主题: Hello {{user.firstname}}

    和车身

    <html>
      <body>
        <p>Dear {{user.firstname}},</p>
        <p>Your company {{user.company.name}} has been approved.</p>
      </body>
    </html>
    

    工作正常。

    这些文件在这方面有点误导。