fork / craft-transform
转换 Craft 元素和字段数据结构
2.1.1
2023-04-03 10:20 UTC
Requires
- craftcms/cms: ^4.0
- league/fractal: ^0.19.2
README
目录
功能
- 将 Craft CMS 内容转换为自定义数据结构
- 为您的组件创建自定义转换器类
- 基于转换器缓存内容(通过提供
getCacheKey)
需求
- Craft CMS >= 3.5.x
设置
1. 安装
安装包
cd /path/to/project
composer require fork/craft-transform
2. 配置命名空间并创建转换器
- 将示例
config.php复制到您的 Craft 配置目录,并将其重命名为transform.php - 指定您的自定义转换器类的命名空间(在您的项目插件/模块中)。以下是一个示例
<?php return [ '*' => [ 'transformerNamespace' => '\company\project\transformers' ], 'dev' => [ 'enableCache' => false, ], 'staging' => [ 'enableCache' => true, ], 'production' => [ 'enableCache' => true, ], ];
在您的项目插件/模块中创建一个 transformers 目录以放置您的转换器。以下是一个示例转换器类
<?php namespace company\project\transformers; use Craft; use League\Fractal\TransformerAbstract; class FooterTransformer extends TransformerAbstract { public function transform() { $footer = Craft::$app->globals->getSetByHandle('footer'); $footerNavGlobals = $footer->footerNavigationElements->all(); $footerLinks = []; foreach ($footerNavGlobals as $linkEntry) { $link = [ 'href' => $linkEntry->navigationLink->getUrl(), 'name' => $linkEntry->navigationLink->getText(), 'slug' => $linkEntry->navigationLink->hasElement() ? $linkEntry->navigationLink->getElement()->slug : $linkEntry->navigationLink->getUrl(), 'target' => $linkEntry->navigationLink->getTarget() ]; $footerLinks[] = $link; } return $footerLinks; } }
用法
在您的模板中,您可以使用 craft.transform.getData()。第一个参数是可选的。它可以是您的 entry 以获取数据。它也可以是 null。第二个参数必须与相应的转换器类匹配。例如,传递 'Footer' 以使用 FooterTransformer。
{% set articleData = {
headline: entry.title,
contentBlocks: craft.transform.getData(entry, 'ContentBlocks')
} %}
{% include '@components/templates/article-page/article-page.twig' with {
header: craft.transform.getData(null, 'Header'),
headline: articleData.headline,
contentBlocks: articleData.contentBlocks,
footer: craft.transform.getData(null, 'Footer')
} only %}
路线图
- 缓存
- 标志
- 设置(而不是配置文件)