首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用OR运算符的MJML If语句可能吗?

使用OR运算符的MJML If语句可能吗?
EN

Stack Overflow用户
提问于 2022-01-05 18:13:21
回答 2查看 2.1K关注 0票数 2

在mjml语句中添加额外的条件是有困难的。在mjml中有OR操作符吗?即使在他们的文档里也找不到。

我试着使用\,但是在将html抛到mailjet中时会出现错误。

以下是我尝试过的:

代码语言:javascript
运行
复制
      <mj-raw>{% if var:variable:"" != "" | var:variable:"" != "$0"%}</mj-raw>
      <mj-section padding="0 0 16px 0">
        <mj-group>
          <mj-column>
            <mj-text>
              <p class="left-aligned-line-item">Text</p>
            </mj-text>
          </mj-column>
          <mj-column>
            <mj-text>
              <p class="right-aligned-val header-bold">{{ var:variable:"" }}</p>
            </mj-text>
          </mj-column>
        </mj-group>
      </mj-section>
      <mj-raw>{% endif %}</mj-raw>
EN

回答 2

Stack Overflow用户

发布于 2022-01-05 21:09:56

我发现嵌套if语句是有效的。它有点笨重,但这是目前的解决方案。

代码语言:javascript
运行
复制
      <mj-raw>{% if var:variable:"" != "" %}</mj-raw>
      <mj-raw>{% if var:variable:"" != "$0"%}</mj-raw>
      <mj-section padding="0 0 16px 0">
        <mj-group>
          <mj-column>
            <mj-text>
              <p class="left-aligned-line-item">Text</p>
            </mj-text>
          </mj-column>
          <mj-column>
            <mj-text>
              <p class="right-aligned-val header-bold">{{ var:variable:"" }}</p>
            </mj-text>
          </mj-column>
        </mj-group>
      </mj-section>
      <mj-raw>{% endif %}</mj-raw>
      <mj-raw>{% endif %}</mj-raw>
票数 1
EN

Stack Overflow用户

发布于 2022-10-03 14:25:41

我花了相当长的时间试图让这个主题发挥作用,因为在撰写这篇文章时,关于这个主题的文档并不是最友好的。简而言之,MJML 不支持模板 (ref1ref2)。所以你必须自己动手。

一旦你选择了你的模板引擎,你基本上可以做引擎允许的任何事情。if/else语句是非常基本的,因此它们应该与您选择的任何解决方案一起工作。

您有一些模板选项,例如,如果您在Node.js上,您有车把 (最流行的)、EJS (最活跃的)、埃塔 (最有表现力的)等等。它们都有点不同,但允许您执行if / etc逻辑等操作(例如,将HTML转换为文本,这对于电子邮件非常有用)。

在我们这边,我们决定使用EJS,通常您会执行以下顺序:

  1. 编写MJML模板,包括包含模板引擎标记的<mj-raw>标记
  2. 使用模板引擎解析模板-这将删除特殊标记并处理if/else语句
  3. 使用MJML库解析模板-这将将标记转换为

MJML之前使用模板意味着您可以使用简单的MJML标记,并且仍然可以从MJML的CSS注入中获益,而不必将内联CSS复制到特定于模板的HTML中。这是维护的理想选择。

这就是解决方案的样子:

MJML 模板:(使用EJS语法)

代码语言:javascript
运行
复制
<mj-raw><!-- htmlmin:ignore --><% if (typeof greeting !== 'undefined' || greeting !== "some value") { %><!-- htmlmin:ignore --></mj-raw>
   <mj-text padding="8px 0"><%= greeting %></mj-text>
<mj-raw><!-- htmlmin:ignore --><% } %><!-- htmlmin:ignore --></mj-raw>

TypeScript代码:

代码语言:javascript
运行
复制
import ejs from 'ejs'
import mjml2html from 'mjml'
import { readFileSync } from 'node:fs'

// do stuff here

try {
  const mjml = readFileSync('email.mjml').toString()
  const emailProps: EmailProps = {
    greeting: messages.format(`greeting`, { fullName }),
  }
  const injectedMjml = ejs.render(mjml, emailProps)
  const mjmlParseResult = mjml2html(injectedMjml, { keepComments: false })
  if (mjmlParseResult.errors.length > 0) {
    throw new Error('error while parsing MJML')
  }
} catch (error) {
  // handle the errors here
}

// do more stuff here
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70597686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档