在Yii中咱們能夠繼承 yiibaseWidget類而且覆蓋yiibaseWidget::init() 和/或 yiibaseWidget::run() 方法來實現建立一個小部件php
通常狀況下init方法用於處理小部件的屬性,run方法用於處理小部件生成渲染結果的代碼,run中的渲染結果能夠直接輸出或做爲字符串返回或者將小部件內容放到視圖文件中css
一:使用widget方法html
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; } }
如上就建立了一個小部件frontend
有時候小部件中可能須要渲染的內容較多,這時候咱們就能夠使用yiibaseWidget::render()方法渲染視圖文件yii
public function run() { return $this->render('index', [ 'message' => $this->message ]); }
2:再視圖中文件中引入小部件this
<?= \frontend\widget\TestWidget::widget(['message' => 'nihao']) ?>
二:使用begin() 和 end() 方法url
1:小部件建立spa
<?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:小部件使用code
<?php \frontend\widget\TestBeginWidget::begin(['url' => 'http://www.wj0511.com']); ?> 跳轉 <?php \frontend\widget\TestBeginWidget::end(); ?>