Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

关于模板的仿制教程

[复制链接]
wy5591 发表于 2009-8-18 22:23:36 | 显示全部楼层 |阅读模式
UCHome模板
适用版本: UCHome 2.0
语言编码:  
风格转换者: 仿制
关于模板的仿制教程
本人小站:http://dy.70ys.cn



要研究一个项目的源代码,拿为己用,最好的开始是看到自己对源码的修改生效,运行的程序确实符合你的修改结果。所以我对ucenter home的源码解读也是走的这个模式,找到首页,一步步读下去,找到文本之类修改稳妥的地方改改,看看能生效不:
/home目录下有个space.php页面,代码大致为:

include_once('./common.php');
....一些检查和变量初始化的代码....
include_once(S_ROOT."./source/space_{$do}.php");

$do默认是index,include了source目录下space_index.php文件,好吧,我们去找到这个文件:
文件最后一部分的代码是这样的:
...与最近访问列表雷同的代码,各个part的数据和设置准备
//最近访客列表
$visitorlist = array();
if($space['self']) {
    $query = $_SGLOBAL['db']->query("SELECT * FROM ".tname('visitor')." WHERE uid='$space[uid]' ORDER BY dateline DESC LIMIT 0,6");
    while ($value = $_SGLOBAL['db']->fetch_array($query)) {
        $visitorlist[] = $value;
    }
}

include_once template("space_index");

tempate("space_index")这个方法给我第一感觉是读取space_index这个模板文件,刚好home下面有个template目 录,那么我就去找到这个目录,找到了space_index.htm文件,果然和我在浏览器看到的html元素差不多,哦,那么改这里我应该马上就能看到 变化吧,于是很弱地把“留言版”改成了“留言版2”....

刷新浏览器...没变....重启apache....没变.....清浏览器缓存...还是没变....估计这Y做了缓存....

用admin账号登录管理后台,看到有清理缓存的选项就处理了下...终于变了...

看来tempate()方法另有玄机啊,好好跟了下源码,在source目录下的function_common.php文件里找到了实现:
//模板调用
function template($name) {
    global $_SC, $_SGLOBAL;

    $tpl = strexists($name,'/')?$name:"template/$_SC[template]/$name";
    $objfile = S_ROOT.'./data/tpl_cache/'.str_replace('/','_',$tpl).'.php';
    if(!file_exists($objfile)) {
        include_once(S_ROOT.'./source/function_template.php');
        parse_template($tpl);
    }
    return $objfile;
}
源码面前,了无秘密,处理过的模板文件生成了可include的php文件缓存在了data/tpl_cache目录下.

出于对模板htm生成php的过程好奇,研究了下parse_template方法,主要是用preg_replace方法进行正则表达式的匹配和替换,将模板代码<!--{if $sharelist}-->换成php代码<?php if($sharelist) { ?>,有很多种类型的替换,需要花些功夫才能掌握,然后还include一个防止远程包含的判断,这样就能include直接调用了,sns类型的网站,静态化网页缓存比较困难,用这种方式分离模板设计,尽可能提高性能。

uchome的代码规划得比较好,读起来比较轻松,也有不少注释,很适合学习和修改
小阳2008 发表于 2009-8-18 22:48:48 | 显示全部楼层
又来支持你啦

















nga   宁波 战地之王 英雄之城 dnf加点
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-17 10:58 , Processed in 0.024215 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表