Rumah >pembangunan bahagian belakang >tutorial php >Cara Membina Plugin Widget Oktobercms

Cara Membina Plugin Widget Oktobercms

Christopher Nolan
Christopher Nolanasal
2025-02-18 12:47:10175semak imbas

Artikel ini menyelidiki pembentukan plugin widget backend Oktobercms, memperluaskan penciptaan plugin asas. Kami akan membangunkan widget "Nota Pantas", mencerminkan fungsi draf cepat WordPress.

How to Build an OctoberCMS Widget Plugin

Konsep Utama:

    perancah plugin dengan
  • . php artisan create:plugin
  • Memperluas model pengguna untuk menguruskan nota khusus pengguna.
  • Melaksanakan widget laporan (
  • ) untuk papan pemuka backend. QuickNoteWidget
  • Menentukan sifat widget (
  • ) untuk penyesuaian (mis., Menyembunyikan senarai nota, menukar tajuk). defineProperties
  • menggunakan pengawal dan model untuk pengendalian bentuk, pengurusan nota (operasi CRUD).

Membina widget nota cepat:

kami akan membuat widget yang membolehkan pengguna dengan cepat menambah dan menguruskan nota pendek secara langsung dari papan pemuka Oktobercms mereka.

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

1. Persediaan Plugin:

menghasilkan plugin menggunakan baris arahan:

<code class="language-bash">php artisan create:plugin RAFIE.quicknote</code>
kemas kini

dengan butiran plugin: 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>
dan

: 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. Model Pangkalan Data:

Buat model

dan penghijrahan: Note

<code class="language-bash">php artisan create:model RAFIE.quicknote Note</code>
Migrasi (

) akan kelihatan seperti ini: 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>
Refresh plugin:

<code class="language-bash">php artisan plugin:refresh RAFIE.quicknote</code>
melanjutkan model

dalam User: Plugin.php

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

(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. Penciptaan widget:

create

(dalam folder QuickNoteWidget.php): widgets

<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>
Daftar widget dalam

: Plugin.php

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

(dalam _notes.htm): widgets/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>

How to Build an OctoberCMS Widget Plugin

4. Pengawal ():

controllers/Notes.php ingat untuk melengkapkan tindakan pengawal selebihnya (indeks, membuat, mengemas kini, memadam) dan fail konfigurasi yang berkaitan (

,
<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>
,

, config_list.yaml, sebahagian) seperti yang terperinci dalam respons asal. Imej yang menunjukkan struktur pengawal berguna: config_form.yaml

How to Build an OctoberCMS Widget Plugin

5. Senarai backend dan konfigurasi borang:

Konfigurasikan penyenaraian dan bentuk backend menggunakan

dan config_list.yaml seperti yang ditunjukkan dalam respons asal. Perhatikan kaedah config_form.yaml dalam pengawal untuk memastikan hanya nota pengguna semasa dipaparkan. Tangkapan skrin konfigurasi bentuk berguna: listExtendQueryBefore

How to Build an OctoberCMS Widget Plugin Pecahan terperinci ini akan membantu anda membina widget nota cepat. Ingatlah untuk berunding dengan dokumentasi OktoberCMS untuk bantuan lanjut dan menyesuaikan kod ke keperluan khusus anda. Soalan Lazim pada akhir respons asal memberikan maklumat berguna tambahan untuk bekerja dengan OktoberCMS.

Atas ialah kandungan terperinci Cara Membina Plugin Widget Oktobercms. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Ujian Automatik Modul Drupal 8Artikel seterusnya:Ujian Automatik Modul Drupal 8