Widget应用

一、创建Widget文件

关于这点,前面内容已经讲述过。特别在讲解开发规范、DoitPHP Tools使用说明时,已经讲的很清楚。可以参考前面内容。

二、Widget的应用

由于widget的基类(Widget Class)是继承了controller的基类(Controller Class)。所以开发Widget文件与开发Controller文件完全相似。所使用的方法也完全相同。注:由于widget是完成页面上一个区域的显示,所以setLayout()在widget开发中不支持。

若调用Widget文件,当视图文件为PHP时,直接在布局视图文件或控制器视图文件中使用widget()类方法即可,如:<?php $this->widget('calendar'); ?>;当视图文件为HTML时,直接在视图文件中使用widget模板标签,如:<!--{widget calendar}-->

三、Widget的类方法简介

1、_getWidgetName()

获取当前Widget的名称。注:本类方法只能在widget开发文件中使用。参数为空。

使用举例:

例一、
echo $this->_getWidgetName();

注:关于Widget的其它类方法请参考前面所讲的DoitPHP的Controller的应用中相关的类方法介绍。

四、Widget的使用举例

1、Widget的缓存使用

class DemoWidget extends Widget {

    /**
     * Main method
     *
     * @access public
     * @param array $params 参数
     * @return string
     */
    public function renderContent($params = null) {
        
        //Widget的视图缓存文件的调用非同于Controller中的
        if($this->cache()) {
            return true;
        }
        
        ...

        $this->assign(array(
            ...    
        ));
        
        $this->display();
    }

}
Widget中缓存文件的调用代码,非同于Controller中缓存文件的调用。在Controller中视图缓存文件的调用,只需在Action()中开始处:$this->cache();一句代码直接搞定,如果当前controller,当前action有视图缓存文件(在缓存生命周期内),则直接加载视图的缓存文件并且exit(); 而在widget中,如果当前Widget有视图缓存文件(在缓存生命周期内),直接加载可行,如果还要exit();则整个页面恐怕只显示这个挂件内容,页面信息显示不完全,所以不能用exit();所以注定了Widget使用缓存时代码处理非同于Controller中的缓存文件的代码处理。