快捷搜索:

0框架落到实处模板保存到数据库的法子,Thinkp

作者: w88官方网站手机版  发布:2019-07-13

1 在将数据库查询的值传到模板时

thinkPHP3.0框架实现模板保存到数据库的措施,thinkphp3.0框架

正文实例陈诉了thinkPHP3.0框架达成模板保存到数据库的点子。分享给我们供大家仿照效法,具体如下:

在付出cms的时候利用借使将模板文件存入到数据库并出示到页面中

出于thinkphp3.0都以平昔从沙盘文件中读取再分析的那么对于模板存入数据库中就唯有和谐付出了,还也会有thinkphp3.0中有mode的法力大家能够定义本人的mode那样就足以直达指标了,那么怎么样来扩展自身的mode呢?如下:

1.在你的进口文件中输入

define('MODE_NAME','Ey');

里头"Ey"就是您自身强大的mode名称了,请在你的thinkphp/Extend/Mode文件下边创造Ey文件夹

2.在Ey目录中修改

增添tags.php文件内容如下:

return array(
  'app_init'=>array(
  ),
  'app_begin'=>array(
    'ReadHtmlCache', // 读取静态缓存
  ),
  'route_check'=>array(
    'CheckRoute', // 路由检测
  ),
  'app_end'=>array(),
  'path_info'=>array(),
  'action_begin'=>array(),
  'action_end'=>array(),
  'view_begin'=>array(),
  'view_template'=>array(
    'ExtensionTemplate', // 自动定位模板文件(手动添加)
  ),
  'view_content'=>array(
    'ParseContent'//(手动添加)
  ),
  'view_filter'=>array(
    'ContentReplace', // 模板输出替换
    'TokenBuild',  // 表单令牌
    'WriteHtmlCache', // 写入静态缓存
    'ShowRuntime', // 运行时间显示
  ),
  'view_end'=>array(
    'ShowPageTrace', // 页面Trace显示
  ),
);

该公文中前面包车型大巴笺注中增添手动加多了为本人的修改,只是修改thinkphp中私下认可的tags中找出模板和分析模板的一言一动

将系统暗中认可的action和view类复制到Ey的目录中(由于分析内容,所以要修改action和view类),修改action.class.php中的fetch方法:

protected function fetch($templateFile='',$templateContent='' ){
    return $this->view->fetch($templateFile,$templateContent);
}

view.class.php文件中的修改为:

public function fetch($templateFile='',$templateContent = NULL) {
    $params['templateFile'] = $templateFile;
    $params['cacheFlag'] = true;
    if(isset($templateContent)) {
      $params['templateContent'] = $templateContent;
    }
    tag('view_template',$params);
    // 页面缓存
    ob_start();
    ob_implicit_flush(0);
    if('php' == strtolower(C('TMPL_ENGINE_TYPE'))) { // 使用PHP原生模板
      // 模板阵列变量分解成为独立变量
      extract($this->tVar, EXTR_OVERWRITE);
      // 直接载入PHP模板
      include $templateFile;
    }else{
      // 视图解析标签
      $params = array('var'=>$this->tVar,'content'=>$params['templateContent'],'file'=>$params['templateFile'],'cacheFlag'=>$params['cacheFlag']);
      tag('view_content',$params);
    }
    // 获取并清空缓存
    $content = ob_get_clean();
    // 内容过滤标签
    tag('view_filter',$content);
    // 输出模板文件
    return $content;
}

3.恢弘自个儿的研究模板的类(本人扩张的一坐一起tp让大家身处thinkphpExtendBehavior中)
在thinkphpExtendBehavior中加多ExtensionTemplateBehavior.class.php类,内容如下:

