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 %}
路线图
- 缓存
- 标志
- 设置(而不是配置文件)