新浦京81707con > 功能介绍 > xpj娱乐城PHPCMS20008二次开发,PHPCMS模版解析之TE

原标题:xpj娱乐城PHPCMS20008二次开发,PHPCMS模版解析之TE

浏览次数:187 时间:2019-07-10

前天跟到了phpcms系统早先化到调整器流程 今天阿唐土憋带大家一道深入分析phpcms模版机制
调控器 在进展部分 逻辑操作后 就开头渲染 视图彰显 用到 template函数
故而要搞清phpcms模版机制 那些函数是必须看的

CodeIgniter很合乎小站点应用开辟,不过它自带的view作用大概会给不懂PHP的前端人士推动麻烦。 比较之下phpcms的view模板深入分析就强很多了,所以这里就把PHPCMS的模版深入分析功用剥离出去,加到PHPCMS上。
首先在CodeIgniter libraries中 增加 template_cache.php

<?php
PHPCMS贰零零捌模板原理篇

function template($module = ‘content’, $template = ‘index’, $style = ”) {
//暗中同意模块为content.暗许模版文件为index
if(strpos($module, ‘plugin/’)!== false) {
//检验模块里面是还是不是蕴涵plugin字符 这里进行了对插件模版的判别插件模版要求用p_template解析
$plugin = str_replace(‘plugin/’, ”, $module);
return p_template($plugin, $template,$style);
}
$module = str_replace(‘/’, DIRECTORY_SEPARATOR, $module);
//路线包容性管理
if(!empty($style) && preg_match(‘/([a-z0-9-_] )/is’,$style)) {
} elseif (empty($style) && !defined(‘STYLE’)) {
//变量STYLE一时半刻不亮堂在哪个地方初阶化的 存在当前网址模板名
if(defined(‘SITEID’)) {
$siteid = SITEID;
} else {
$siteid = param::get_cookie(‘siteid’);
}
if (!$siteid) $siteid = 1;
$sitelist = getcache(‘sitelist’,'commons’);
if(!empty($siteid)) {
$style = $sitelist[$siteid]['default_style'];
}
} elseif (empty($style) && defined(‘STYLE’)) {
$style = STYLE;
} else {
$style = ‘default’;
}
if(!$style) $style = ‘default’;
//以上全数为推断 当前网址 应该用哪个模版 风格
$template_cache = pc_base::load_sys_class(‘template_cache’);
//载入template_cache类
$compiledtplfile = PHPCMS_PATH.’caches’.DIRECTORY_SEPARATOR.’caches_template’.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.’.php’;
//组合当前模块模版缓存文件地点
if(file_exists(PC_PATH.’templates’.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.’.html’)) {
//倘使模版文件存在
if(!file_exists($compiledtplfile) || (@filemtime(PC_PATH.’templates’.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOCRUISER.$template.’.html’) > @filemtime($compiledtplfile))) {//如果缓存文件不设有既未有编写翻译模版 可能 模版的修改时间超过了系统安装缓存更新时间 从新编写翻译模版缓存
$template_cache->template_compile($module, $template, $style);
}
} else {
//假诺模版文件不设有
$compiledtplfile = PHPCMS_PATH.’caches’.DIRECTORY_SEPARATOR.’caches_template’.DIRECTORY_SEPARATOR.’default’.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.’.php’;
if(!file_exists($compiledtplfile) || (file_exists(PC_PATH.’templates’.DIRECTORY_SEPARATOR.’default’.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.’.html’) && filemtime(PC_PATH.’templates’.DIRECTORY_SEPARATOR.’default’.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOENCORE.$template.’.html’) > filemtime($compiledtplfile))) {//上边判别了模版不真实,这一年早先剖断私下认可模版路径对应模版是还是不是留存,能够实现知道用暗许default模版替换,借使暗许的模板的 缓存 文件 不设有 大概 存在 默许的沙盘 但时间抢先了 系统装置缓存时间 在从新编写翻译模版
$template_cache->template_compile($module, $template, ‘default’);
} elseif (!file_exists(PC_PATH.’templates’.DIRECTORY_SEPARATOR.’default’.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATO福睿斯.$template.’.html’)) {//模版不设有
showmessage(‘Template does not exist.’.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.’.html’);
}
}
return $compiledtplfile;//重临编写翻译文件
}
方方面面逻辑异常的粗略 推断 稍微有一点点长
此处我们得以剖判到 phpcms模拟为编写翻译型的模板剖判进程
template函数首若是决定 模版分析类职业 情形 整个编写翻译 进程由template_cache类实现,要想打听全体模版编写翻译进程 还须求读 这一个类
后一次日记一同解析那几个类 编写翻译进程

复制代码 代码如下:

一、config.inc.php 里面关于模版的相关陈设变量

阿唐博客 blog.itxti.net

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/**
 *  模板分析缓存
 */
final class template_cache {

//模板相关安排
define('TPL_ROOT', PHPCMS_ROOT.'templates/'); //模板保存物理路线
define('TPL_NAME', 'default'); //当前模板方案目录
define('TPL_CSS', 'default'); //当前体制目录
define('TPL_CACHEPATH', PHPCMS_ROOT.'data/cache_template/'); //模板缓存物理路线
define('TPL_REFRESH', 1); //是或不是开启模板缓存自动刷新

版权申明:本文为博主原创文章,未经博主允许不得转发。

    public $cache_path;
    public function __construct()
    {
        //$CI =& get_instance();
        $this->cache_path = APPPATH.'views';
    }

二、global.func.php 的连带调用函数


    /**
     * 编写翻译模板
     *
     * @param $module    模块名称
     * @param $template    模板文件名
     * @param $istag    是或不是为标签模板
     * @return unknown
     */

function template($module = 'phpcms', $template = 'index', $istag = 0)    //模版调用函数(模块名,模版名,是或不是tag)
{
$compiledtplfile = TPL_CACHEPATH.$module.'_'.$template.'.tpl.php';       //依照参数生成cache模板php文件
if(TPL_REFRESH && (!file_exists($compiledtplfile) || @filemtime(TPL_ROOT.TPL_NAME.'/'.$module.'/'.$template.'.html') > @filemtime($compiledtplfile) || @filemtime(TPL_ROOT.TPL_NAME.'/tag.inc.php') > @filemtime($compiledtplfile)))
//推断模版生成文书是或不是过期,或一纸空文,不然重新生成
{
   require_once PHPCMS_ROOT.'include/template.func.php'; //调用模板函数
   template_compile($module, $template, $istag);          //生成最新模版相关文件
}
return $compiledtplfile;                                //再次来到模板生成文件.php文件
}

    public function template_compile($module, $template, $style = 'default') {

function tpl_data($module = 'phpcms', $template = 'index')   //生成tpl的数量模板
{
@extract($GLOBALS, EXTR_SKIP);
ob_start();
include template($module, $template);
$data = ob_get_contents();
ob_clean();
return $data;
}

        $tplfile= APPPATH.'views'.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR.$template.'.php';

三、template.func.php 的连锁函数
<?php
function template_compile($module, $template, $istag = 0)
{
$tplfile = TPL_ROOT.TPL_NAME.'/'.$module.'/'.$template.'.html';   //生成模版名
$content = @file_get_contents($tplfile);                          //加载模版文件
if($content === false) showmessage("$tplfile is not exists!");
$compiledtplfile = TPL_CACHEPATH.$module.'_'.$template.'.tpl.php'; //生成模版cache文件名
$content = ($istag || substr($template, 0, 4) == 'tag_') ? '<?php function _tag_'.$module.'_'.$template.'($data, $number, $rows, $count, $page, $pages, $setting){ global $PHPCMS,$MODULE,$M,$CATEGORY,$TYPE,$AREA,$GROUP,$MODEL,$templateid,$_userid,$_username;@extract($setting);?>'.template_parse($content, 1).'<?php } ?>' : template_parse($content);
//用template_parse正则替换后,变成能够施行的php文件
$strlen = file_put_contents($compiledtplfile, $content); //写到cache里
@chmod($compiledtplfile, 0777);
return $strlen;                       //重临生成值
}

        if (! file_exists ( $tplfile )) {
            show_error($tplfile ,  500 ,  'Template does not exist(1)');
        }

function template_refresh($tplfile, $compiledtplfile)   //单个模版文件的更新
{
$str = file_get_contents($tplfile);
$str = template_parse($str);
$strlen = file_put_contents($compiledtplfile, $str);
@chmod($compiledtplfile, 0777);
return $strlen;
}

        $content = @file_get_contents ( $tplfile );

function template_module($module)                              //更新贰个模块的享有缓存文件
{
$files = glob(TPL_ROOT.TPL_NAME.'/'.$module.'/*.html');    //征收成文件名数组
if(is_array($files))
{
   foreach($files as $tpl)
   {
    $template = str_replace('.html', '', basename($tpl));   //正则取文件名,去掉.html
    template_compile($module, $template);                  //重新生成module的cache
   }
}
return TRUE;
}

        $filepath = $this->cache_path.DIRECTORY_SEPARATOR.'caches_template'.DIRECTORY_SEPARATOR.$style.DIRECTORY_SEPARATOR.$module.DIRECTORY_SEPARATOR;

function template_cache()                         //生成所能的模块cache文件
{
    global $MODULE;                               //全局变量module 可能是调用的cache.func生成的文书下的变量引进的,权且没明,下回分解
foreach($MODULE as $module=>$m)
    {
        template_module($module);
}
return TRUE;
}

       
        if(!is_dir($filepath)) {
            mkdir($filepath, 0777, true);
        }
        $compiledtplfile = $filepath.$template.'.php';
        $content = $this->template_parse($content);
        $strlen = file_put_contents ( $compiledtplfile, $content );
        chmod ( $compiledtplfile, 0777 );
        return $strlen;
    }

function template_block($blockid)                  
{
$tplfile = TPL_ROOT.TPL_NAME.'/phpcms/block/'.$blockid.'.html';
$compiledtplfile = TPL_CACHEPATH.'phpcms_block_'.$blockid.'.tpl.php';
if(TPL_REFRESH && (!file_exists($compiledtplfile) || @filemtime($tplfile) > @filemtime($compiledtplfile)))
{
   template_refresh($tplfile, $compiledtplfile);
}
return $compiledtplfile;
}

本文由新浦京81707con发布于功能介绍,转载请注明出处:xpj娱乐城PHPCMS20008二次开发,PHPCMS模版解析之TE

关键词: 新浦京81707con

上一篇:你能对几道,看看国外的javascript题目

下一篇:没有了