首页 >后端开发 >php教程 >如何构建一个十月cms小部件插件

如何构建一个十月cms小部件插件

Christopher Nolan
Christopher Nolan原创
2025-02-18 12:47:10175浏览

>本文深入研究构建一个Octincms后端窗口小部件插件,并在基本插件创建上扩展。我们将开发一个“快速注释”窗口小部件,镜像WordPress的快速草稿功能。

>

How to Build an OctoberCMS Widget Plugin

密钥概念:

  • 插件用php artisan create:plugin>。
  • 扩展用户模型以管理特定于用户的注释。
  • 为后端仪表板实现报告窗口小部件(QuickNoteWidget)。
  • >定义自定义的小部件属性(
  • )(例如,隐藏注释列表,更改标题)。defineProperties
  • >利用控制器和模型进行形式处理,注释管理(CRUD操作)。
  • >
构建快速注释窗口小部件:

> >我们将创建一个小部件,允许用户直接从其Octcms仪表板中快速添加和管理简短的笔记。

>

How to Build an OctoberCMS Widget Plugin How to Build an OctoberCMS Widget Plugin

1。插件设置:

使用命令行生成插件:

> Update
<code class="language-bash">php artisan create:plugin RAFIE.quicknote</code>
带有插件详细信息:

Plugin.php

<code class="language-php">public function pluginDetails()
{
    return [
        'name'        => 'Quick Note Widget',
        'description' => 'Quickly add and manage short notes.',
        'author'      => 'RAFIE Younes',
        'icon'        => 'icon-pencil'
    ];
}</code>

version.yaml

<code class="language-yaml"># uploads/version.yaml
1.0.1: First version of quicknote
1.0.2:
  - Created Notes Table
  - create_notes_table.php</code>
2。数据库模型:

创建

模型和迁移:

Note

迁移(
<code class="language-bash">php artisan create:model RAFIE.quicknote Note</code>
)将看起来像这样:

> create_notes_table.php

>刷新插件:
<code class="language-php">Schema::create('rafie_quicknote_notes', function ($table) {
    $table->engine = 'InnoDB';
    $table->increments('id');
    $table->string('title', 255);
    $table->text('description')->nullable();
    $table->integer('user_id')->unsigned()->index();
    $table->timestamps();
});</code>

<code class="language-bash">php artisan plugin:refresh RAFIE.quicknote</code>
中扩展

模型:User> Plugin.php

<code class="language-php">public function boot()
{
    User::extend(function ($model) {
        $model->hasMany['notes'] = ['RAFIE\Quicknote\Models\Note'];
    });
}</code>
模型(

):Note> models/Note.php

<code class="language-php">use October\Rain\Database\Traits\Validation;

class Note extends Model
{
    use Validation;

    public $table = 'rafie_quicknote_notes';

    protected $guarded = ['*'];

    protected $rules = [
        'title' => 'required|min:4'
    ];

    public $belongsTo = ['user' => ['Backend\Models\User']];
}</code>
3。小部件创建:

create

(在文件夹中):>

QuickNoteWidget.phpwidgets中注册小部件:

<code class="language-php">class QuickNoteWidget extends ReportWidgetBase
{
    public function render()
    {
        $notes = BackendAuth::getUser()->notes;
        return $this->makePartial('notes', ['notes' => $notes]);
    }

    public function defineProperties()
    {
        return [
            'title' => [
                'title' => 'Widget Title',
                'default' => 'Quick Note'
            ],
            'showList' => [
                'title' => 'Show Notes List',
                'type' => 'checkbox'
            ]
        ];
    }
}</code>

创建部分Plugin.php(在

中):
<code class="language-php">public function registerReportWidgets()
{
    return [
        'RAFIE\Quicknote\QuickNoteWidget' => [
            'label' => 'Quick Notes',
            'context' => 'dashboard'
        ]
    ];
}</code>
>

_notes.htmwidgets/quicknotewidget/partials

<code class="language-html"><div class="report-widget">
    <h3>{{ $this->property('title') }}</h3>
    <div class="pane">
        @if ($this->property('showList'))
            <ul class="list-nostyle">
                @foreach ($notes as $note)
                    <li class="list-group-item">{{ $note->title }}</li>
                @endforeach
            </ul>
        @endif
        <br>
        {{ Form::open(['url' => Backend::url('rafie/quicknote/notes/store'), 'method' => 'POST']) }}
        <div class="form-group">
            <input class="form-control" type="text" name="title" placeholder="Title" required>
        </div>
        <div class="form-group">
            <textarea class="form-control" name="description" id="" cols="30" rows="10" placeholder="Your note..."></textarea>
        </div>
        <div class="form-group">
            <button type="submit" class="btn btn-primary" value="Submit">Submit</button>
            <a href="https://www.php.cn/link/b4c174fbc208372a8facfe462868ebf1'rafie/quicknote/notes/index')%20%7D%7D">Manage your notes</a>
        </div>
        {{ Form::close() }}
    </div>
</div></code>

4。控制器(How to Build an OctoberCMS Widget Plugin ):

controllers/Notes.php记住要完成剩余的控制器操作(索引,创建,更新,删除)及其关联的配置文件(

<code class="language-php">class Notes extends Controller
{
    public function store()
    {
        $note = new Models\Note;
        $note->title = Input::get('title');
        $note->description = Input::get('description', null);
        $note->user_id = BackendAuth::getUser()->id;

        if ($note->save()) {
            Flash::success('Note added successfully.');
        } else {
            Flash::error('Validation error');
        }

        return Redirect::to(Backend::url());
    }

    // ... (rest of the controller code as described in the original response) ...
}</code>

,partials),如原始响应中所述。 显示控制器结构的图像很有帮助:config_list.yaml

How to Build an OctoberCMS Widget Plugin

5。 后端列表和表单配置:

>如原始响应中所示,使用config_list.yamlconfig_form.yaml配置后端列表和表单。 请密切注意控制器中的listExtendQueryBefore方法,以确保仅显示当前用户的笔记。 表单配置的屏幕截图很有用:

How to Build an OctoberCMS Widget Plugin

>此详细的故障应帮助您构建快速注释小部件。请记住,请咨询“十月”文档以获取进一步的帮助,并根据您的特定需求调整代码。 原始响应结束时的常见问题解答为与十月cms合作提供了其他有用的信息。

>

以上是如何构建一个十月cms小部件插件的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn