首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多个MJML文件呈现为一个MJML文件/字符串

将多个MJML文件呈现为一个MJML文件/字符串
EN

Stack Overflow用户
提问于 2018-10-24 15:44:48
回答 2查看 2.2K关注 0票数 4

我正在将一些遗留电子邮件模板转换为mjml (使用mjmlVersion4.2)。我使用Azure函数(NodeJs)使用工具栏动态地向模板添加内容,并返回最终的html email,这非常有效。我已经将模板的部分分割成不同的文件(页眉、页脚、介绍等)。我已经用mj-include把它们包括进来了。

目前这就是我要做的。

  • 我首先读取主mjml文件。 变量mjmlData = fs.readFileSync(filePath,'utf8');
  • 然后运行mjml2html以获得呈现的模板 htmlTemplateObject = mjml2html(mjmlData,{filePath: filePath});
  • 然后运行车把注入动态内容。 handlebars.compile(htmlTemplateObject.html)(req.body.data)

在使用工具栏动态注入数据之前,我必须先运行mjml2html,否则工具栏将不会在mj-include中包含的文件中选择内容。因此,如果我在动态内容中有一个p标记,那么样式就不会内联,因为在运行handlebars之前,我已经将mjml模板转换成了html

是否有一种方法可以在运行mjml之前将完整的mjml2html (包括使用mj-include的文件中的内容)呈现为字符串

任何像mjml2string这样的帮助都会使它成为一个完美的解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-10-26 09:11:35

我查看了mjml github存储库,以了解它是如何工作的,因为MJML CLI需要在将其转换为html之前以某种方式组合mj-include元素中的文件。我找到了包含文件的代码,并在MJML中生成了mjml-core/lib/includeExternal文档。

我所要做的就是导入它并将它用作

代码语言:javascript
复制
let mjmlTemplate = mjmlInclude(mjmlBaseTemplate, {filePath: mjmlBaseTemplateFilePath})

然后运行工具栏将动态内容注入模板,最后运行mjml2html(mjmlTemplate)以获得最终的html文件。这样做可以将我在mj-style中的样式注入动态内容中的html标记。

票数 1
EN

Stack Overflow用户

发布于 2021-07-05 21:17:02

我不认为答案是我的,但它是对上述问题的更新。我在MJML团队的MJML Slack上看到了这种情况。适用于MJML 4.10.1的源代码。

嗨!您可以使用mjml解析器,就像我们在mjml-core中使用https://github.com/mjmlio/mjml/blob/master/packages/mjml-core/src/index.js#L128-L135一样,并将json转换回xml (我们也有一个内部助手,用于此https://github.com/mjmlio/mjml/blob/master/packages/mjml-core/src/helpers/jsonToXML.js )。 不要忘记首先需要完整的mjml包来加载每个标准组件。

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

https://stackoverflow.com/questions/52973121

复制
相关文章

相似问题

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