MJML: mj-include 读取文件失败
MJML: mj-include fails to read file
首先,我是电子邮件标记方面的新手。所以我决定使用 mjml 来构造一封信,但我遇到了问题 - 标记没有正确呈现:
MJML 不包含组件,我不明白为什么。项目是使用 npm 包 mjml-component-boilerplate 创建的,因为我想注册我自己的组件。
我的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>`;
}
}
您演示了将 <mj-include>
组件放在 <mj-body>
之后(如 https://mjml.io/documentation/#mj-include 中所示)。它对我来说不起作用。
当我将 <mj-include>
元素放在 <mj-head>
之后时,它 对我有效 。祝你好运!
我将您 post 的其余部分解释为背景,而不是问另一个问题。如果没有,请告诉我。
顺便说一下:除了 Whosebug,MJML 信息的另一个重要来源是 https://mjml.slack.com。
<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>
首先,我是电子邮件标记方面的新手。所以我决定使用 mjml 来构造一封信,但我遇到了问题 - 标记没有正确呈现: MJML 不包含组件,我不明白为什么。项目是使用 npm 包 mjml-component-boilerplate 创建的,因为我想注册我自己的组件。
我的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>`;
}
}
您演示了将 <mj-include>
组件放在 <mj-body>
之后(如 https://mjml.io/documentation/#mj-include 中所示)。它对我来说不起作用。
当我将 <mj-include>
元素放在 <mj-head>
之后时,它 对我有效 。祝你好运!
我将您 post 的其余部分解释为背景,而不是问另一个问题。如果没有,请告诉我。
顺便说一下:除了 Whosebug,MJML 信息的另一个重要来源是 https://mjml.slack.com。
<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>