搜索
系统检测到您的用户名不符合规范:

widget 修改使用[3.2]

浏览:2977 发布日期:2013年08月11日 分类:技术分享 关键字: widget
//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 次 )

最佳答案
评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
xiaoyihebei
积分:3810 等级:LV4
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /