widgets

程式碼修行者發表於2015-02-12

widgets

widgets有掛件、微件的意思
簡單的說就是一個微型的控制器

建立目錄

1、在專案目錄下建立 widgets 目錄
2、下widgets目錄下建立 views 目錄
建立目錄

建立widgets

userWidget

class userWidget extends CWidget{
    public $num = 20;
    public function init() {
    }

    public function run() {
        $users = $this->getUsers();
        $this->render('userwidget',array(
            'users'=>$users
        ));
    }
    protected  function getUsers()
    {
        return Yii::app()->db->createCommand()->select('id,username,ctime')->from('user')->limit($this->num)->queryAll();
    }
}

userWidget2

class userWidget2 extends CWidget{

    public function init() {
        echo CHtml::beginForm("", "POST");
    }
    public function input($name,$value = "",$label = "")
    {
        $label = $label===""?$name:$label;
        echo CHtml::label($label.':', $name);
        echo CHtml::textField($name,$value);
    }
    public function run() {
        echo CHtml::endForm();
    }
}

建立widgets檢視

userwidget.php

<table>
    <tr><th>id</th><th>username</th><th>date</th></tr>
<?php foreach($users as $v):?>
    <tr><td><?=$v['id'];?></td><td><?=$v['username'];?></td><td><?=$v['ctime'];?></td></tr>
<?php endforeach;?>
</table>

使用

需要注意的是:
1、widget渲染的檢視,$this指向當前widget,要想使用當前controller就要 Yii::App()->controller
2、傳遞的引數 可以初始化對應的 對應的公開屬性
3、widgets的第二種執行方式,beginWidget對應init(),endWidget對應run()

<h1>呼叫當前controller測試</h1>
<?php echo Yii::app()->controller->createUrl("test");?>

<h1>第一種使用方式</h1>
<?php $this->widget('application.widgets.userWidget',array('num'=>6));?>

<h2>第二種使用方式</h2>
<?php $form = $this->beginWidget('application.widgets.userWidget2');?>
<?php $form->input('username');?>
<?php $this->endWidget();?>

相關文章