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开发文件中使用。参数为空。

使用举例:

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

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

四、Widget的使用举例

1、Widget的缓存使用

  1. class DemoWidget extends Widget {
  2.  
  3. /**
  4. * Main method
  5. *
  6. * @access public
  7. * @param array $params 参数
  8. * @return string
  9. */
  10. public function renderContent($params = null) {
  11.  
  12. //Widget的视图缓存文件的调用非同于Controller中的
  13. if($this->cache()) {
  14. return true;
  15. }
  16.  
  17. ...
  18.  
  19. $this->assign(array(
  20. ...
  21. ));
  22.  
  23. $this->display();
  24. }
  25.  
  26. }
Widget中缓存文件的调用代码,非同于Controller中缓存文件的调用。在Controller中视图缓存文件的调用,只需在Action()中开始处:$this->cache();一句代码直接搞定,如果当前controller,当前action有视图缓存文件(在缓存生命周期内),则直接加载视图的缓存文件并且exit(); 而在widget中,如果当前Widget有视图缓存文件(在缓存生命周期内),直接加载可行,如果还要exit();则整个页面恐怕只显示这个挂件内容,页面信息显示不完全,所以不能用exit();所以注定了Widget使用缓存时代码处理非同于Controller中的缓存文件的代码处理。

原文: http://www.doitphp.com/index/documentation/?articleid=23