fork/craft-transform

转换 Craft 元素和字段数据结构

安装量: 3,272

依赖项: 0

建议者: 0

安全性: 0

星标: 2

关注者: 8

分支: 0

开放问题: 1

类型:craft-plugin

2.1.1 2023-04-03 10:20 UTC

This package is auto-updated.

Last update: 2024-09-03 13:24:00 UTC


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 %}

路线图

  • 缓存
  • 标志
  • 设置(而不是配置文件)
Fork Logo

Fork Unstable Media GmbH 提供