aleksip / plugin-data-transform
Pattern Lab PHP 的数据转换插件
Requires
- php: >=5.5.9
- drupal/core-render: ^8.7
- drupal/core-utility: ^8.7
- pattern-lab/core: ^2.6.3
README
安装
要在 Pattern Lab 根目录中安装和使用该插件,请运行以下命令
composer require aleksip/plugin-data-transform
配置选项
为了使 Attribute 对象支持正常工作,您的 Pattern Lab config.yml 文件需要以下设置
twigAutoescape: false
config.yml 中 Data Transform 插件特定选项的默认值如下
plugins: dataTransform: enabled: true verbose: false
启用和禁用插件
安装后,可以使用 enabled 设置启用和禁用 Data Transform 插件。
详细模式
有时在生成 Pattern Lab 时可能会出现数据文件问题,此时会显示带有长堆栈跟踪的 PHP 警告和/或通知。在一个大项目中,很难找到有问题的数据文件,但通过启用 Data Transform 插件的详细模式(使用 verbose 设置)可以帮助解决这个问题。
在详细模式下,Data Transform 插件会报告每个处理的模式以及所有数据转换函数。它还会抑制常规 PHP 错误消息,并以更易读的方式报告错误。
重要提示:由于详细模式的实现方式,如果使用了其他与 Twig Environment 对象交互的插件,它可能无法正常工作。
特性
支持包含模式的特定数据文件
Pattern Lab 核心仅支持全局数据文件和主模式的特定数据文件。此插件为包含模式添加了特定数据文件支持。此功能与该插件提供的所有 PatternEngines 中的包含函数一起工作,也与使用 Twig PatternEngine 的模板文件中的常规包含一起工作。
请注意,从 _data 目录中的全局数据被视为特定模式的数据,并将覆盖从父模式继承的数据。如果您想覆盖包含模式的数据库,可以使用 with 关键字。
数据转换函数
目前该插件为 Pattern Lab 读取的数据提供了四个转换函数。提供的示例是 JSON 格式,但 Pattern Lab 也支持 YAML。
包含模式文件
如果值包含简写部分语法中的模式名称,该插件会将值替换为渲染的模式
{
"key": "atoms-form-element-label-html"
}
支持传递变量(with)和禁用对默认数据的访问(only)的高级语法
{
"key": {
"include()": {
"pattern": "atoms-form-element-label-html",
"with": {
"title": "Textfield label"
},
"only": true
}
}
}
在两个示例中,key 的值将替换为渲染的模式。
有关 with 和 only 的更多信息,请参阅 Twig include 文档。
包含伪模式文件
您还可以使用简写部分语法通过替换波浪号(~)为破折号(-)来包含 伪模式。例如,伪模式 shila-card.html~variant.json 可以这样包含:
{
"key": "molecules-shila-card-html-variant"
}
连接文本值
{
"key": {
"join()": [
"molecules-comment-html",
"<div class=\"indented\">",
"molecules-comment-html",
"</div>",
"molecules-comment-html"
]
}
}
键值key将被替换为拼接的字符串。注意,在示例中molecules-comment-html是简短部分语法中模式的名字。这些将在拼接之前被替换为渲染后的模式。
创建Drupal Attribute对象
{
"key": {
"Attribute()": {
"id": ["edit-submit"],
"type": ["submit"],
"value": ["Submit"],
"class": ["button", "button-primary"]
}
}
}
键值key将被替换为一个Attribute对象。
创建Drupal Url对象
{
"key": {
"Url()": {
"url": "http://example.com",
"options": {
"attributes": {
"Attribute()": {
"class": ["link"]
}
}
}
}
}
}
键值key将被替换为一个Url对象。注意,在示例中,在创建Url对象之前,attributes的值将被替换为一个Attribute对象。