2

我们正在使用 mailJet 构建我们的电子邮件,到目前为止效果很好。我们当前的问题是,我们希望在循环中的循环中有一个循环(所以嵌套循环)第一个循环工作正常,第二个内部循环工作正常,但第三个不再工作:

{% for trip in var:trips %}
{{trip.id}}

{% for tripSegment in trip.tripSegments %}

{% for tripBreak in tripSegment.breaks %}
{{tripBreak.duration}}
{% endfor %}

{% endfor %}

Distance: {{trip.totalDistance}} km

{% endfor %}

这在我们的模板中。如果我删除带中断的内部循环,一切都很好。

如果我启用模板错误报告,我会收到以下消息:

X-MJ-ErrorMessage: "tripSegment.breaks" is not an array value

但是如果我尝试使用 {{tripSegment.breaks}} 打印它,我会收到以下消息:

X-MJ-ErrorMessage: Array values cannot be printed: tripSegment.breaks

并且该字段绝对是一个数组,例如trips或tripSegments,因此基本上它应该可以工作。

MailJet 中的嵌套循环我做错了什么?

编辑:

我发送到 Mailjet 的对象结构如下所示:

"Vars": {
    "trips": [
        "id": 1,
        "tripSegments":[
            {
                "id":2,
                "distance": 100,
                "breaks":[
                    {
                        "duration":15
                    },{
                        "duration":20
                    }
                ]
            },{
                "id":3,
                "distance": 200,
                "breaks":[
                    {
                        "duration":10
                    },{
                        "duration":30
                    }
                ]
            },{
                "id":4,
                "distance": 200,
                "breaks":[
                ]
            },
        ]
    ]
}
4

3 回答 3

3

如果你想循环tripSegment.breaks,它应该被表示为一个数组而不是一个对象。

我设法创建了一个对我有用的示例,它与您使用的值相同。

'Vars' => [ 
        "trips"=>[ 
            'trips1' =>[
        'id'=> 123,
        'totalDistance'=> 10, 
        'tripSegments' => [ 
            ['breaks' =>[['duration'=>1],['duration'=> 2]]],
            ['breaks' =>[['duration'=>1],['duration'=> 2]]],
            ['breaks' =>[['duration'=>1],['duration'=> 2]]]
                          ]
                       ]    
                  ]
      ]
于 2016-10-06T14:02:15.947 回答
1

我发现这与所见即所得编辑器无关,仍然是 Mailjet 模板语言中的一个错误,并且很容易重现。使用 Postman 或其他 API 测试工具将以下 JSON 发送到发送端点(确保通过 Basic Auth 添加您的 API 密钥凭据):

POST https://api.mailjet.com/v3/send

{
    "FromEmail": "me@example.com",
    "FromName": "Me",
    "Subject": "Test",
    "MJ-TemplateLanguage": true,
    "MJ-TemplateErrorReporting": "me@example.com",
    "MJ-TemplateErrorDeliver": "deliver",
    "Recipients": [
        { "Email": "me@example.com" }
    ],
    "Html-part": "<ul>{% for project in var:commissions.projects %}<li>{{project.name}}</li>{% endfor %}</ul>",
    "Vars": {
        "commissions": { "total": "235,000", "projects": [] }
    }
  }

您将通过电子邮件收到包含内容的错误报告,No value for "commissions.projects"而不是简单地通过循环。

于 2017-03-20T17:49:01.787 回答
0

当我们与 MailJet 支持 [1] 讨论时,发现 MailJet 的 WYSIWYG 编辑器中存在错误。

如果您在 HTML 块中而不是直接在所见即所得编辑器中使用它们,则多个嵌套循环可以工作。

他们正在努力。

[1] https://app.mailjet.com/support/ticket/21e111b3be8630214cc082845f6cf976

于 2016-10-13T07:17:53.967 回答