class ExtensionTemplateBehavior extends Behavior {
  // 行为扩展的执行入口必须是run
  public function run(&$params){
    if( is_array($params) ){
      if( array_key_exists('templateFile', $params) ){
        $params  = $this->parseTemplateFile($params);
      }else{
        //异常
        throw_exception(L('_TEMPLATE_NOT_EXIST_AND_CONTENT_NULL_').'['.$params['templateFile'].']');
      }
    }else{
      // 自动定位模板文件
      if(!file_exists_case($params))
        $params  = $this->parseTemplateFile($params);
    }
  }
  private function parseTemplateFile($params) {
    if( is_array($params) ) {
      $templateFile = $params['templateFile'];
    }else{
      $templateFile = $params;
    }
    if(!isset($params['templateContent'])) { // 是否设置 templateContent 参数
      //自动获取模板文件
      if('' == $templateFile){
        // 如果模板文件名为空 按照默认规则定位
        $templateFile = C('TEMPLATE_NAME');
      } elseif(false === strpos($templateFile,C('TMPL_TEMPLATE_SUFFIX'))) {
        $path  = explode(':',$templateFile);
        //如果是插件
        if($path[0] == 'Ext') {
          $templateFile = str_replace(array('Ext:',$path[1] . ':',$path[2] . ':'),'',$templateFile);
          $templateFile = SITE_ROOT . '/Ext/extensions/' . strtolower($path[1]) . '/' . $path[2] . '/Tpl/' . $templateFile . C('TMPL_TEMPLATE_SUFFIX');
        } else {
          // 解析规则为 模板主题:模块:操作 不支持 跨项目和跨分组调用
          $action = array_pop($path);
          $module = !empty($path)?array_pop($path):MODULE_NAME;
          if(!empty($path)) {// 设置模板主题
            $path = dirname(THEME_PATH).'/'.array_pop($path).'/';
          }else{
            $path = THEME_PATH;
          }
          $depr = defined('GROUP_NAME')?C('TMPL_FILE_DEPR'):'/';
          $templateFile = $path.$module.$depr.$action.C('TMPL_TEMPLATE_SUFFIX');
        }
      }
    } else {
      if('' == $templateFile){
        $depr = defined('GROUP_NAME')?C('TMPL_FILE_DEPR'):'/';
        $params['cacheFlag'] = false;
      } else {
        $path  = explode(':',$templateFile);
        //如果是插件
        if($path[0] == 'Ext') {
          $templateFile = str_replace(array('Ext:',$path[1] . ':',$path[2] . ':'),'',$templateFile);
          $templateFile = SITE_ROOT . '/Ext/extensions/' . strtolower($path[1]) . '/' . $path[2] . '/Tpl/' . $templateFile . C('TMPL_TEMPLATE_SUFFIX');
        } else {
          // 解析规则为 模板主题:模块:操作 不支持 跨项目和跨分组调用
          $action = array_pop($path);
          $module = !empty($path)?array_pop($path):MODULE_NAME;
          if(!empty($path)) {// 设置模板主题
            $path = dirname(THEME_PATH).'/'.array_pop($path).'/';
          }else{
            $path = THEME_PATH;
          }
          $depr = defined('GROUP_NAME')?C('TMPL_FILE_DEPR'):'/';
          $templateFile = $path.$module.$depr.$action.C('TMPL_TEMPLATE_SUFFIX');
        }
      }
    }
    if( is_array($params) ){
      $params['templateFile'] = $templateFile;
      return $params;
    }else{
      if(!file_exists_case($templateFile))
        throw_exception(L('_TEMPLATE_NOT_EXIST_').'['.$templateFile.']');
      return $templateFile;
    }
  }
}

4.增多深入分析本人的模版的行为类(这么些和thinkphp3.0暗中同意的ParseTemplateBehavior.class.php类似)

