2014-08-25 11:12:37 3259次浏览 1条回答 1 悬赏 2 金钱

有一个$this->widget();这么个东西不太懂它里边的参数是啥意思

  • 回答于 2014-08-28 10:36 举报

    首先你得知道widget是干什么的,小挂件可以由自己的view,我们可以自由的定义,
    例如:在如下地方建/home/tann/website/dev_yii/shop/protected/widget/test,
    我们可以把网站的一些经常用到的重复性的东西提取出来,做成widget,提高复用性。
    然后建文件/home/tann/website/dev_yii/shop/protected/widget/test/testWidget.php
    <?php
    /**

    • Created by PhpStorm.
    • User: tann
    • Date: 14-8-13
    • Time: 上午10:45
      */

    /**

    • test widget
    • widget类的使用类似Controller,也可以有自己的view
      */
      class registerWidget extends CWidget
      {
      public function init(){
       //当视图中执行$this->beginWidget()时候会执行这个方法
       //可以在这里进行查询数据操作
       echo '<br>testWidget.init()'.'<br>';
      

      }
      public function run(){

       //当视图中执行$this->endWidget()的时候会执行这个方法
       //可以在这里进行渲染试图的操作,注意这里提到的视图是widget的视图
       //注意widget的视图是放在跟widget同级的views目录下面,例如下面的视图会放置在
       //  /protected/widget/test/views/test.php
       echo 'testWidget.run()'.'<br>';
       $this->render('test', array(
           'str'=>'WIDGET视图变量',
       ));
      

      }
      }
      然后,在视图位置建文件
      /home/tann/website/dev_yii/shop/protected/widget/test/views/test.php

    widget/test/views/test.php
    <?php
    echo $str;
    ?>

    这样我们就定义好了一个widget
    在控制器的视图层做如下调用:
    <?php
    $this->widget('application.widget.test.testWidget'); //挂件类的路径
    /
    $this->beginWidget('application.widget.test.testWidget');
    $this->endWidget('application.widget.test.testWidget');
    /
    ?>

    这样我们看到的效果
    testWidget.int()
    testWidget.run()
    widget/test/views/test.php WIDGET视图变量

    1 条回复
    回复于 2014-08-28 13:55 回复

    太感谢了、说的太详细了

    觉得很赞
您需要登录后才可以回答。登录 | 立即注册
jia253
副总裁

jia253 北京-昌平

注册时间:2014-08-18
最后登录:2023-10-24
在线时长:288小时54分
  • 粉丝34
  • 金钱4448
  • 威望20
  • 积分7528

热门问题