php模板 x2,Discuz! x2更新DIY模板分析

碰到一个DIY模板更新的问题,顺便分析了下更新的机制,整理记录下来了就。

哪些是DIY模板呢?

DIY模板加载的代码比较特殊,具体格式类似下面include template('diy:***');

***为其他内容,不限。

如加载论坛首页的代码:include template('diy:forum/discuz:'.$gid);

模板是如何加载的呢?

这里不对x2默认的模板加载方式进行分析,只针对DIY部分的更新加以说明。

找到source/function/function_core.php文件,找到template函数,在函数里可找到如下代码:if($tpldir == 'data/diy' && ($tplrefresh ==1 || ($tplrefresh > 1 && !($_G['timestamp'] % $tplrefresh))) && filemtime($diypath.$file.'.htm') < filemtime(DISCUZ_ROOT.TPLDIR.'/'.($primaltpl ? $primaltpl : $oldfile).'.htm')) {

if (!updatediytemplate($file)) {

unlink($diypath.$file.'.htm');

$tpldir = '';

}

}

这段就是判断如果是DIY模板,同时满足更新条件,则更新相应的DIY模板。

更新的操作为updatediytemplate($file)。

还是在function_core.php文件里,找到updatediytemplate函数,代码如下:function updatediytemplate($targettplname = '') {

global $_G;

$r = false;

$where = empty($targettplname) ? '' : " WHERE targettplname='$targettplname'";

$query = DB::query("SELECT * FROM ".DB::table('common_diy_data')."$where");

require_once libfile('function/portalcp');

while($value = DB::fetch($query)) {

$r = save_diy_data($value['primaltplname'], $value['targettplname'], unserialize($value['diycontent']));

}

return $r;

}

common_diy_data表里存放的就是DIY数据,数据格式类似如下:

362a51138dcb3e3cac6c0bea78af48bb.png

这里会从common_diy_data中查出更新的源文件和目前文件。

找到source/function/function_portalcp.php,找到save_diy_data函数,有如下代码:function save_diy_data($primaltplname, $targettplname, $data, $database = false, $optype = '') {

global $_G;

if (empty($data) || !is_array($data)) return false;

checksecurity($data['spacecss']);

$file = ($_G['cache']['style_default']['tpldir'] ? $_G['cache']['style_default']['tpldir'] : './template/default').'/'.$primaltplname.'.htm';

if (!file_exists($file)) {

$file = './template/default/'.$primaltplname.'.htm';

}

if(!file_exists($file)) return false;

......(中间的部分省略)

return $r;

}

注意里面的这句代码$file = ($_G['cache']['style_default']['tpldir'] ? $_G['cache']['style_default']['tpldir'] : './template/default').'/'.$primaltplname.'.htm';

这里会以你当前使用的风格路径下的相应文件$primailtplname.htm为源文件进行更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值