MJML: mj-include не может прочитать файл

Во-первых, я новичок в разметке писем. Поэтому я решил использовать mjml для создания письма, но столкнулся с проблемой - разметка не отображается должным образом: MJML не содержит компонентов, и я не могу понять, почему. Проект был создан с использованием пакета npm mjml-component-mixerplate, потому что я хотел зарегистрировать свои собственные компоненты.

мой index.mjml

<mj-body>
    <mj-include path="./components/blocks/header.mjml" />
    <mj-include path="./components/blocks/main.mjml" />
    <mj-include path="./components/blocks/footer.mjml" />
  </mj-body>

часть выходных данных index.html (то же самое с main.mjml и footer.mjml)

<div>
        <!-- mj-include fails to read file : ./components/blocks/header.mjml at D:\projects\ctc_projects\chetv\site\reshala_promo\email\components\blocks\header.mjml -->

header.mjml

<mj-section>
    <mj-column>
        <mj-div css-class="header">
            <mj-image
                    src="/assets/images/logo.png"
                    alt="ЧЕ!"
                    title="https://chetv.ru/"
                    href="https://chetv.ru/"
                    target="__blank"
                    css-class="header__logo"
            />
        </mj-div>
    </mj-column>
</mj-section>

и, на случай, если это будет иметь смысл, мой компонент MjDiv

import { registerDependencies } from 'mjml-validator'
import { BodyComponent } from 'mjml-core'

registerDependencies({
    'mj-body': ['mj-div'],
    'mj-column': ['mj-div'],
    'mj-section': ['mj-div'],

    'mj-div': [
        'mj-text', 'mj-image', 'mj-accordion',
        'mj-carousel', 'mj-divider', 'mj-group',
        'mj-navbar', 'mj-raw', 'mj-social',
        'mj-div', 'mj-a', 'mj-p', 'mj-h1'
    ]
});

export default class MjDivComponent extends BodyComponent {
  static endingTag = true;

  static allowedAttributes = {
      'css-class': 'css-class',
      'style': 'style'
  };

  render() {
    return `<div
        ${this.htmlAttributes({
          class: this.getAttribute('css-class'),
          style: this.getAttribute('style')
        })}
      >${this.getContent()}</div>`;
  }
}

2 ответа

Вы демонстрируете <mj-include> компоненты после <mj-body> (как показано в https://mjml.io/documentation/). Это не работает для меня там.

Это работает для меня, когда я ставлю <mj-include> элементы после <mj-head>, Удачи!

Я интерпретирую остальную часть вашего поста как фон, не задавая другого вопроса. Дайте мне знать, если иначе.

Кстати, помимо stackru, еще одним отличным источником информации MJML является https://mjml.slack.com/.

В файлах, которые вы включаете, отсутствует mj-wrapper

<mj-wrapper>
<mj-section>
<mj-column>
   ... Content here
</mj-column>
</mj-section>
</mj-wrapper>

Без MJ-оболочки ваш MJML не является действительным кодом.

    <mj-section padding="0px">
        <mj-column>
            <mj-text align="center" padding="0px">
              <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css">
            </mj-text>
        </mj-column>
    </mj-section>
Другие вопросы по тегам