Yii - Widget
Widget adalah kode sisi klien yang dapat digunakan kembali, yang berisi HTML, CSS, dan JS. Kode ini menyertakan logika minimal dan dibungkus dengan fileyii\base\Widgetobyek. Kita dapat dengan mudah memasukkan dan menerapkan objek ini dalam tampilan manapun.
Step 1 - Untuk melihat widget beraksi, buat file actionTestWidget berfungsi di SiteController dengan kode berikut.
public function actionTestWidget() {
return $this->render('testwidget');
}
Dalam contoh di atas, kami baru saja mengembalikan file View dipanggil “testwidget”.
Step 2 - Sekarang, di dalam folder views / site, buat file View bernama testwidget.php.
<?php
use yii\bootstrap\Progress;
?>
<?= Progress::widget(['percent' => 60, 'label' => 'Progress 60%']) ?>
Step 3 - Jika kamu pergi ke http://localhost:8080/index.php?r=site/test-widget, Anda akan melihat widget bilah kemajuan.
Menggunakan Widget
Untuk menggunakan widget di View, Anda harus memanggil yii\base\Widget::widget()fungsi. Fungsi ini mengambil array konfigurasi untuk menginisialisasi widget. Dalam contoh sebelumnya, kami menyisipkan bilah kemajuan dengan persen dan parameter berlabel dari objek konfigurasi.
Beberapa widget mengambil blok konten. Ini harus ditutup di antarayii\base\Widget::begin() dan yii\base\Widget::end()fungsi. Misalnya, widget berikut menampilkan formulir kontak -
<?php $form = ActiveForm::begin(['id' => 'contact-form']); ?>
<?= $form->field($model, 'name') ?>
<?= $form->field($model, 'email') ?>
<?= $form->field($model, 'subject') ?>
<?= $form->field($model, 'body')->textArea(['rows' => 6]) ?>
<?= $form->field($model, 'verifyCode')->widget(Captcha::className(), [
'template' =>
'<div class="row">
<div class = "col-lg-3">{image}</div>
<div class = "col-lg-6">{input}</div>
</div>',
]) ?>
<div class = "form-group">
<?= Html::submitButton('Submit', ['class' => 'btn btn-primary',
'name' => 'contact-button']) ?>
</div>
<?php ActiveForm::end(); ?>
Membuat Widget
Untuk membuat widget, Anda harus memperluas dari yii\base\Widget. Maka Anda harus menggantiyii\base\Widget::init() dan yii\base\Widget::run()fungsi. Iturun()fungsi harus mengembalikan hasil rendering. Ituinit() fungsi harus menormalkan properti widget.
Step 1- Buat folder komponen di root proyek. Di dalam folder itu, buat file bernamaFirstWidget.php dengan kode berikut.
<?php
namespace app\components;
use yii\base\Widget;
class FirstWidget extends Widget {
public $mes; public function init() { parent::init(); if ($this->mes === null) {
$this->mes = 'First Widget'; } } public function run() { return "<h1>$this->mes</h1>";
}
}
?>
Step 2 - Modify itu testwidget lihat dengan cara berikut.
<?php
use app\components\FirstWidget;
?>
<?= FirstWidget∷widget() ?>
Step 3 - Pergi ke http://localhost:8080/index.php?r=site/test-widget. Anda akan melihat yang berikut ini.
Step 4 - Untuk menyertakan konten di antara file begin() dan end() panggilan, Anda harus memodifikasi FirstWidget.php mengajukan.
<?php
namespace app\components;
use yii\base\Widget;
class FirstWidget extends Widget {
public function init() {
parent::init();
ob_start();
}
public function run() {
$content = ob_get_clean(); return "<h1>$content</h1>";
}
}
?>
Step 5- Sekarang tag h1 akan mengelilingi semua konten. Perhatikan bahwa kami menggunakanob_start()berfungsi sebagai penyangga keluaran. Ubah tampilan testwidget seperti yang diberikan dalam kode berikut.
<?php
use app\components\FirstWidget;
?>
<?php FirstWidget::begin(); ?>
First Widget in H1
<?php FirstWidget::end(); ?>
Anda akan melihat output berikut -
Poin Penting
Widget harus -
Dibuat mengikuti pola MVC. Anda harus menjaga lapisan presentasi dalam tampilan dan logika di kelas widget.
Didesain untuk menjadi mandiri. Pengembang akhir harus dapat mendesainnya menjadi Tampilan.