mistralys / mailcode
PHP 邮件代码语法解析库
Requires
- php: >=7.4
- ext-json: *
- giggsey/libphonenumber-for-php: ^8.12
- mistralys/application-localization: >=1.4
- mistralys/application-utils: >=2.1.2
- monolog/monolog: >=2.7
Requires (Dev)
- phpstan/phpstan: >=1.10
- phpunit/phpunit: >=9.6
- dev-master
- 3.3.2
- 3.3.1
- 3.3.0
- 3.2.4
- 3.2.3
- 3.2.2
- 3.2.1
- 3.2.0
- 3.1.5
- 3.1.4
- 3.1.3
- 3.1.2
- 3.1.1
- 3.1.0
- 3.0.4
- 3.0.3
- 3.0.2
- 3.0.1
- 3.0.0
- 2.1.7
- 2.1.6
- 2.1.5
- 2.1.4
- 2.1.3
- 2.1.2
- 2.1.1
- 2.1.0
- 2.0.0
- 1.9.1
- 1.9.0
- 1.8.4
- 1.8.3
- 1.8.2
- 1.8.1
- 1.8.0
- 1.7.1
- 1.7.0
- 1.6.0
- 1.5.10
- 1.5.9
- 1.5.8
- 1.5.7
- 1.5.6
- 1.5.5
- 1.5.4
- 1.5.3
- 1.5.2
- 1.5.1
- 1.5.0
- 1.4.7
- 1.4.6
- 1.4.5
- 1.4.4
- 1.4.3
- 1.4.2
- 1.4.1
- 1.4.0
- 1.3.2
- 1.3.1
- 1.3.0
- 1.2.1
- 1.2.0
- 1.1.9
- 1.1.8
- 1.1.7
- 1.1.6
- 1.1.5
- 1.1.4
- 1.1.3
- 1.1.2
- 1.1.1
- 1.1.0
- 1.0.1
- 1.0.0
- dev-feature/showprice
- dev-feature/SAHCP-1468
- dev-feature/hubl-extensions
This package is auto-updated.
Last update: 2024-08-28 08:17:45 UTC
README
PHP 邮件代码语法解析器
Mailcode 是为电子邮件创建的预处理命令语法。
它旨在使作者易于使用,并可在多种流行的网络格式中使用,从纯文本到 HTML 和 XML。Mailcode 语法的设计是冗长的,没有简写符号,以提高可读性和性能。
它被开发出来支持可互换的后端预处理语法,以便将这些统一成一种单一的语言。
语法
基本结构
所有命令遵循相同的结构。
无参数
{command}
带参数
{command subtype: parameters}
子类型可以在同一命令的两种模式之间切换。
可切换的标志以启用/禁用功能
{command subtype: parameters flagFoo: flagBar:}
命名参数
{command subtype: "value" name="param value"}
转义特殊字符
双引号
字符串字面量预期使用双引号 ("
) 引用。要在字符串字面量中使用双引号,可以使用反斜杠 (\
) 进行转义
{if contains: $PRODUCT.NAME "Search term with \"quotes\""}
注意:当使用工厂创建命令时,这会自动完成。
花括号
要在文档或字符串字面量中使用花括号,可以将其转义
{if contains: $PRODUCT.NAME "With \{braces\}"}
Literal braces: \{end\}
{end}
支持的命令
显示变量值
{showvar: $CUSTOMER.NAME}
显示日期和时间
使用当前区域的默认日期和时间设置
{showdate: $ORDER.DATE}
使用自定义的日期/时间格式
{showdate: $ORDER.DATE "d/m/Y"}
注意:有关如何指定日期和时间的详细信息,请参阅日期格式部分。
使用特定时区
{showdate: $ORDER.DATE "d.m.Y" timezone="Europe/Paris"}
{showdate: $ORDER.DATE "d.m.Y" timezone=$TIME_ZONE}
如果没有指定时区,则使用默认的 PHP 时区(这通常是 UTC
,除非服务器已进行不同配置)。
可以全局设置命令的默认时区,与原生的 PHP 时区分开
use Mailcode\Mailcode_Commands_Command_ShowDate; Mailcode_Commands_Command_ShowDate::setDefaultTimezone('Europe/Paris');
这将使所有 showdate
命令使用 Europe/Paris
,除非在命令中明确指定了特定的时区。
显示格式化的数字
要指定数字的格式,按照您希望其格式化的方式编写数字 1000
。这将相应地应用于值。
{shownumber: $ORDER.PRICE "1,000.00"}
这将使用逗号作为千位分隔符,点作为小数点,两位小数。
例如,10
将显示为 10.00
,而 5120.4
将显示为 5,120.40
。
零填充
零填充通过追加所需数字长度指定,如下所示
{shownumber: $MONTH "1000:##"}
散列符号的数量确定数字的目标长度。此示例将添加一个 2
的零填充,这意味着一个 5
将显示为 05
。
绝对数字
当处理负数时,可以使用 absolute:
关键字来确保不显示负号。
{shownumber: $ORDER.PRICE "1,000.00" absolute:}
显示文本片段
显示原始文本片段。换行符会自动转换为 HTML <br>
标签。
{showsnippet: $snippet_name}
要禁用 <br>
标签,请使用 nohtml:
关键字
{showsnippet: $snippet_name nohtml:}
显示带有或没有跟踪的 URL
URL 可以包含变量,甚至逻辑命令。使用 showurl
命令可以在目标语言级别渲染最终 URL,从而将这些集成到跟踪 URL 中。
添加跟踪
考虑以下 URL
{if variable: $COUNTRY == "fr"}
https://mistralys.fr
{else}
https://mistralys.eu
{end}
要使其可跟踪,请使用以下命令
{showurl: "TrackingID"}
{if variable: $COUNTRY == "fr"}
https://mistralys.fr
{else}
https://mistralys.eu
{end}
{showurl}
注意:命令必须以 {showurl} 结束,而不是 {end}。
在目标语言级别(例如Apache Velocity)上,这将首先评估if
命令的结果,以解析最终URL。这可以轻松地用于任何跟踪实现,这同样需要在目标语言级别上实现。
跟踪ID
跟踪ID用于识别文档中链接的位置,例如header-image
。如果省略或为空,将自动生成ID。
命令的最小版本如下所示
{showurl: ""}
https://mistralys.eu
{showurl}
默认生成的跟踪ID遵循以下方案:link-001
,其中包含一个在整个请求中唯一的链接计数器。可以像这样注册自定义ID生成器:
use \Mailcode\Mailcode_Commands_Command_ShowURL; use \Mailcode\Commands\Command\ShowURL\AutoTrackingID; // The method expects a callable, which must return a string. AutoTrackingID::setGenerator(static function(Mailcode_Commands_Command_ShowURL $command) : string { return 'trackingID'; });
添加查询参数
该命令允许指定要添加到目标URL中的其他查询参数,例如UTM参数等。
示例命令
{showurl: "TrackingID" "foo=bar" "other=value"}
https://mistralys.eu
{showurl}
生成的示例跟踪URL
https://track.domain?id=TrackingID&target=https%3A%2F%2Fmistralys.eu%3Ffoo%3Dbar%26other%3Dvalue
禁用跟踪
可以使用no-tracking:
关键字禁用跟踪,在这种情况下,仅使用评估的URL。仍然可以添加其他查询参数。
{showurl: no-tracking: "foo=bar"}
https://mistralys.eu
{showurl}
生成的URL
https://mistralys.eu?foo=bar
URL中的电话号码
{showphone}
命令可以将国家特定或国际格式化的电话号码转换为tel:
URL所需的E164格式。
每次您想添加电话链接时,请使用此
<a href="tel:{showphone: $PHONE "US" urlencode:}">{showvar: $PHONE}</a>
这将把电话号码转换成预期格式。
设置变量
字符串值
{setvar: $CUSTOMER.NAME = "value"}
算术运算
可以使用基本的算术运算,前提是目标语言支持这些运算。除非翻译器有将它们转换为特殊逻辑的特殊逻辑,否则通常直接通过翻译器传递。
{setvar: $AMOUNT = 45 * 2}
计数列表
count
参数允许指定一个列表变量来计数记录,并将数量存储在目标变量中。
{setvar: $AMOUNT count=$LIST_VAR}
省略等号
等号是隐含的,因此可以省略。
{setvar: $AMOUNT 45 * 2}
IF条件
基于变量的条件
{if variable: $CUSTOMER.NAME == "John"}
Hi, John.
{elseif variable: $CUSTOMER.NAME == "Jack"}
Howdy, Jack.
{end}
检查变量是否为空或非空
检查变量是否存在,或是否为空
{if empty: $CUSTOMER.NAME}
Customer name is empty.
{end}
检查变量是否存在且不为空
{if not-empty: $CUSTOMER.NAME}
{showvar: $CUSTOMER.NAME}
{end}
搜索子字符串
检查变量值是否包含字符串
{if contains: $PRODUCT.NAME "Search term"}
不区分大小写的搜索
{if contains: $PRODUCT.NAME "Search term" insensitive:}
搜索多个术语(如果找到任何术语则应用)
{if contains: $PRODUCT.NAME "Term 1" "Term 2" "Term 3"}
如果变量值不包含任何搜索术语,则匹配变量值
{if not-contains: $PRODUCT.NAME "Term 1" "Term 2" "Term 3"}
通过部分匹配搜索列表
如果变量包含多个记录,则可以在所有记录中通过属性搜索,而无需使用循环
{if list-contains: $PRODUCTS.NAME "Server"}
这将搜索所有产品的NAME
属性中的指定搜索术语。
该命令否则与contains
命令的行为相同,具有相同的选项。
不区分大小写的搜索
{if list-contains: $PRODUCTS.NAME "server" insensitive:}
否定搜索,仅当未找到搜索术语时应用
{if list-not-contains: $PRODUCTS.NAME "Hosting" "WordPress"}
通过正则表达式搜索列表
可以使用regex:
关键字将list-contains
切换到正则表达式模式
{if list-contains: $PRODUCTS.NAME regex: "\\ASuperName\\Z"}
注意:这可以与
insensitive:
关键字结合使用,以使正则表达式不区分大小写。
正则表达式在定义量词时可以使用花括号,例如{1,5}
。这是一个特殊情况,您不需要转义花括号。解析器将识别这些花括号,以便正则表达式保持可读性。
这两个命令都是有效的
{if list-contains: $PRODUCTS.NAME regex: "[0-9]{1,3}"}
{if list-contains: $PRODUCTS.NAME regex: "[0-9]\{1,3\}"}
通过精确匹配搜索列表
使用正则表达式可以通过使用开始和结束锚点\A
和\Z
来搜索精确匹配,但这不是很方便,也不是很易读。list-equals
命令正是这样做的。
{if list-equals: $PRODUCT.NAME "Search"}
这将仅当列表中的条目与“搜索”完全匹配时进行匹配。
它可以与insensitive:
关键字结合使用,以以不区分大小写的方式搜索完整的搜索术语。
通过开始或结束搜索列表
检查变量值是否以特定字符串开头
{if begins-with: $PRODUCT.NAME "Search"}
或检查它是否以特定字符串结尾
{if ends-with: $PRODUCT.NAME "term"}
两者都可以设置为不区分大小写
{if begins-with: $PRODUCT.NAME "Search" insensitive:}
数值比较
检查一个变量值是否大于一个特定数字
{if bigger-than: $PRODUCT.PRICE "220"}
或者检查它是否更小
{if smaller-than: $PRODUCT.PRICE "220"}
或者检查是否完全匹配
{if equals-number: $PRODUCT.PRICE "220"}
自由式条件
没有子类型,IF
条件不会进行验证,将直接传递到翻译后端。
{if: 6 + 2 == 8}
It means 8.
{end}
AND
和OR
组合
可以使用and:
和or:
关键字在同一命令中组合多个条件。两者都可以使用,但不能在同一命令中同时使用。子类型可以随意混合。
使用AND
{if variable: $ORDER.MONTH == 8 and contains: $ORDER.TYPE "new_customer"}
New customer order in August.
{end}
使用OR
{if not-empty: $CUSTOMER.POSTCODE or variable: $CUSTOMER.USE_INVOICE == "true"}
循环
{for: $NAME in $CUSTOMER.NAMES}
{showvar: $NAME}
{end}
跳出循环
{for: $NAME in $CUSTOMER.NAMES}
{if variable: $NAME == "John Doe"}
{break}
{end}
{showvar: $NAME}
{end}
在特定迭代停止
break-at
参数允许在特定的循环迭代次数(0
为基础)处停止循环。
{for: $ENTRY in $CUSTOMERS break-at=6}
{showvar: $ENTRY.NAME}
{end}
注释
可以添加注释来记录信息。当翻译到特定的预处理器语言时,是否使用它们取决于翻译器。通常,注释会被转换为目标语言。
{comment: "This is a comment."}
注意:注释可以包含特殊字符,但不能包含其他可能被误认为是命令的Mailcode命令或文本(使用括号{})。
值编码和解码
URL编码
要将变量值URL编码
{showvar: $CUSTOMER.NAME urlencode:}
相反操作也是可能的
{showvar: $CUSTOMER.NAME urldecode:}
IDN编码
要将变量值编码为IDN
{showvar: $CUSTOMER.NAME idnencode:}
相反操作也是可能的
{showvar: $CUSTOMER.NAME idndecode:}
加密值
加密值可以在目标后端系统渲染时解密。这旨在与键名一起使用,键名唯一标识了用于在后端解密值的加密密钥。
要使用后端系统的默认加密键名,添加一个空值的参数
{showvar: $CUSTOMER.NAME decrypt=""}
要使用特定的键名
{showvar: $CUSTOMER.NAME decrypt="keyname"}
默认键名
也可以设置一个默认键名,它将自动用于所有具有空解密参数的命令
use Mailcode\Decrypt\DecryptSettings; DecryptSettings::getDefaultKeyName('default-key');
调用此方法后,以下命令在功能上是等效的
{showvar: $CUSTOMER.NAME decrypt=""}
{showvar: $CUSTOMER.NAME decrypt="default-key"}
集成预处理
Mailcode是一种预处理器语言,旨在由预处理器服务解释,但某些命令被设计为可以直接由Mailcode本身进行原生预处理。一个例子是mono
命令,它将等宽格式应用于文本。
预处理是可选的,可以使用专门的PreProcessor类来完成。
注意:在翻译到像Apache Velocity这样的输出语法时,默认行为是删除多余的预处理器命令,因此翻译文本中不能有Mailcode命令。
使用PreProcessor
PreProcessor非常易于使用:给它一个带有Mailcode命令的字符串,所有支持预处理的命令都将被渲染。之后,可以将生成的字符串传递到保护实例或解析以获取命令。
$subject = '(Mailcode text)'; $processor = \Mailcode\Mailcode::create()->createPreProcessor($subject); $result = $processor->render();
注意:虽然预处理可以在文本保护后进行,但建议先进行,以避免不必要的命令解析的开销。此外,这些命令实际上可能生成新的Mailcode语法以进行解析。
将文本格式化为代码
This text is {mono}monospaced{end}.
预处理的文本将如下所示
This text is <code>monospaced</code>.
要创建<pre>
标签,添加多行关键字
{mono: multiline:}
This is a multiline code block.
{end}
这将给出以下预处理的文本
<pre> This is a multiline code block. </pre>
使用命令
关闭、打开和兄弟命令
具有关闭命令并使用{end}
命令关闭的循环命令和if语句等命令支持访问其兄弟命令以及相应的打开和关闭命令。
例如,if语句的关闭命令有getOpeningCommand()
方法,它返回关闭的if命令,反之亦然。具有elseif
和else
命令的结构允许遍历整个兄弟命令列表。
这使得处理复杂的命令结构变得容易。
日期格式
支持的格式化字符
ShowDate命令使用与PHP日期格式化函数兼容的格式化字符,但只允许其中的一部分。
d
日期,带前导零j
日期,不带前导零m
月份,带前导零n
月份,不带前导零y
年份,两位数Y
年份,四位数H
小时,24小时制,带前导零G
小时,24小时制,不带前导零h
小时,12小时制,带前导零g
小时,12小时制,不带前导零a
AM/PM 标记,小写i
分钟,带前导零s
秒,带前导零v
毫秒e
时区标识符,例如 "CET","Europe/Paris"
此外,还可以使用以下标点符号
.
点/
斜杠-
连字符:
冒号
访问格式信息
当使用ShowDate命令时,可以使用Mailcode_Date_FormatInfo类来访问可用日期格式的信息。它可以通过工厂方法全局访问
use Mailcode\Mailcode_Factory; $dateInfo = Mailcode_Factory::createDateInfo();
设置默认值
ShowDate命令使用Y/m/d
作为默认日期格式。格式信息类可以用来覆盖这个值
use Mailcode\Mailcode_Factory; $dateInfo = Mailcode_Factory::createDateInfo(); $dateInfo->setDefaultFormat('d.m.Y');
一旦设置,每次使用ShowDate命令且未指定自定义格式字符串时,它将使用此默认格式。
以编程方式访问格式化字符
为了能够在现有文档中集成mailcode,格式信息类提供了一个getFormatCharacters()
方法来获取所有可用字符的列表。
显示允许字符的简单文本列表
use Mailcode\Mailcode_Factory; $dateInfo = Mailcode_Factory::createDateInfo(); $characters = $dateInfo->getCharactersList(); foreach($characters as $character) { echo sprintf( '%s: "%s" %s', $character->getTypeLabel(), $character->getChar(), $character->getDescription() ); echo PHP_EOL; }
手动验证日期格式
使用validateFormat()
方法来验证日期格式字符串,并手动检索验证消息。ShowDate命令也使用相同的方法,但可以单独用于特定需求。
use Mailcode\Mailcode_Factory; $formatString = "d.m.Y H:i"; $dateInfo = Mailcode_Factory::createDateInfo(); $result = $dateInfo->validateFormat($formatString); if($result->isValid()) { echo 'Format is valid.'; } else { echo sprintf( 'Format is invalid: Error #%s, %s', $result->getCode(), $result->getErrorMessage() ); }
格式兼容性
Mailcode与HTML和XML配合良好。其严格的语法使其容易与大多数文本格式区分开来,除了CSS。在HTML中,所有样式标签都被忽略。
在过滤文本时保护命令
当需要过滤包含命令的文本或以可能破坏命令语法的其他方式解析时,保护机制允许轻松地将所有命令替换为中性占位符字符串。
假设要过滤的文本存储在$text
中
use Mailcode\Mailcode; $text = '(commands here)'; // create the safeguard instance for the text $safeguard = Mailcode::create()->createSafeguard($text); if(!$safeguard->isValid()) { // there are invalid commands in the text } // replace all commands with placeholders $filterText = $safeguard->makeSafe(); // do any required filtering and processing of the text // restore the placeholders to the full command texts $result = $safeguard->makeWhole($filterText);
提示:占位符对大小写不敏感,因此不会因为更改文本大小写而损坏。
避免分隔符冲突
默认情况下,占位符使用999
作为分隔符,例如:9990000000001999
。每个分隔符在同一请求中都有一个唯一的编号,右端零填充,使每个占位符在所有主题字符串中都是唯一的。
基于数字的占位符意味着它们对常见的文本转换具有抵抗力,如更改大小写或应用URL编码。
尽管如此,分隔符字符串可以根据需要进行调整
use \Mailcode\Mailcode; $text = '(Text with mailcode commands)'; $safeguard = Mailcode::create()->createSafeguard($text); $safeguard->setDelimiter('__');
例如,这将使分隔符看起来像__0000000001__
。
占位符一致性检查
当调用makeWhole()
时,保护机制将确保在目标字符串中最初替换的所有占位符仍然存在。如果它们不存在,将抛出异常。
访问占位符信息
可以轻松检索字符串中使用的占位符。确保在初始配置(例如设置分隔符)之后调用getPlaceholders()
。
use \Mailcode\Mailcode; $text = '(Mailcode commands here)'; $safeguard = Mailcode::create()->createSafeguard($text); $placeholders = $safeguard->getPlaceholdersCollection()->getAll(); foreach($placeholders as $placeholder) { $string = $placeholder->getReplacementText(); // the placeholder text $command = $placeholder->getCommand(); // the detected command instance $original = $placeholder->getOriginalText(); // the original command text }
应用格式化
默认情况下,使用安全机制的makeWhole
方法时,所有命令占位符都会被替换为命令的正常化语法。安全机制的格式化类提供了许多额外的格式化选项。在这种情况下,通过格式化类而不是安全机制本身来检索格式化字符串。
使用安全机制创建格式化实例
use \Mailcode\Mailcode; $text = '(Mailcode commands here)'; $safeguard = Mailcode::create()->createSafeguard($text); $formatting = $safeguard->createFormatting($safeguard->makeSafe());
注意:格式化与安全机制完全独立。安全机制实例保留原始文本。
替换器和格式化器
有两种类型的格式化器
- 替换器:这些将替换命令占位符本身(例如:命令的HTML语法高亮)。只能选择一个替换器。
- 格式化器:这些只会修改占位符周围的文本,而保留占位符不变。格式化器可以随意组合。
虽然不能选择多个替换器,但它们可以自由地与格式化器组合。
添加格式化器的方法反映了它们的类型
use \Mailcode\Mailcode; $text = '(Mailcode commands here)'; $safeguard = Mailcode::create()->createSafeguard($text); $formatting = $safeguard->createFormatting($safeguard->makeSafe()); $formatting->replaceWithHTMLHighlighting(); $formatting->formatWithMarkedVariables();
HTML高亮显示
HTML语法高亮显示器将以智能的方式对所有命令进行高亮显示。如果命令用于HTML标签属性或嵌套在标签中,添加高亮标记会破坏HTML结构,则不会对命令进行高亮显示。
use \Mailcode\Mailcode; $text = '(Mailcode commands here)'; $safeguard = Mailcode::create()->createSafeguard($text); $formatting = $safeguard->createFormatting($safeguard->makeSafe()); // Select to replace commands with syntax-highlighted commands $formatting->replaceWithHTMLHighlighting(); $highlighted = $formatting->toString();
这将添加高亮标记,但必要的CSS样式也必须在显示Mailcode的文档中可用。有关详细信息,请参阅“加载所需样式”部分。
排除高亮显示的标签
默认情况下,命令不会在<style>
和<script>
标签内高亮显示。可以轻松地向此列表添加更多标签,以根据您的需求自定义它。
use \Mailcode\Mailcode; $text = '(Mailcode commands here)'; $safeguard = Mailcode::create()->createSafeguard($text); $formatting = $safeguard->createFormatting($safeguard->makeSafe()); // Get the formatter instance $formatter = $formatting->replaceWithHTMLHighlighting(); // add a single tag to the exclusion list $formatter->excludeTag('footer'); // add several tags at once $formatter->excludeTags(array('footer', 'main', 'div'));
在此示例中,嵌套在<footer>
标签内的命令将不会高亮显示。
注意:排除标签检查会向上遍历整个标签嵌套链,这意味着以下命令也不会高亮显示,因为它包含在嵌套在<footer>
标签内的标签中。
<footer> <p> <b>{showvar: $FOO}</b> </p> </footer>
警告:解析器假设HTML是有效的。标签嵌套检查不处理嵌套错误。
加载所需样式
为了使高亮显示正常工作,必须在目标页中加载相应的CSS样式。
有两种方法可以实现这一点
包含样式表
确保加载包中的样式表文件css/highlight.css
。这需要知道包的供应商文件夹的确切URL。
<link rel="stylesheet" media="all" src="/vendor/mistralys/mailcode/css/highlight.css">
使用Styler实用工具
Styler实用工具类围绕CSS有许多方法。
创建/获取Styler实例
use Mailcode\Mailcode; $styler = Mailcode::create()->createStyler();
获取不带<style>
标签的原始CSS代码,例如,用于编译的样式表文件。
use Mailcode\Mailcode; $styler = Mailcode::create()->createStyler(); $css = $styler->getCSS();
获取包含<style>
标签的CSS,例如,将其内联添加到页面中。
use Mailcode\Mailcode; $styler = Mailcode::create()->createStyler(); $styleTag = $styler->getStyleTag();
获取样式表文件的绝对路径。
use Mailcode\Mailcode; $styler = Mailcode::create()->createStyler(); $path = $styler->getStylesheetPath();
使用URL获取<link>
标签,通过URL访问vendor
文件夹。
use Mailcode\Mailcode; $styler = Mailcode::create()->createStyler(); $linkTag = $styler->getStylesheetTag('/url/to/vendor/folder');
使用URL获取样式表文件的URL,通过URL访问vendor
文件夹。
use Mailcode\Mailcode; $styler = Mailcode::create()->createStyler(); $stylesheetURL = $styler->getStylesheetURL('/url/to/vendor/folder');
在最终文档中高亮显示变量
"MarkVariables"高亮显示器允许高亮显示(非语法高亮显示)所有变量类型的命令,即使它们已经通过邮件预处理器处理。这在测试时很有用,可以快速识别HTML文档中所有使用变量的位置。
use Mailcode\Mailcode; $htmlString = '(HTML with Mailcode commands here)'; $safeguard = Mailcode::create()->createSafeguard($htmlString); $formatting = $safeguard->createFormatting($safeguard->makeSafe()); // Get the formatter instance $formatter = $formatting->formatWithMarkedVariables();
与语法高亮显示器一样,这只会高亮显示在有效上下文中的变量。
注意:这可以与其他任何格式化器组合,如语法高亮显示器。
通过样式标签加载样式
可以使用getStyleTag
方法获取所需的样式标签。
use Mailcode\Mailcode; $htmlString = '(HTML with Mailcode commands here)'; $safeguard = Mailcode::create()->createSafeguard($htmlString); $formatting = $safeguard->createFormatting($safeguard->makeSafe()); $formatter = $formatting->formatWithMarkedVariables(); $styles = $formatter->getStyleTag();
然后只需将其添加到目标文档中。
内联集成样式
对于HTML邮件或难以注入样式的场合,内联模式将自动将必要的样式添加到每个命令实例。
如下启用内联模式
use Mailcode\Mailcode; $htmlString = '(HTML with Mailcode commands here)'; $safeguard = Mailcode::create()->createSafeguard($htmlString); $formatting = $safeguard->createFormatting($safeguard->makeSafe()); $formatter = $formatting->formatWithMarkedVariables(); $formatter->makeInline();
转换为其他语法
翻译器类使得将带有邮件代码的文档转换为其他语法变得简单,例如捆绑的Apache Velocity转换器。
翻译整个字符串
use Mailcode\Mailcode; $string = '(Text with Mailcode commands here)'; // create the safeguarder instance for the subject string $safeguard = Mailcode::create()->createSafeguard($string); // create the translator $apache = Mailcode::create()->createTranslator()->createApacheVelocity(); // convert all commands in the safeguarded string $convertedString = $apache->translateSafeguard($safeguard);
翻译单个命令
use Mailcode\Mailcode; use Mailcode\Mailcode_Factory; // create the translator $apache = Mailcode::create()->createTranslator()->createApacheVelocity(); // create a command $command = Mailcode_Factory::set()->var('VAR.NAME', '8'); // convert it to an apache velocity command string $apacheString = $apache->translateCommand($command);
翻译为:Apache Velocity
请参阅Velocity文档。
翻译为:Hubspot HubL
请参阅HubL文档。
浏览器支持的工具
在子文件夹tools
中有一些用于在浏览器中使用的实用工具。要使用这些工具,请在包的文件夹中运行composer install
,并将浏览器指向该位置。
- 语法转换器:将带有Mailcode命令的文档转换为支持的语法。
- 语法高亮器:对带有Mailcode命令的文档进行语法高亮显示。
- 电话国家提取器:提取
showphone
命令的国家列表。