class ParseContentBehavior extends Behavior {
  protected $options  = array(
    // 布局设置
    'TMPL_ENGINE_TYPE'   => 'Ey',   // 默认模板引擎 以下设置仅对使用Ey模板引擎有效
    'TMPL_CACHFILE_SUFFIX' => '.php',   // 默认模板缓存后缀
    'TMPL_DENY_FUNC_LIST'  => 'echo,exit', // 模板引擎禁用函数
    'TMPL_DENY_PHP' =>false, // 默认模板引擎是否禁用PHP原生代码
    'TMPL_L_DELIM'     => '{',     // 模板引擎普通标签开始标记
    'TMPL_R_DELIM'     => '}',     // 模板引擎普通标签结束标记
    'TMPL_VAR_IDENTIFY'   => 'array',   // 模板变量识别。留空自动判断,参数为'obj'则表示对象
    'TMPL_STRIP_SPACE'   => true,    // 是否去除模板文件里面的html空格与换行
    'TMPL_CACHE_ON'     => true,    // 是否开启模板编译缓存,设为false则每次都会重新编译
    'TMPL_CACHE_TIME'    =>  0,     // 模板缓存有效期 0 为永久,(以数字为值,单位:秒)
    'TMPL_LAYOUT_ITEM'  =>  '{__CONTENT__}', // 布局模板的内容替换标识
    'LAYOUT_ON'      => false, // 是否启用布局
    'LAYOUT_NAME'    => 'layout', // 当前布局名称 默认为layout
    // Think模板引擎标签库相关设定
    'TAGLIB_BEGIN'     => '<', // 标签库标签开始标记
    'TAGLIB_END'      => '>', // 标签库标签结束标记
    'TAGLIB_LOAD'      => true, // 是否使用内置标签库之外的其它标签库,默认自动检测
    'TAGLIB_BUILD_IN'    => 'cx', // 内置标签库名称(标签使用不必指定标签库名称),以逗号分隔 注意解析顺序
    'TAGLIB_PRE_LOAD'    => '',  // 需要额外加载的标签库(须指定标签库名称),多个以逗号分隔
    );
  public function run(&$_data){
    $engine = strtolower(C('TMPL_ENGINE_TYPE'));
    //这个地方要判断是否存在文件
    if('think'==$engine){
      if($this->checkCache($_data['file'])) { // 缓存有效
        // 分解变量并载入模板缓存
        extract($_data['var'], EXTR_OVERWRITE);
        //载入模版缓存文件
        include C('CACHE_PATH').md5($_data['file']).C('TMPL_CACHFILE_SUFFIX');
      }else{
        $tpl = Think::instance('ThinkTemplate');
        // 编译并加载模板文件
        $tpl->fetch($_data['file'],$_data['var']);
      }
    } else if('ey' == $engine) {
      if( !$_data['cacheFlag'] ){
        $class  = 'Template'.ucwords($engine);
        if(is_file(CORE_PATH.'Driver/Template/'.$class.'.class.php')) {
          // 内置驱动
          $path = CORE_PATH;
        } else {
          // 扩展驱动
          $path = EXTEND_PATH;
        }
        if(require_cache($path.'Driver/Template/'.$class.'.class.php')) {
          $tpl  = new $class;
          $tpl->fetch('',$_data['content'],$_data['var']);
        } else { // 类没有定义
          throw_exception(L('_NOT_SUPPERT_').': ' . $class);
        }
      }else{
        //操作
        $cache_flag = true;
        if(isset($_data['content'])){ //如果指定内容
          if ($_data['file']){ //指定缓存KEY
            $_data['file'] = 'custom_' . $_data['file'];
          } else { //未指定缓存KEY,则不缓存
            $cache_flag = false;
          }
        } else {
          if (is_file($_data['file'])){ //如果指定文件存在
            $_data['content'] = file_get_contents($_data['file']);
          } else {
            throw_exception(L('_TEMPLATE_NOT_EXIST_').'['.$_data['file'].']');
          }
        }
        //这里文件和内容一定有一个存在,否则在之前就会有异常了
        if($cache_flag && $this->checkCache($_data['file'],$_data['content']) ) { // 缓存有效
          // 分解变量并载入模板缓存
          extract($_data['var'], EXTR_OVERWRITE);
          //载入模版缓存文件
          include C('CACHE_PATH').md5($_data['file']).C('TMPL_CACHFILE_SUFFIX');
        } else {
          $class  = 'Template'.ucwords($engine);
          if(is_file(CORE_PATH.'Driver/Template/'.$class.'.class.php')) {
            // 内置驱动
            $path = CORE_PATH;
          } else {
            // 扩展驱动
            $path = EXTEND_PATH;
          }
          if(require_cache($path.'Driver/Template/'.$class.'.class.php')) {
            $tpl  = new $class;
            $tpl->fetch($_data['file'],$_data['content'],$_data['var']);
          } else { // 类没有定义
            throw_exception(L('_NOT_SUPPERT_').': ' . $class);
          }
        }
      }
    } else {
      //调用第三方模板引擎解析和输出
      $class  = 'Template'.ucwords($engine);
      if(is_file(CORE_PATH.'Driver/Template/'.$class.'.class.php')) {
        // 内置驱动
        $path = CORE_PATH;
      }else{ // 扩展驱动
        $path = EXTEND_PATH;
      }
      if(require_cache($path.'Driver/Template/'.$class.'.class.php')) {
        $tpl  = new $class;
        $tpl->fetch($_data['file'],$_data['var']);
      }else { // 类没有定义
        throw_exception(L('_NOT_SUPPERT_').': ' . $class);
      }
    }
  }
  protected function checkCache($tmplTemplateFile = '',$tmplTemplateContent='') {
    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;
    }
    // 开启布局模板
    if(C('LAYOUT_ON')) {
      $layoutFile = THEME_PATH.C('LAYOUT_NAME').C('TMPL_TEMPLATE_SUFFIX');
      if(filemtime($layoutFile) > filemtime($tmplCacheFile)) {
        return false;
      }
    }
    // 缓存有效
    return true;
  }
}

