//3.2去掉了widget.class.php
//直接调用R()函数。
// Widget/PublicWidget.class.php
class PublicWidget extends Action{
function editor($data){
$this->assign($data);
$this->display([模块/操作]);
}
}
//页面调用
{:W('Public/editor',array('width'=>500,'name'=>'editor')}
//不同的模块调用Widget都得指定页面
//突然.....
//--------代码重构--------
//1、修改W()
function W($name, $data=array()) {
$info = pathinfo($name);
$action = $info['basename'];
$module = $info['dirname'];
$class = $module . 'Widget'[phone][/phone];
require_cache(COMMON_PATH . 'Widget/' . $class . '.class.php');
if (!class_exists($class))
throw_exception(L('_CLASS_NOT_EXIST_') . ':' . $class);
$widget = Think::instance($class);
$widget->template = $action;
$widget->$action($data);
}
//2、添加Widget.class.php 目录ThinkPHP/Lib/Core/Widget.class.php
// 别名加载中没有去掉widget,省掉一步。
// 附件下载
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK IT ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006-2012 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------
// | Example: 调用 W('Public/editor',array('width'=>'500','name'=>'cnntent'))
// | **** Widget比较集中放在一个地方。修改的时候也好改 ****
// | class PublicWidget extends Widget{
// | protected $tVar = array();
// | function editor($data){
// | echo $data['width'].$data['name'];
// | //$this->assign($data);
// | //模版放在 COMMON_PATH /Widget/Public/editor.html
// | //display方法不指定页面则为 方法名.html
// | //$this->display([可以指定页面]);
// | }
// | }
// +----------------------------------------------------------------------
/**
* ThinkPHP Widget类 抽象类
* @category Think
* @package Think
* @subpackage Core
* @author
*/
abstract class Widget {
// 使用的模板文件名称
public $template = '';
protected $tVar = array();
/**
* 模板变量赋值
* @access public
* @param mixed $name
* @param mixed $value
*/
protected function assign($name,$value=''){
if(is_array($name)) {
$this->tVar = array_merge($this->tVar,$name);
}else {
$this->tVar[$name] = $value;
}
}
/**
* 渲染模板输出
* @access public
* @param string $templateFile 模板文件
* @param mixed $var 模板变量
* @return string
*/
protected function display($templateFile='') {
layout(false);
ob_start();
ob_implicit_flush(0);
if(!file_exists_case($templateFile)){
// 自动定位模板文件
$name = substr(get_class($this),0,-6);
$filename = empty($templateFile)?$this->template:$templateFile;
$templateFile = COMMON_PATH.'Widget/'.$name.'/'.$filename.C('TMPL_TEMPLATE_SUFFIX');
if(!file_exists_case($templateFile))
throw_exception(L('_TEMPLATE_NOT_EXIST_').'['.$templateFile.']');
}
if($this->checkCache($templateFile)) { // 缓存有效
// 分解变量并载入模板缓存
extract($this->tVar, EXTR_OVERWRITE);
//载入模版缓存文件
include C('CACHE_PATH').md5($templateFile).C('TMPL_CACHFILE_SUFFIX');
}else{
// 视图解析标签
$params = array('var'=>$this->tVar,'file'=>$templateFile,'content'=>'','prefix'=>'');
tag('view_parse',$params);
}
$content = ob_get_clean();
tag('view_filter',$content);
$charset = C('DEFAULT_CHARSET');
$contentType = C('TMPL_CONTENT_TYPE');
// 网页字符编码
header('Content-Type:'.$contentType.'; charset='.$charset);
header('Cache-control: '.C('HTTP_CACHE_CONTROL')); // 页面缓存控制
header('X-Powered-By:ThinkPHP');
// 输出模板文件
echo $content;
}
/**
* 检查缓存文件是否有效
* 如果无效则需要重新编译
* @access public
* @param string $tmplTemplateFile 模板文件名
* @return boolen
*/
protected function checkCache($tmplTemplateFile) {
if (!C('TMPL_CACHE_ON')) // 优先对配置设定检测
return false;
$tmplCacheFile = C('CACHE_PATH').md5($tmplTemplateFile).C('TMPL_CACHFILE_SUFFIX');
if(!is_file($tmplCacheFile)){
return false;
}elseif (filemtime($tmplTemplateFile) > filemtime($tmplCacheFile)) {
// 模板文件如果有更新则缓存需要更新
return false;
}elseif (C('TMPL_CACHE_TIME') != 0 && time() > filemtime($tmplCacheFile)+C('TMPL_CACHE_TIME')) {
// 缓存是否在有效期
return false;
}
// 缓存有效
return true;
}
}
Widget.class.rar
( 1.52 KB 下载:56 次 )
最佳答案