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
对象。