5.加多本身剖判模板内容的类TemplateEy.class.php(那几个位于thinkphpExtendDriverTemplate目录下边)
只是将系统暗中同意的ThinkTemplate.class.php类修改了fetch方法修改代码如下:

// 加载模板
public function fetch($templateFile,$templateContent,$templateVar) {
    $this->tVar = $templateVar;
    if($templateContent && !$templateFile) { //不缓存
      if(C('LAYOUT_ON')) {
        if(false !== strpos($templateContent,'{__NOLAYOUT__}')) { // 可以单独定义不使用布局
          $templateContent = str_replace('{__NOLAYOUT__}','',$templateContent);
        }else{ // 替换布局的主体内容
          $layoutFile = THEME_PATH.C('LAYOUT_NAME').$this->config['template_suffix'];
          $templateContent = str_replace($this->config['layout_item'],$templateContent,file_get_contents($layoutFile));
        }
      }
      //编译模板内容
      $templateContent = $this->compiler($templateContent);
      extract($templateVar, EXTR_OVERWRITE);
      echo $templateContent;
    } else {
      $templateCacheFile = $this->loadTemplate($templateFile,$templateContent);
      // 模板阵列变量分解成为独立变量
      extract($templateVar, EXTR_OVERWRITE);
      //载入模版缓存文件
      include $templateCacheFile;
    }
}

6.调用假若数据库中模板的源委空中楼阁那么我们如故去读数据库中的内容:

if( array_key_exists( $display_mode, $params['tpl'] ) && strlen($params['tpl'][$display_mode]) > 0 ){
return $this->fetch("Ext:New:Frontend:show",$params['tpl'][$display_mode]);
}else{
return $this->fetch("Ext:New:Frontend:show");
}

越来越多关于thinkPHP相关内容感兴趣的读者可查阅本站专项论题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧计算》、《ThinkPHP常用艺术总计》、《codeigniter入门教程》、《CI(CodeIgniter)框架进级教程》、《Zend FrameWork框架入门教程》及《PHP模板手艺总计》。

期待本文所述对大家基于ThinkPHP框架的PHP程序设计具备扶助。

本文实例叙述了thinkPHP3.0框架达成模板保存到数据库的点子。分享给我们供大家参...

正文实例呈报了thinkPHP3.0框架达成模板保存到数据库的艺术。分享给大家供大家参照他事他说加以考察,具体如下:

  除了古板的法子

在支付cms的时候利用借使将模板文件存入到数据库并出示到页面中

1 $wi=M('wish');  2 $result=$wi->select();  3 $this->assign('res',$result);  4 $this->display();

w88官方网站手机版,出于thinkphp3.0都是向来从沙盘文件中读取再分析的那么对于模板存入数据库中就唯有团结付出了,还有thinkphp3.0中有mode的法力我们能够定义本人的mode这样就足以达到目标了,那么怎么着来扩张本人的mode呢?如下:

还是能这么:

1.在你的输入文件中输入

1 $wi=M('wish');  2 $result=$wi->select();  3 $this->res=$result;  4 $this->display();
define('MODE_NAME','Ey');

 2 文件的写入和读取

里头"Ey"正是您自身扩充的mode名称了,请在你的thinkphp/Extend/Mode文件上边创造Ey文件夹

历史观方式

2.在Ey目录中期维修改

1 //写入方法  2 $str="<?php return :.var_export($arr,true).";?>";  3 file_put_contents("./data/test.php",$str);  4   5 //读取方法  6 $s=include('./data/test.php');

加多tags.php文件内容如下:

新写法

