将 MJML 集成到 Neos。与 Garagist.Mautic 一起使用效果极佳
Requires
- php: ^8.0
- carbon/eel: ^2.0
- carbon/notification: ^2.4
- garagist/plaintext: ^0.1
- neos/neos: ^7.3 || ^8.0
Suggests
- garagist/mautic: To use the Mautic integration
README
MJML 是一种标记语言,通过提供语义语法和丰富的标准组件库来构建响应式电子邮件模板。
此包添加了编译 MJML 标记的 Eel Helper 以及一些 Fusion 原型,允许使用 TailwindCSS 类。但稍后我们再详细说明。
安装
将包添加到您的站点包中
composer require --no-update garagist/mjml
然后在项目根目录中运行 composer update
使用方法
您可以使用来自 MJML 的官方 API 或与 Docker 以及 Adrian Rudnik 的 MJML 镜像 一起使用此包。
使用 MJML 官方 API
要使用 MJML API,将 apiEndpoint 设置为 true。您还必须设置 applicationID 和 secretKey。如果您不想使用环境变量,您可以直接在您的 Settings.yaml 文件中覆盖它们。
Garagist: Mjml: apiEndpoint: true applicationID: "%env:MJML_API_APPLICATION_ID%" secretKey: "%env:MJML_API_SECRET_KEY%"
使用 Docker
设置环境变量 MJML_API_ENDPOINT,或在您的 Settings.yaml 中设置它
Garagist: Mjml: apiEndpoint: "mjml:80"
使用 ddev 进行开发
如果您使用 ddev 进行开发,可以使用以下配置
version: "3.6" services: mjml: container_name: ddev-${DDEV_SITENAME}-mjml hostname: ${DDEV_SITENAME}-mjml image: adrianrudnik/mjml-server labels: com.ddev.site-name: ${DDEV_SITENAME} com.ddev.approot: $DDEV_APPROOT environment: - HTTP_EXPOSE=8080 - CORS=* - MJML_KEEP_COMMENTS=true - MJML_VALIDATION_LEVEL=strict - MJML_MINIFY=false - MJML_BEAUTIFY=true - HEALTHCHECK=false
之后,您的 MJML 端点可能是这样的 ddev-DDEV_SITENAME-mjml:80
Mixin 隐藏节点
此包添加了一个节点类型 Mixin Garagist.Mjml:Mixin.Visibility。使用它,您只能在网站上或在通讯录中显示内容节点。只需将 Mixin 添加到您的内容节点即可
Foo.Bar:Content.Text: superTypes: Garagist.Mjml:Mixin.Visibility: true
Fusion 原型
此包添加了几个 Fusion 原型,以便更容易地集成您的 MJML 标记。让我们从小的开始
Garagist.Mjml:Presentation.Spacer
此原型非常适合在元素之间添加间隔。如果您想添加一个宽度为全宽、高度为 40px 的彩色栏,可以这样做
<Garagist.Mjml:Presentation.Spacer fullWidth={true} height={40} background-color="#00adee" />
除了 fullWidth 和 height 之外的所有属性都传递给 mj-section。
Garagist.Mjml:Presentation.Image
这是一个渲染 mj-image 或 mj-carousel-image 的小助手。在一个 mj-carousel 中,将 carousel 设置为 true 以渲染 mj-carousel-image。
image 属性
image 属性是一个 Neos.Fusion:DataStructure,您可以传递来自 Neos.Neos:ImageUri 的所有选项。
thumbnail 属性
thumbnail 属性是一个 Neos.Fusion:DataStructure,您可以传递来自 Neos.Neos:ImageUri 的所有选项。这用于设置一个不同的图像,使其缩略图与链接的图像不同。如果将 carousel 设置为 false,则此属性无效果。
除了 carousel、image 和 thumbnail 之外的所有属性都传递到 mj-image 或 mj-carousel-image。
Garagist.Mjml:Presentation.Page
这是 Fusion MJML 原型的核心。它生成 MJML 代码,并将其编译为 HTML。它有以下属性:
颜色
为每个颜色集添加多个 mj-class 标签。在此,颜色键作为前缀来控制每个属性。以下是一个配置示例:
Garagist: Mjml: theme: colors: black: "#000" tahiti: light: "#67e8f9" DEFAULT: "#06b6d4" dark: "#0e7490"
使用 <mj-text mj-class="text-black"> 将文本颜色设置为黑色。使用 <mj-text mj-class="text-tahiti-light"> 将文本颜色设置为 #67e8f9。一个特殊情况是 DEFAULT 值:可以通过不指定 DEFAULT 来达到这个值:<mj-text mj-class="text-tahiti">。
text-COLOR-PATH设置colorbg-COLOR-PATH设置background-colorcontainer-bg-COLOR-PATH设置container-background-colorinner-bg-COLOR-PATH设置inner-background-color
字体大小
为每个字体大小集添加多个 mj-class 标签。以下是一个配置示例:
Garagist: Mjml: theme: fontSize: xs: pixel: 12 lineHeight: 16px sm: 14
使用 <mj-text mj-class="text-xs"> 将字体大小设置为 12 像素和行高为 16px。使用 <mj-text mj-class="text-sm"> 将字体大小设置为 14 像素。
字体粗细
为每个字体粗细集添加多个 mj-class 标签。以下是一个配置示例:
Garagist: Mjml: theme: fontWeight: normal: 400 semibold: 600
使用 <mj-text mj-class="font-normal"> 将字体粗细设置为 400。使用 <mj-text mj-class="font-semibold"> 将字体粗细设置为 600。
Garagist.Mjml:Helper.Visibility
这个小助手读取属性 mjmlVisibility(来自混合 Garagist.Mjml:Mixin.Visibility)并根据请求中的参数和用户是否在后台返回 true 或 false。此原型自动添加到 Neos.Neos:ContentComponent 和 Neos.Neos:Content。
Garagist.Mjml:Component
此原型使用 Neos.Fusion:Component 并添加了助手 Garagist.Mjml:Helper.Visibility。
Garagist.Mjml:Page
此原型使用 Garagist.Mjml:Presentation.Page 并设置以下属性:
language:设置<html>标签的lang属性- 如果设置了
language,则将其用作语言。 - 如果存在
languageDimension(默认设置为language),则使用documentNode的语言。 - 如果没有设置语言维度,则使用
Neos.Flow.i18n.defaultLocale作为语言。 - 如果以上所有设置都无法完成,则不定义语言。
- 如果设置了
title:尝试从documentNode获取属性titleOverride或titledebugUrl:生成当前 URL 的 URL 用于日志输出
此外,还将采用各种原型
Neos.Neos:ContentCase- 检查是否存在具有
.Mjml(例如Foo.Bar:Content.Text.Mjml)的原型并输出它。 - 如果没有找到原型,则会根据
Garagist.Mjml.debugOutputMode设置创建一条渲染器未找到的消息。以下是一些可能的值:true:创建一个可见的警告消息comment:创建一个带有警告的 HTML 注释false:不输出警告消息
- 默认情况下,在
开发环境下发出可见警告,在生产环境下隐藏警告。
- 检查是否存在具有
Neos.Neos:NodeUri:将absolute设置为trueNeos.Neos:ConvertUris:- 将
absolute设置为true - 将
forceConversion设置为true - 将
externalLinkTarget设置为'' - 将
resourceLinkTarget设置为''
- 将
Eel 辅助函数
Mjml.compile(mjml, url)
将 mjml 字符串编译为 HTML。其中 url 用于日志输出。
Mjml.theme(path)
从 Garagist.Mjml.theme 获取设置。它与 eel 辅助函数 Configuration.setting 类似,只是对 DEFAULT 值有特殊处理:如果您设置了以下颜色
Garagist: Mjml: theme: colors: tahiti: light: "#67e8f9" DEFAULT: "#06b6d4" dark: "#0e7490"
Mjml.theme('colors.tahiti') 将返回 #06b6d4,因为这是默认值。其他值如 Mjml.theme('colors.tahiti.dark') 等将返回相应的颜色。简而言之,它的工作方式类似于 theme() 函数在 TailwindCSS。