在mjml语句中添加额外的条件是有困难的。在mjml中有OR操作符吗?即使在他们的文档里也找不到。
我试着使用\,但是在将html抛到mailjet中时会出现错误。
以下是我尝试过的:
<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>
发布于 2022-01-05 21:09:56
我发现嵌套if
语句是有效的。它有点笨重,但这是目前的解决方案。
<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>
发布于 2022-10-03 14:25:41
我花了相当长的时间试图让这个主题发挥作用,因为在撰写这篇文章时,关于这个主题的文档并不是最友好的。简而言之,MJML
不支持模板 (ref1,ref2)。所以你必须自己动手。
一旦你选择了你的模板引擎,你基本上可以做引擎允许的任何事情。if/else
语句是非常基本的,因此它们应该与您选择的任何解决方案一起工作。
您有一些模板选项,例如,如果您在Node.js上,您有车把 (最流行的)、EJS (最活跃的)、埃塔 (最有表现力的)等等。它们都有点不同,但允许您执行if / etc逻辑等操作(例如,将HTML转换为文本,这对于电子邮件非常有用)。
在我们这边,我们决定使用EJS,通常您会执行以下顺序:
<mj-raw>
标记MJML
库解析模板-这将将标记转换为在MJML
之前使用模板意味着您可以使用简单的MJML
标记,并且仍然可以从MJML
的CSS注入中获益,而不必将内联CSS复制到特定于模板的HTML中。这是维护的理想选择。
这就是解决方案的样子:
MJML
模板:(使用EJS语法)
<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代码:
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
https://stackoverflow.com/questions/70597686
复制相似问题