return array(
  'app_init'=>array(
  ),
  'app_begin'=>array(
    'ReadHtmlCache', // 读取静态缓存
  ),
  'route_check'=>array(
    'CheckRoute', // 路由检测
  ),
  'app_end'=>array(),
  'path_info'=>array(),
  'action_begin'=>array(),
  'action_end'=>array(),
  'view_begin'=>array(),
  'view_template'=>array(
    'ExtensionTemplate', // 自动定位模板文件(手动添加)
  ),
  'view_content'=>array(
    'ParseContent'//(手动添加)
  ),
  'view_filter'=>array(
    'ContentReplace', // 模板输出替换
    'TokenBuild',  // 表单令牌
    'WriteHtmlCache', // 写入静态缓存
    'ShowRuntime', // 运行时间显示
  ),
  'view_end'=>array(
    'ShowPageTrace', // 页面Trace显示
  ),
);
1 //写入方法  2 F('test',$arr,'./Data/');  3 //读取方法  4 $a=F('test','','./Data/');

该文件中后边的笺注中增加手动加多了为我的更改,只是修改thinkphp中暗许的tags中搜索模板和深入分析模板的作为

 3  修改模板暗许__PUBLIC__的针对性,作者试过直接在config.php中定义

将系统私下认可的action和view类复制到Ey的目录中(由于深入分析内容,所以要修改action和view类),修改action.class.php中的fetch方法:

1 '__PUBLIC__' => '/'.APP_NAME.'/Index/Tpl/Admin/Public'
protected function fetch($templateFile='',$templateContent='' ){
    return $this->view->fetch($templateFile,$templateContent);
}

如此输出来的结果

view.class.php文件中的修改为:

C('__PUBLIC__');//显示app/Index/Tpl/Admin/Public,和上面定义的一致
public function fetch($templateFile='',$templateContent = NULL) {
    $params['templateFile'] = $templateFile;
    $params['cacheFlag'] = true;
    if(isset($templateContent)) {
      $params['templateContent'] = $templateContent;
    }
    tag('view_template',$params);
    // 页面缓存
    ob_start();
    ob_implicit_flush(0);
    if('php' == strtolower(C('TMPL_ENGINE_TYPE'))) { // 使用PHP原生模板
      // 模板阵列变量分解成为独立变量
      extract($this->tVar, EXTR_OVERWRITE);
      // 直接载入PHP模板
      include $templateFile;
    }else{
      // 视图解析标签
      $params = array('var'=>$this->tVar,'content'=>$params['templateContent'],'file'=>$params['templateFile'],'cacheFlag'=>$params['cacheFlag']);
      tag('view_content',$params);
    }
    // 获取并清空缓存
    $content = ob_get_clean();
    // 内容过滤标签
    tag('view_filter',$content);
    // 输出模板文件
    return $content;
}

实在是大家修改的结果,不过模板里面却依旧依据暗许的分析.所以大家那样修改十一分,我们修改的首要目标便是为了模板,所以理应如此修改

3.扩张本人的查找模板的类(本身庞大的一言一动tp让我们放在thinkphpExtendBehavior中)
在thinkphpExtendBehavior中增加ExtensionTemplateBehavior.class.php类,内容如下:

