Yii 1.1 扩展 widget
2016-09-12 13:59
176 查看
http://www.yiichina.com/tutorial/334
yii里面有一些自带的widget,他们放在
要自己扩展widget,根据手册上的介绍,需要继承
创建widget存放目录:
在
创建widget类:
在
解释一下这段代码:按照规则,类名
创建视图文件:
在
注:自己扩展的widget所需要渲染的视图需要放在
调用widget:
准备工作做好了,可以在视图里使用
还记得我们在类
注意:需要进行传值必须定义成
你的widget输出了正确的结果么?祝你成功。
本文的目录结构使用Yii Path Alias描述
视图层中有许多公共部分,这里面一部分完全公用的东西我们可以放在layout里面,然而还有一部分是有差异的,比如这一个栏目的sidebar和另一个栏目的sidebar就有可能不一样。这个时候怎么来处理呢?有的人会选择制作多个layout,在不同地方切换layout,但这样代码的重用性没有发挥出来,而且不够灵活。yii里面有一个很方便的机制来解决这一问题,那就是 —— widget,小部件是也。yii里面有一些自带的widget,他们放在
web.widgets和
zii.widgets下面,比如有我们常用的
CLinkPager、
CMenu大家可以看一看。
要自己扩展widget,根据手册上的介绍,需要继承
CWidget,并且覆盖
run()方法。我们来开始扩展第一个widget:
创建widget存放目录:
在
application(默认是
protected)下创建目录
widgets,用来存放widget类,然后创建
widgets.views目录,用来存放widget的视图文件。
创建widget类:
在
application.widgets下面创建一个名为
TestWidget.php的文件,命名没太大讲究,保证唯一性,见名知意即可。在里面加入以下代码:
class TestWidget extends CWidget { public $datetime = ''; public function run() { $datetime = empty($this->datetime) ? date('Y-m-d H:i:s') : $this->datetime; $this->render('test', array('datetime'=>$datetime)); } }
解释一下这段代码:按照规则,类名
TestWidget与文件名
TestWidget.php相同,类
TestWidget需要继承
CWidget,然后重写(rewrite)
run()方法,该方法会在widget被渲染是调用。在
run()方法里调用
$this->render()方法渲染
test视图,将变量
$datetime传递到视图(参见控制器的视图渲染)。可以在里面查询数据库,进行各种操作,将运算的结果传入视图。
创建视图文件:
在
application.widgets.views下创建视图文件
test.php,在里面加入代码:
now is <?php echo $datetime;?>
注:自己扩展的widget所需要渲染的视图需要放在
application.widgets.views下,以php为扩展名。可以在视图里使用
render传入的变量。
调用widget:
准备工作做好了,可以在视图里使用
<?php $this->widget('application.widgets.TestWidget');?>来调用widget。如果我们要对widget进行一些数据动态化的调用该怎么办呢?
还记得我们在类
TestWidget里面定义的成员属性
$datetime么?我们可以使用以下方法对其进行覆盖传值:
<?php $this->widget('application.widgets.TestWidget', array( 'datetime'=>'2015/1/19', ));?>
注意:需要进行传值必须定义成
widget类的成员属性,并且访问权限为
public
你的widget输出了正确的结果么?祝你成功。
相关文章推荐
- 转:Yii实战中8个必备常用的扩展,模块和widget
- Yii实战中8个必备常用的扩展,模块和widget
- JFinal Extensions 1.1 发布,JFinal 扩展
- yii_1_1_17_12(上传类与如何扩展第三方类与缩略图类的使用-2016-2-12)
- BlogEngine.Net架构与源代码分析系列part10:开发扩展(中)——Widget小工具
- yii 自定义widget 地址下拉框联动、非联动、静态赋值、动态赋值
- php yii1.1 后台数据导出为Excel表格
- YII中 增加 PHPMAILER扩展发邮件 php 邮件
- ThinkPHP的Widget扩展实例
- Yii-视图- CListView操作扩展用法(zyd)
- 在YII中使用PHPExcel扩展导出数据到EXCEL中
- Asp.NET MVC Widget开发 - Html.Widget扩展方法
- Yii1.1版本实现批量插入
- ThinkPHP中Widget扩展的两种写法及调用方法详解
- Yii框架使用PHPExcel扩展从数据库导出excel
- yii小物件Widget创建表单,action提交到指定位置
- yii1.1 数据save后得到插入id
- Yii CActiveRecord 扩展(万金油列支持)
- YII千万级PV架构经验分享--俯瞰篇--业务扩展演变(3)
- Yii::GridView::widget 用法汇总