MailJet 嵌套循环
MailJet nested loops
我们正在使用 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":[
]
},
]
]
}
如果您想在 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]]]
]
]
]
]
当我们与 MailJet 支持人员讨论 [1] 时,发现 MailJet 的所见即所得编辑器中存在错误。
如果您在 HTML 块中而不是直接在 WYSIWYG 编辑器中使用它们,则多个嵌套循环有效。
他们正在努力。
[1] https://app.mailjet.com/support/ticket/21e111b3be8630214cc082845f6cf976
我发现这与 WYSIWYG 编辑器无关,仍然是 Mailjet 模板语言中的一个错误,并且很容易重现。使用 Postman 或其他 API 测试工具将以下 JSON 发送到 send 端点(确保添加 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"
而不是简单地通过循环静默地传递。
我们正在使用 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":[
]
},
]
]
}
如果您想在 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]]]
]
]
]
]
当我们与 MailJet 支持人员讨论 [1] 时,发现 MailJet 的所见即所得编辑器中存在错误。
如果您在 HTML 块中而不是直接在 WYSIWYG 编辑器中使用它们,则多个嵌套循环有效。
他们正在努力。
[1] https://app.mailjet.com/support/ticket/21e111b3be8630214cc082845f6cf976
我发现这与 WYSIWYG 编辑器无关,仍然是 Mailjet 模板语言中的一个错误,并且很容易重现。使用 Postman 或其他 API 测试工具将以下 JSON 发送到 send 端点(确保添加 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"
而不是简单地通过循环静默地传递。