lukaskleinschmidt/kirby-snippet-controller

Kirby Snippet Controller

2.2.0 2023-11-06 15:21 UTC

This package is auto-updated.

Last update: 2024-09-06 17:33:43 UTC


README

以与页面控制器类似的方式定义代码片段控制器。

如何使用它

默认情况下,插件将尝试在您的 snippets 目录中查找控制器。让我们看看一个示例 header 代码片段。

📁 snippets
├─ 📄 header.controller.php
└─ 📄 header.php
// header.controller.php

// The return value can be a callback
return function ($site) {
    return [
        'title' => $site->title(),
    ];
};

// Or you can simply return an array.
return [
    'title' => site()->title(),
];

您还可以在插件中定义代码片段控制器。

Kirby::plugin('superwoman/superplugin', [
    'snippets' => [

        // Refer to a file
        'header.controller' => __DIR__ . '/snippets/header.controller.php',

        // Return an array
        'header.controller' => [
            'title' => site()->title(),
        ],

        // Return a callback
        'header.controller' => function ($site) {
            return [
                'title' => $site->title(),
            ];
        },

    ],
]);

控制器中的可用回调参数

您可以访问在代码片段中可访问的所有变量。如果您向代码片段传递额外的数据,您也可以在控制器中访问它。

注意 自版本 2.0.0 和 Kirby 3.9.6 起您也可以使用可变参数。

snippet('header', data: ['title' => 'My Title'])

// header.controller.php

return function (string $title = 'Default Title', ...$args) {
    return [
        'title' => $title,
    ];
};

注意 自版本 2.1.0 起您可以在使用控制器回调时覆盖变量。

snippet('header', data: ['size' => $page->size()])

// header.controller.php

return function (Field|string $size = null) {

    if ($size instanceof Field) {
        $size = $size->value();
    }

    $size = match ($size) {
        'small'  => 'height: 50vh',
        'medium' => 'height: 80vh',
        default  => 'height: 100vh',
    };

    return [
        'size' => $size,
    ];
};

注意 自版本 2.2.0 起您可以在控制器回调中防止代码片段渲染。

snippet('header', data: ['size' => $page->size()])

// header.controller.php

return function (Field|string $size = null) {
    if (is_null($size)) {
        snippet_prevent();
    }

    return [
        'size' => $size,
    ];
};

命名约定

默认情况下,插件通过将 .controller 添加到代码片段名称来搜索控制器。您可以在选项中更改名称解析器。更改名称也会影响插件定义的控制器。

// config.php

return [
    'lukaskleinschmidt.snippet-controller' => [

        // The default resolver
        'name' => fn (string $name) => $name . '.controller',

        // You might want to store controllers in a separate folder
        'name' => fn (string $name) => 'controllers/' . $name,

    ],
];

商业用途

此插件是免费的。如果您在商业项目中使用它,请考虑捐款

安装

下载

下载并将此存储库复制到 /site/plugins/snippet-controller

Git 子模块

git submodule add https://github.com/lukaskleinschmidt/kirby-snippet-controller.git site/plugins/snippet-controller

Composer

composer require lukaskleinschmidt/kirby-snippet-controller

许可协议

MIT

鸣谢