在Yii中我们可以继承 yiibaseWidget类并且覆盖yiibaseWidget::init() 和/或 yiibaseWidget::run() 方法来实现创建一个小部件
一般情况下init方法用于处理小部件的属性,run方法用于处理小部件生成渲染结果的代码,run中的渲染结果可以直接输出或作为字符串返回或者将小部件内容放到视图文件中
一:使用widget方法
1:小部件创建
<?php
/**
* author: wangjian
* date: 2019/12/13
*/
namespace frontend\widget;
use frontend\assets\AppAsset;
use yii\base\Widget;
use yii\helpers\Html;
class TestWidget extends Widget
{
public $message;
public function init()
{
if ($this->message == null) {
$this->message = 'hello world!';
}
}
public function run()
{
$messge = Html::encode($this->message);
$html = <<<HTML
<div class="test">
{$messge}
</div>
HTML;
$js =<<<JS
console.log(1);
JS;
$this->view->registerJs($js);//
$css = <<<CSS
.test {
color: #ac2925;
}
CSS;
$this->view->registerCss($css);
AppAsset::register($this->view);//注册资源包
return $html;
}
}
如上就创建了一个小部件
有时候小部件中可能需要渲染的内容较多,这时候我们就可以使用yiibaseWidget::render()方法渲染视图文件
public function run()
{
return $this->render('index', [
'message' => $this->message
]);
}
2:再视图中文件中引入小部件
<?= \frontend\widget\TestWidget::widget(['message' => 'nihao']) ?>
二:使用begin() 和 end() 方法
1:小部件创建
<?php
/**
* author: wangjian
* date: 2019/12/13
*/
namespace frontend\widget;
use yii\base\Widget;
use yii\helpers\Html;
class TestBeginWidget extends Widget
{
public $url;
public function init()
{
parent::init();
if ($this->url == null) {
$this->url = 'http://www.baidu.com';
}
ob_start();//开启输出缓存
}
public function run()
{
$html = Html::beginTag('a', ['href' => $this->url]);
$content = ob_get_clean();//获取输出缓存内容
$html .= $content;
$html .= Html::endTag('a');
return $html;
}
}
2:小部件使用
<?php \frontend\widget\TestBeginWidget::begin(['url' => 'http://www.wj0511.com']); ?>
跳转
<?php \frontend\widget\TestBeginWidget::end(); ?>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。