1 'TMPL_PARSE_STRING' => array('__PUBLIC__' => __ROOT__.'/'.APP_NAME.'/Index/Tpl/Admin/Public')
class ExtensionTemplateBehavior extends Behavior {
  // 行为扩展的执行入口必须是run
  public function run(&$params){
    if( is_array($params) ){
      if( array_key_exists('templateFile', $params) ){
        $params  = $this->parseTemplateFile($params);
      }else{
        //异常
        throw_exception(L('_TEMPLATE_NOT_EXIST_AND_CONTENT_NULL_').'['.$params['templateFile'].']');
      }
    }else{
      // 自动定位模板文件
      if(!file_exists_case($params))
        $params  = $this->parseTemplateFile($params);
    }
  }
  private function parseTemplateFile($params) {
    if( is_array($params) ) {
      $templateFile = $params['templateFile'];
    }else{
      $templateFile = $params;
    }
    if(!isset($params['templateContent'])) { // 是否设置 templateContent 参数
      //自动获取模板文件
      if('' == $templateFile){
        // 如果模板文件名为空 按照默认规则定位
        $templateFile = C('TEMPLATE_NAME');
      } elseif(false === strpos($templateFile,C('TMPL_TEMPLATE_SUFFIX'))) {
        $path  = explode(':',$templateFile);
        //如果是插件
        if($path[0] == 'Ext') {
          $templateFile = str_replace(array('Ext:',$path[1] . ':',$path[2] . ':'),'',$templateFile);
          $templateFile = SITE_ROOT . '/Ext/extensions/' . strtolower($path[1]) . '/' . $path[2] . '/Tpl/' . $templateFile . C('TMPL_TEMPLATE_SUFFIX');
        } else {
          // 解析规则为 模板主题:模块:操作 不支持 跨项目和跨分组调用
          $action = array_pop($path);
          $module = !empty($path)?array_pop($path):MODULE_NAME;
          if(!empty($path)) {// 设置模板主题
            $path = dirname(THEME_PATH).'/'.array_pop($path).'/';
          }else{
            $path = THEME_PATH;
          }
          $depr = defined('GROUP_NAME')?C('TMPL_FILE_DEPR'):'/';
          $templateFile = $path.$module.$depr.$action.C('TMPL_TEMPLATE_SUFFIX');
        }
      }
    } else {
      if('' == $templateFile){
        $depr = defined('GROUP_NAME')?C('TMPL_FILE_DEPR'):'/';
        $params['cacheFlag'] = false;
      } else {
        $path  = explode(':',$templateFile);
        //如果是插件
        if($path[0] == 'Ext') {
          $templateFile = str_replace(array('Ext:',$path[1] . ':',$path[2] . ':'),'',$templateFile);
          $templateFile = SITE_ROOT . '/Ext/extensions/' . strtolower($path[1]) . '/' . $path[2] . '/Tpl/' . $templateFile . C('TMPL_TEMPLATE_SUFFIX');
        } else {
          // 解析规则为 模板主题:模块:操作 不支持 跨项目和跨分组调用
          $action = array_pop($path);
          $module = !empty($path)?array_pop($path):MODULE_NAME;
          if(!empty($path)) {// 设置模板主题
            $path = dirname(THEME_PATH).'/'.array_pop($path).'/';
          }else{
            $path = THEME_PATH;
          }
          $depr = defined('GROUP_NAME')?C('TMPL_FILE_DEPR'):'/';
          $templateFile = $path.$module.$depr.$action.C('TMPL_TEMPLATE_SUFFIX');
        }
      }
    }
    if( is_array($params) ){
      $params['templateFile'] = $templateFile;
      return $params;
    }else{
      if(!file_exists_case($templateFile))
        throw_exception(L('_TEMPLATE_NOT_EXIST_').'['.$templateFile.']');
      return $templateFile;
    }
  }
}

 4 模板中引进css和js

4.加多深入分析本身的模板的行为类(这几个和thinkphp3.0默许的ParseTemplateBehavior.class.php类似)

