Рендеринг нескольких файлов MJML в один файл / строку MJML - PullRequest
0 голосов
/ 24 октября 2018

Я нахожусь в процессе преобразования некоторых устаревших шаблонов электронной почты в mjml (используя mjml версии 4.2).Я использую функцию Azure (NodeJs), чтобы динамически добавлять содержимое в шаблоны с помощью руля и возвращать мне окончательный html email, который прекрасно работает.Я разделил разделы шаблона на разные файлы (верхний колонтитул, нижний колонтитул, вступление и т. Д.) И включил их, используя mj-include.

. В настоящее время это то, что я делаю.

  • Сначала я читаю основной файл mjml.

    var mjmlData = fs.readFileSync (filePath, 'utf8');

  • , затем запускаю mjml2html чтобы получить обработанный шаблон

    var htmlTemplateObject = mjml2html (mjmlData, {filePath: filePath});

  • Затем я запускаю руль для ввода динамического содержимого

    handlebars.compile (htmlTemplateObject.html) (req.body.data)

Мне нужно сначала запустить mjml2html, прежде чем использовать рули для динамического ввода данных, иначе рули не будут выбирать контентв файлах, которые я включил с mj-include.Из-за этого, например, если я скажу тег p в динамическом содержимом, стили не будут встроены, потому что я уже преобразовал свой шаблон mjml в html перед запуском handlebars.

Есть ли способ для меня получить полную mjml (с содержимым из файла, включенного с помощью mj-include), отображаемую в строку перед запуском mjml2html?

Любая помощь, которая ценится как нечто вродеmjml2string сделает это идеальным решением.

1 Ответ

0 голосов
/ 26 октября 2018

Я просмотрел репозиторий mjml github, чтобы выяснить, как он работает, поскольку MJML CLI необходимо каким-то образом объединить файлы в mj-include элементах перед преобразованием его в html.Я нашел код, который включает файлы и генерирует документ MJML в mjml-core/lib/includeExternal.

Все, что мне нужно было сделать, это импортировать его и использовать как

let mjmlTemplate = mjmlInclude(mjmlBaseTemplate, {filePath: mjmlBaseTemplateFilePath})

Затем язапустил руль для ввода динамического содержимого в шаблон и, наконец, запустил mjml2html(mjmlTemplate), чтобы получить окончательный HTML-файл.При этом мои стили вводились в теги от mj-style до html в динамическом контенте.

...