2011年12月

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数据,数据格式类似如下:

这里会从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为源文件进行更新。

第一台相机

工作一年了,到年底了,准备给自己入个数码产品。
细想了下,就俩样:手机和相机。
手机目前用的就是能打打电话,发个短信,别的什么也不能做;还没相机,不过一直想入。
手机的话看中了Nokia的N9,外观实在太赞了,唯一一点前景不明,软件数量可能跟不上,还处于观望阶段。
周末混迹于数字尾巴社区,突然发现很多大赞的照片,细看发现都是理光GRD拍的,于是就稍微了解了下这个品牌。
好吧,我承认我是个摄影小白,一无所知...

理光(日文:株式会社リコー、英文:Ricoh Company, Ltd.),是日本的事务机器及光学机器制造商,市井清在1936年成立理化学研究所,主要研究理研阳画感光纸,其后于1963年正式易名为理光,并在同年成立香港分公司并进一步迈向大中华市场,名为丽确;1997年全球统一中文译名为“理光”,而当时理光广告位位于湾仔告士打道“尚汇”(近铜锣湾铁路站),而理光劲敌为佳能、索尼、宾得、施乐、柯尼卡美能达、宝丽来、哈苏、三星、Panasonic。——维基百科

看了下论坛上关于理光这款机子的评测:
经典中淬炼出的完美——理光 GRD4 体验记
【你在烦恼些什么】理光GRD III or IV选购之我见

于是基本确定入手IV这台机子,顺便又看了下网上商城这款机子的报价,京东3999有货,卓越3999没货。
对比了下两家的物品,发现卓越里带镜头盖,于是继续纠结是入手相机还是手机。

经过慎重缜密的考虑,决定先入手相机,手机今年就不考虑了。
今天卓越上又看了下物品情况,发现有货了,于是马上下单,顺便又买了本GRD的书《极致的浪漫》,共4039块。
第一次在网上下这么大的单子,也是第一台自己的相机。
接下来就是等待了,订单显示下周五可以送来,我比较怀疑需要这么长时间么...

唯一一点的疑问就是,网上看的是黑色不带镜头盖的,但是卓越的包装清单里是带镜头盖的。

周末电影之《幸福额度》

志玲妹纸的剧照。

讲述一对双胞胎姐妹莫晓红和莫晓青各自关于爱情的故事。
虽说剧情很老套,但是看过之后让我超出预期的地方就是志林妹纸了。
因为在这部电影里她一人扮演了两个角色,分别出演莫晓红和莫晓晴,两个不同性格的人物,演绎的还是很到位的,大大超出了以前对她“花瓶”的印象。

另外结尾的台词不错:
要王子还是房子,
要幸福还是衣服,
我们不能确定,
我们勾选的是迈向幸福人生的正确答案,
但能确定是,
为了爱情,
为了幸福的人生,
我们应该奋不顾身,
不计一切代价。

有感

在这个12月份的第一天,总觉得自己要写的什么。

忙忙碌碌的,又是一年到头了。
一年间,有些人离开了,又有新的人加入进来。
一年间,得到了一些东西,同时也失去了一些东西。
有些事,不是你自己能左右的,能做的就是摆好心态,慢慢等吧。

“量变引起质变”,高中让我坚持下来的一句话。
或许你今天承受的苦难,就是为了以后的幸福。
所以,继续那些一点点的量变过程吧。

昨天的时候我还以为是周二,没想到今天都已经是周四了,又是一周到头。
虽然周末可以睡懒觉,但是日子就这么从眼前嗖嗖的流走,总感觉还是少了些什么。
这么过的日子,总觉得缺少了些色彩。
人生不是应该充满了色彩,五颜六色的吗?

这两天老家下雪了,看新闻跟2010年的那场雪差不多大。
现在想起2010年在家工作的日子,不免心酸。
09年毕业回家工作,没经过家里自己找的单位,家里一开始还感觉挺好的,也没让家里操心。
结果上班第一天,挨了20年的胃不工作了,需要动手术,当天下午办的住院,晚上开刀动手术。
呆了十几天出院,期间的接本考试结果出来了,落榜了,因为这个我跟我爸有一段不说话。
真是多事之秋,在家休整几个月后,又重新找工作。
每天早上从车到市里上班,下午从市里坐车回家,稍微晚点有可能赶不上回家的车。
虽然辛苦,但最起码开始自己养活自己。
那天下的那场雪,搞的整个邢台的交通瘫痪了,听说长途汽车站停运了都...
悲催的回不了家了,还好市里有朋友,后来到他那里借宿。
再后来直接住他那里了,这里要谢谢这个朋友,这么多年上学工作都在外地,家里很多时候忙不过来他都过去帮忙。
整个冬天俩人在没有暖气的屋子里就这么熬过来了,你能想想前一天晚上要准备好第二天洗漱的水的日子么?
因为第二天起来水管是会冻住的,屋里准备的水也会结冰的...
在家工作了有半年的时间,说起来很是惭愧,往家就只带回去3000块钱。

现在回想起来,可能正是应了那句“量变引起质变”的话了,没有之前的辛酸,或许也不会有现在的日子。
继续加油吧,未来还很远!

PS:很久就想把积蓄了很久的东西写出来,一直都没头绪,好在这次没有像之前一样,虽然写的很乱...