1 //在模板中使用  2 <css file=''>  3 <js file=''>
class ParseContentBehavior extends Behavior {
  protected $options  = array(
    // 布局设置
    'TMPL_ENGINE_TYPE'   => 'Ey',   // 默认模板引擎 以下设置仅对使用Ey模板引擎有效
    'TMPL_CACHFILE_SUFFIX' => '.php',   // 默认模板缓存后缀
    'TMPL_DENY_FUNC_LIST'  => 'echo,exit', // 模板引擎禁用函数
    'TMPL_DENY_PHP' =>false, // 默认模板引擎是否禁用PHP原生代码
    'TMPL_L_DELIM'     => '{',     // 模板引擎普通标签开始标记
    'TMPL_R_DELIM'     => '}',     // 模板引擎普通标签结束标记
    'TMPL_VAR_IDENTIFY'   => 'array',   // 模板变量识别。留空自动判断,参数为'obj'则表示对象
    'TMPL_STRIP_SPACE'   => true,    // 是否去除模板文件里面的html空格与换行
    'TMPL_CACHE_ON'     => true,    // 是否开启模板编译缓存,设为false则每次都会重新编译
    'TMPL_CACHE_TIME'    =>  0,     // 模板缓存有效期 0 为永久,(以数字为值,单位:秒)
    'TMPL_LAYOUT_ITEM'  =>  '{__CONTENT__}', // 布局模板的内容替换标识
    'LAYOUT_ON'      => false, // 是否启用布局
    'LAYOUT_NAME'    => 'layout', // 当前布局名称 默认为layout
    // Think模板引擎标签库相关设定
    'TAGLIB_BEGIN'     => '<', // 标签库标签开始标记
    'TAGLIB_END'      => '>', // 标签库标签结束标记
    'TAGLIB_LOAD'      => true, // 是否使用内置标签库之外的其它标签库,默认自动检测
    'TAGLIB_BUILD_IN'    => 'cx', // 内置标签库名称(标签使用不必指定标签库名称),以逗号分隔 注意解析顺序
    'TAGLIB_PRE_LOAD'    => '',  // 需要额外加载的标签库(须指定标签库名称),多个以逗号分隔
    );
  public function run(&$_data){
    $engine = strtolower(C('TMPL_ENGINE_TYPE'));
    //这个地方要判断是否存在文件
    if('think'==$engine){
      if($this->checkCache($_data['file'])) { // 缓存有效
        // 分解变量并载入模板缓存
        extract($_data['var'], EXTR_OVERWRITE);
        //载入模版缓存文件
        include C('CACHE_PATH').md5($_data['file']).C('TMPL_CACHFILE_SUFFIX');
      }else{
        $tpl = Think::instance('ThinkTemplate');
        // 编译并加载模板文件
        $tpl->fetch($_data['file'],$_data['var']);
      }
    } else if('ey' == $engine) {
      if( !$_data['cacheFlag'] ){
        $class  = 'Template'.ucwords($engine);
        if(is_file(CORE_PATH.'Driver/Template/'.$class.'.class.php')) {
          // 内置驱动
          $path = CORE_PATH;
        } else {
          // 扩展驱动
          $path = EXTEND_PATH;
        }
        if(require_cache($path.'Driver/Template/'.$class.'.class.php')) {
          $tpl  = new $class;
          $tpl->fetch('',$_data['content'],$_data['var']);
        } else { // 类没有定义
          throw_exception(L('_NOT_SUPPERT_').': ' . $class);
        }
      }else{
        //操作
        $cache_flag = true;
        if(isset($_data['content'])){ //如果指定内容
          if ($_data['file']){ //指定缓存KEY
            $_data['file'] = 'custom_' . $_data['file'];
          } else { //未指定缓存KEY,则不缓存
            $cache_flag = false;
          }
        } else {
          if (is_file($_data['file'])){ //如果指定文件存在
            $_data['content'] = file_get_contents($_data['file']);
          } else {
            throw_exception(L('_TEMPLATE_NOT_EXIST_').'['.$_data['file'].']');
          }
        }
        //这里文件和内容一定有一个存在,否则在之前就会有异常了
        if($cache_flag && $this->checkCache($_data['file'],$_data['content']) ) { // 缓存有效
          // 分解变量并载入模板缓存
          extract($_data['var'], EXTR_OVERWRITE);
          //载入模版缓存文件
          include C('CACHE_PATH').md5($_data['file']).C('TMPL_CACHFILE_SUFFIX');
        } else {
          $class  = 'Template'.ucwords($engine);
          if(is_file(CORE_PATH.'Driver/Template/'.$class.'.class.php')) {
            // 内置驱动
            $path = CORE_PATH;
          } else {
            // 扩展驱动
            $path = EXTEND_PATH;
          }
          if(require_cache($path.'Driver/Template/'.$class.'.class.php')) {
            $tpl  = new $class;
            $tpl->fetch($_data['file'],$_data['content'],$_data['var']);
          } else { // 类没有定义
            throw_exception(L('_NOT_SUPPERT_').': ' . $class);
          }
        }
      }
    } else {
      //调用第三方模板引擎解析和输出
      $class  = 'Template'.ucwords($engine);
      if(is_file(CORE_PATH.'Driver/Template/'.$class.'.class.php')) {
        // 内置驱动
        $path = CORE_PATH;
      }else{ // 扩展驱动
        $path = EXTEND_PATH;
      }
      if(require_cache($path.'Driver/Template/'.$class.'.class.php')) {
        $tpl  = new $class;
        $tpl->fetch($_data['file'],$_data['var']);
      }else { // 类没有定义
        throw_exception(L('_NOT_SUPPERT_').': ' . $class);
      }
    }
  }
  protected function checkCache($tmplTemplateFile = '',$tmplTemplateContent='') {
    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;
    }
    // 开启布局模板
    if(C('LAYOUT_ON')) {
      $layoutFile = THEME_PATH.C('LAYOUT_NAME').C('TMPL_TEMPLATE_SUFFIX');
      if(filemtime($layoutFile) > filemtime($tmplCacheFile)) {
        return false;
      }
    }
    // 缓存有效
    return true;
  }
}

 5  调用分页类

