【问题标题】:Does SendGrid template engine have conditionals?SendGrid 模板引擎是否有条件?
【发布时间】:2015-08-21 11:11:20
【问题描述】:

通过 SendGrid 发送事务性 API。我的模板(从 Mailchimp 移植过来)有条件(例如

*|IF:SHOWTHISSECTION|*

在 Mailchimp 语法中)。这包括或排除基于变量的模板部分。

我在 SendGrid 中找不到模拟,它根本就没有这个功能吗?我想根据替换变量的存在/不存在来抑制某些部分。

【问题讨论】:

    标签: sendgrid


    【解决方案1】:

    Sendgrid 动态模板中可以使用以下把手:

    Conditional statements:
    {{#if variable}}
    {{#unless variable}}
    {{#greaterThan variable value}}
    {{#lessThan variable value}}
    {{#equals variable value}}
    {{#notEquals variable value}}
    {{#and variable1 variable2}}
    {{#or variable1 variable2}}
    
    Looping statements:
    {{#each hash}}
    

    详情请参考https://sendgrid.com/docs/for-developers/sending-email/using-handlebars/

    【讨论】:

    • 你知道为什么 {{#greaterThan variable value}} {{{customer_name}}} {{/greater}} 不起作用吗?就像在条件语句中的参数不起作用
    【解决方案2】:

    Sendgrid 支持条件使用 Handlebar

    {{#if user.profile.male}}
      <p>Dear Sir</p>
    {{else if user.profile.female}}
      <p>Dear Madame</p>
    {{else}}
      <p> Dear Customer</p>
    {{/if}}
    

    来自他们的文档https://sendgrid.com/docs/for-developers/sending-email/using-handlebars/#conditional-statements

    【讨论】:

      【解决方案3】:

      SendGrid 现在原生支持此功能:

      {{#if user.profile.male}}
        <p>Dear Sir</p>
      {{else if user.profile.female}}
        <p>Dear Madame</p>
      {{else}}
        <p> Dear Customer</p>
      {{/if}}
      

      参考:https://sendgrid.com/docs/for-developers/sending-email/using-handlebars/#conditional-statements

      【讨论】:

      • 你知道是否可以做类似{{#if count &gt; 3}}的事情吗?
      • @DauleDK:你找到解决方案了吗?
      • 嗨@HoangTrinh - 我无法让它工作。我通过提供更多布尔值(例如 moreThanOne :) 来“解决”我的问题
      • @DauleDK:我也是。我需要根据状态设置状态颜色。所以我通过从Javascript添加“颜色”变量来“修复”它,并直接设置颜色而不使用if语句:))
      • 您可以使用#greaterThan 块。结帐here
      【解决方案4】:

      我知道这是旧的,但我遇到了同样的问题,我找到了一个与多个电子邮件管理器兼容的解决方案,它可能对某人有帮助。

      如果你想隐藏一个部分,你可以使用带有 html 注释符号值的替换标签。

      {%OPEN_COMMENT}
      <h1>Whatever section you want to hide</h1>
      {%CLOSE_COMMENT}
      

      如果要隐藏该部分,请分别用“”替换标签。在另一种情况下用空字符串替换它们。

      【讨论】:

        【解决方案5】:

        这是一个可怕的 hack,但是通过引入新变量和使用 CSS,您可以使用 display 隐藏邮件的相关部分。所以以前在 Mandrill/MailChimp 我会有类似的东西:

            *|IF:FAKEVAR|* 
            <p>Show some text here</p>
            *|END:IF|*
        

        相反,引入一个新变量 IF_FAKEVAR,其值为“none”或“inherit”,具体取决于 FAKEVAR 是否具有值,然后执行以下操作:

        <p style="display: *|IF_FAKEVAR|*">Show some text here</p>
        

        虽然这是一个 hack,但对于非常复杂的电子邮件模板,它避免了为每封电子邮件向服务器发送 70k 字节,当您有数千或数万封邮件时,这是令人望而却步的。

        【讨论】:

        • 顺便说一句,您似乎必须做 style="display: |IF_FAKEVAR| !important;"如果你真的想让 gmail 这样做......叹气。
        • 这确实是唯一的选择,除非您的部分不包含太多 HTML,否则您的所有 HTML 最终都会出现在您的应用程序中,而不是发送网格模板中。
        【解决方案6】:

        SendGrid 没有真正的条件,但它确实有Section Tags。有了这些,您可以在消息级别定义一个文本块(与 Substitution Tag 的不同收件人级别相反),然后根据需要为收件人调用相应的部分。

        【讨论】:

        • 谢谢。我会检查一下!
        【解决方案7】:

        SendGrid 模板不支持此功能,但您可以使用 sendwithus 之类的模板 API 在您的 SendGrid 帐户上完成此操作。我相信 sendwithus 支持jinja conditionals,因此您可以执行以下操作:

        {% if variable %}
            <h1>{{ variable }}</h1>
        {% endif %}
        

        【讨论】:

        • 谢谢。 SendWithUs 会起作用,尽管这是一个昂贵的解决方案,并在我的组合中引入了另一个模板引擎。希望 sendgrid 能够解决这个问题......
        猜你喜欢
        • 2011-11-11
        • 2015-05-15
        • 1970-01-01
        • 2014-07-15
        • 1970-01-01
        • 2013-07-01
        • 2014-01-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多