widget是可重复使用的客户端代码,它包含HTML,CSS 和 JS。此代码包含最少逻辑并被包装在一个 yii\base\Widget 对象。我们可以很容易地此对象插入到在任意视图中应用。
第1步- 要在动作中查看小部件,我们在 SiteController 创建 actionTestWidget 函数并用下面的代码。
public function actionTestWidget() { return $this->render('testwidget'); }
在上面的例子中,我们只是返回了一个名为 “testwidget” 的视图。
第2步 - 现在,在 views/site 文件夹中,创建一个名为 testwidget.php 的视图文件。
<?php use yii\bootstrap\Progress; ?> <?= Progress::widget(['percent' => 60, 'label' => 'Progress 60%']) ?>
使用Widgets
要在视图中使用一个小部件,您应该调用 yii\base\Widget::widget() 函数。 这个函数使用的配置数组来初始化窗口小部件。在前面的例子中,我们用插入百分比进度条和配置对象标记参数。
一些小部件需要内容块,应该封闭在yii\base\Widget::begin() 和 yii\base\Widget::end()函数之间。 例如,下面的 widget 显示一个联系的表单 -
<?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(); ?>
创建Widgets
要创建一个窗口小部件,应该扩展类 yii\base\Widget。那么需要重写 yii\base\Widget::init() 和 yii\base\Widget::run() 函数。run()函数将返回渲染的结果。 init()函数将标准化小部件的属性。
init()函数将标准化小部件的属性。 在 components 文件夹内,创建一个名为 FirstWidget.php 文件,并使用下面的代码。
<?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 = '第一个Widget'; } } public function run() { return "<h1>$this->mes</h1>"; } } ?>
步骤2- 按以下列方式修改 views/site/testwidget.php 视图。
<?php use app\components\FirstWidget; ?> <?= FirstWidget∷widget() ?>
第4步- 要在 begin() 和 end() 函数之间调用显示内容,您应该修改 FirstWidget 文件。
<?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>"; } } ?>
第5步 - 现在H1标签将环绕的所有内容。请注意,我们使用 ob_start()函数来缓冲输出。修改 views/site/testwidget.php 视图使用如下面给出的代码。
<?php use app\components\FirstWidget; ?> <?php FirstWidget::begin(); ?> 第一个Widget在H1标签中 <?php FirstWidget::end(); ?>
将会看到下面的输出 -


要点
窗口小部件应该 -
-
要在MVC模式下创建。应该保持表现层在视图,逻辑在窗口小部件(widget)类。
-
设计成自包含的。最终开发人员应该能够将它设计到一个视图。
上一篇:
Yii模型
下一篇:
Yii模块(Modules)