将多个 MJML 文件渲染为一个 MJML file/string
Render multiple MJML files into one MJML file/string
我正在将一些旧电子邮件模板转换为 mjml
(使用 mjml 4.2 版)。我正在使用 Azure Function (NodeJs) 使用把手动态地将内容添加到模板,return 我最后的 html email
,效果很好。我已将模板的各个部分分成不同的文件(页眉、页脚、简介等),并使用 mj-include
.
将它们包括在内
目前这就是我正在做的事情。
我首先阅读了主要的 mjml 文件。
var mjmlData = fs.readFileSync(文件路径, 'utf8');
然后运行mjml2html
得到模板渲染
var htmlTemplateObject = mjml2html(mjmlData, {filePath: filePath});
然后我运行 handlebars 注入动态内容
handlebars.compile(htmlTemplateObject.html)(req.body.data)
在使用 handlebars 动态注入数据之前,我必须先 运行 mjml2html,否则 handlebars 不会选择我包含在 mj-include
中的文件中的内容。因此,如果我在动态内容中说了一个 p
标签,样式将不会内联,因为我已经在 [= 之前将我的 mjml
模板转换为 html
60=]宁 handlebars
.
有没有办法让我在 运行ning mjml2html
之前将完整的 mjml
(使用 mj-include
包含的文件中的内容)渲染成字符串?
如 mjml2string
之类的任何帮助都将成为一个完美的解决方案。
我浏览了 mjml
github
存储库以了解它是如何工作的,因为 MJML CLI
需要以某种方式组合 mj-include
元素中的文件,然后再将其转换为 html
。我在 mjml-core/lib/includeExternal
.
中找到了包含文件并生成 MJML
文档的代码
我所要做的就是导入它并将其用作
let mjmlTemplate = mjmlInclude(mjmlBaseTemplate, {filePath: mjmlBaseTemplateFilePath})
然后我 运行 handlebars 将动态内容注入模板,最后 运行 mjml2html(mjmlTemplate)
得到最终的 html 文件。这样做将我的样式注入 mj-style
到动态内容中的 html
标签。
我不声称答案是我的,但它可以作为对上述内容的更新。我在 MJML 团队的 MJML Slack 上看到了这个。适用于 MJML 4.10.1 的源代码。
Hi !
You can use the mjml parser as we use it in mjml-core here
https://github.com/mjmlio/mjml/blob/master/packages/mjml-core/src/index.js#L128-L135
and convert back the json to xml (we have a internal helper for that too
https://github.com/mjmlio/mjml/blob/master/packages/mjml-core/src/helpers/jsonToXML.js )
Don't forget to require the full mjml package first to load register every standard components
我正在将一些旧电子邮件模板转换为 mjml
(使用 mjml 4.2 版)。我正在使用 Azure Function (NodeJs) 使用把手动态地将内容添加到模板,return 我最后的 html email
,效果很好。我已将模板的各个部分分成不同的文件(页眉、页脚、简介等),并使用 mj-include
.
目前这就是我正在做的事情。
我首先阅读了主要的 mjml 文件。
var mjmlData = fs.readFileSync(文件路径, 'utf8');
然后运行
mjml2html
得到模板渲染var htmlTemplateObject = mjml2html(mjmlData, {filePath: filePath});
然后我运行 handlebars 注入动态内容
handlebars.compile(htmlTemplateObject.html)(req.body.data)
在使用 handlebars 动态注入数据之前,我必须先 运行 mjml2html,否则 handlebars 不会选择我包含在 mj-include
中的文件中的内容。因此,如果我在动态内容中说了一个 p
标签,样式将不会内联,因为我已经在 [= 之前将我的 mjml
模板转换为 html
60=]宁 handlebars
.
有没有办法让我在 运行ning mjml2html
之前将完整的 mjml
(使用 mj-include
包含的文件中的内容)渲染成字符串?
如 mjml2string
之类的任何帮助都将成为一个完美的解决方案。
我浏览了 mjml
github
存储库以了解它是如何工作的,因为 MJML CLI
需要以某种方式组合 mj-include
元素中的文件,然后再将其转换为 html
。我在 mjml-core/lib/includeExternal
.
MJML
文档的代码
我所要做的就是导入它并将其用作
let mjmlTemplate = mjmlInclude(mjmlBaseTemplate, {filePath: mjmlBaseTemplateFilePath})
然后我 运行 handlebars 将动态内容注入模板,最后 运行 mjml2html(mjmlTemplate)
得到最终的 html 文件。这样做将我的样式注入 mj-style
到动态内容中的 html
标签。
我不声称答案是我的,但它可以作为对上述内容的更新。我在 MJML 团队的 MJML Slack 上看到了这个。适用于 MJML 4.10.1 的源代码。
Hi ! You can use the mjml parser as we use it in mjml-core here https://github.com/mjmlio/mjml/blob/master/packages/mjml-core/src/index.js#L128-L135 and convert back the json to xml (we have a internal helper for that too https://github.com/mjmlio/mjml/blob/master/packages/mjml-core/src/helpers/jsonToXML.js )
Don't forget to require the full mjml package first to load register every standard components