5.增多自身解析模板内容的类TemplateEy.class.php(那一个位于thinkphpExtendDriverTemplate目录下边)
只是将系统默许的ThinkTemplate.class.php类修改了fetch方法修改代码如下:

1 import('ORG.Util.Page');  2 $count=M('user')->count();  3 $page=new Page($count,10);  4   5 $limit=$page->firstRow.','.$page->lastRows;  6   7 $user=M('user')->order('time DESC')->limit($limit)->select();  8   9 $this->page=$page->show();//将分页传输到模板上面
// 加载模板
public function fetch($templateFile,$templateContent,$templateVar) {
    $this->tVar = $templateVar;
    if($templateContent && !$templateFile) { //不缓存
      if(C('LAYOUT_ON')) {
        if(false !== strpos($templateContent,'{__NOLAYOUT__}')) { // 可以单独定义不使用布局
          $templateContent = str_replace('{__NOLAYOUT__}','',$templateContent);
        }else{ // 替换布局的主体内容
          $layoutFile = THEME_PATH.C('LAYOUT_NAME').$this->config['template_suffix'];
          $templateContent = str_replace($this->config['layout_item'],$templateContent,file_get_contents($layoutFile));
        }
      }
      //编译模板内容
      $templateContent = $this->compiler($templateContent);
      extract($templateVar, EXTR_OVERWRITE);
      echo $templateContent;
    } else {
      $templateCacheFile = $this->loadTemplate($templateFile,$templateContent);
      // 模板阵列变量分解成为独立变量
      extract($templateVar, EXTR_OVERWRITE);
      //载入模版缓存文件
      include $templateCacheFile;
    }
}

 6  模板中利用if语句

6.调用假使数据库中模板的源委空头支票那么大家依然去读数据库中的内容:

1 <if condition=''>//此处的条件数组元素只能写$v['test'],不能写$v.test  2 <else/>  3 </if>
if( array_key_exists( $display_mode, $params['tpl'] ) && strlen($params['tpl'][$display_mode]) > 0 ){
return $this->fetch("Ext:New:Frontend:show",$params['tpl'][$display_mode]);
}else{
return $this->fetch("Ext:New:Frontend:show");
}

 7 表单传参管理

更加多关于thinkPHP相关内容感兴趣的读者可查阅本站专项论题:《ThinkPHP入门教程》、《thinkPHP模板操作才干计算》、《ThinkPHP常用艺术总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进级教程》、《Zend FrameWork框架入门教程》及《PHP模板技术计算》。

1 I('pid',0,'intval');//无论是post还是get都可以,0是默认值

仰望本文所述对大家基于ThinkPHP框架的PHP程序设计具备帮衬。

 8 修改模板的默许点号深入分析

你可能感兴趣的稿子:

  • thinkphp3.0 模板中等高校函授数的运用
  • ThinkPHP3.0略缩图不可能保留到子目录的消除方法
  • thinkPHP的Html模板标签使用方法
  • ThinkPHP跳转页success及error模板实例教程
  • ThinkPHP模板之变量输出、自定义函数与剖断语句用法
  • ThinkPHP模板自定义标签使用方式
  • ThinkPHP模板输出display用法解析
  • 浅析ThinkPHP的模板输出作用
  • thinkphp模板传承实例简述
  • thinkphp配置连接数据库本事
  • thinkPHP数据库增加和删除改查操作方法实例详解
'TMPL_VAR_IDENTIGY'=>'array'

 9 定制错误页面

'TMPL_EXCEPTION_FILE'=>'./public/404.html'

 


本文由www.w88985.com发布于w88官方网站手机版,转载请注明出处:0框架落到实处模板保存到数据库的法子,Thinkp

关键词: www.w88985.c

上一篇:thinkphp惯例配置文件,的config的公文配置
下一篇:没有了