跳至主要内容

小工具

创建小部件,在网站不同位置渲染小块内容。

为了确定小部件内容的渲染位置,管理面板设有“小部件”部分,用于发布由主题定义的特定位置的小部件。扩展和主题都可以附带小部件,开发过程没有区别。

定义控件位置

你可以在主题中定义任意数量的小部件位置。index.php

'positions' => [

    'sidebar' => 'Sidebar',
    'footer' => 'Footer',

],

渲染控件

要渲染在控件位置内发布的任何内容,可以使用主题文件中的视图渲染器实例。views/template.php

<?php if ($view->position()->exists('sidebar')) : ?>
    <?= $view->position('sidebar') ?>
<?php endif; ?>

注册一个新的控件类型

要注册一个新的控件类型,你可以在文件中利用该属性。widgetsindex.php

'widgets' => [

    'widgets/hellowidget.php'

],

定义一个新的控件类型

在内部,Pagekit 中的小部件是一个模块。因此,它通过模块定义定义:一个具有特定属性集合的PHP数组。

widgets/hellowidget.php:

<?php

return [

    'name' => 'hello/hellowidget',

    'label' => 'Hello Widget',

    'events' => [

        'view.scripts' => function ($event, $scripts) use ($app) {
            $scripts->register('widget-hellowidget', 'hello:js/widget.js', ['~widgets']);
        }

    ],

    'render' => function ($widget) use ($app) {

        // ...

        return $app->view('hello/widget.php');
    }

];

这个例子需要以下两个文件来在前端渲染小部件,一个是 JavaScript 文件,另一个是 PHP 文件。

js/widget.js:

window.Widgets.components['system-login:settings'] = {

    section: {
        label: 'Settings'
    },

    template: '<div>Your form markup here</div>',

    props: ['widget', 'config', 'form']

};

views/widget.php:

<p>Hello Widget output.</p>
注释

一个完整小部件的好例子位于 Pagekit 核心中。app/system/modules/user/widgets/login.php