Rumah >pembangunan bahagian belakang >tutorial php >Cara Membina Plugin Widget Oktobercms
Artikel ini menyelidiki pembentukan plugin widget backend Oktobercms, memperluaskan penciptaan plugin asas. Kami akan membangunkan widget "Nota Pantas", mencerminkan fungsi draf cepat WordPress.
Konsep Utama:
php artisan create:plugin
QuickNoteWidget
defineProperties
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.
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>
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
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
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!