看了一会儿DISCUZ X1.5的代码,记录一下收获。
不考虑后台,dzx的请求入口大约共有七个。为根目录下的forum.php(广场,其实就是论坛),group.php(群组),home.php(家园),index.php(首页),member.php(会员管理,登录注册什么的),misc.php(排行榜),search.php(搜索),userapp.php(不清楚,用户应用?)。
请求首页index.php的时候,默认会转向到广场forum.php。下面简单分析一下请求forum.php时DZX的整体执行流程。
打开forum.php
首先,引用了两个文件
require './source/class/class_core.php';
require './source/function/function_forum.php';
class_core初始化DZX的环境。通过下面两句代码实现
$discuz = & discuz_core::instance();
$discuz->cachelist = $cachelist;
$discuz->init();
其中的$discuz->cachelist = $cachelist;没搞明白是做什么用的。
接下来根据不同的mod调用不同的php文件,代码如下:
$mod = !in_array($discuz->var['mod'], $modarray) ? 'index' : $discuz->var['mod'];
url中如果没有通过?mod=xxx来指定mod的话,默认为index。
然后引用模块文件
require DISCUZ_ROOT.'./source/module/forum/forum_'.$mod.'.php';
我们只要看一下source\module下面的目录及文件,就能知道每个入口文件都有哪些mod参数可以指定。
这里默认会找到source\module\forum\forum_index.php。
forum_index.php首页取到显示页面需要的数据,前面写了一大堆的东西,没细看。对流程最重要的一句是:
include template('diy:forum/discuz:'.$gid);
直观印象,template返回一个路径。认真再想,其实流程大体上应该是这样的:
template的参数肯定是指定了模板文件的路径,但是模板文件要通过解析才能用。所以template函数肯定要对模板里的标签进行解析,那为什么是返加一个URL呢?DZX为了提高效率将解析后的模板做了一个缓存,就是说把一个html的模板解析成一个php的“编译”后的文件,然后保存在一个地方,下次用的时候,直接去读“编译”后的文件,省了编译这步,提高效率。
template函数位于source\function\function_core.php文件里。大体看一下,跟上面说的差不多。
读的模板文件为template\default\forum\discuz.htm
返回的缓存文件保存在/data/template目录里。
接下来分别打开模板文件emplate\default\forum\discuz.htm和缓存文件ata\template\1_diy_forum_discuz.tpl.php。
对比可以发现,$announcements编译成了<?=$announcements?>,那$announcements变量哪来呢的?source\module\forum\forum_index.php的get_index_announcements函数就是来取这个值的。
{lang xxx}直接被本地化成相应的字符了
<!--{hook/index_side_bottom}-->
变成了:
<?php if(!empty($_G['setting']['pluginhooks']['index_side_bottom'])) echo $_G['setting']['pluginhooks']['index_side_bottom']; ?>
$_G在DZX里常见到,感觉是一个很庞大的全局变量。还没细细研究了。
总体来说,DZX的流程,也是目前大多CMS的设计方式。根据URL准备数据,再调用对应的模板,模板编译后保存为缓存,缓存文件中调用函数或已准备好的数据,最后显示。像我看过的wordpress,textpattern差不多都这样。
分享到:
相关推荐
此源码摘自康盛网站,本人看过代码写得挺好的,给大家推荐下,相互共享
discuz x1.5经典版,中国第一SNS源码
百度新闻插件 for Discuz! x1.5~2-源码.zip
商业源码-编程源码-Discuz! X1.5 繁体BIG5 build 20101025.zip
商业源码-编程源码-Discuz! X1.5 繁体UTF8 build 20101025.zip
PHP实例开发源码—Xweibo for Discuz!X1.5连接工具.zip PHP实例开发源码—Xweibo for Discuz!X1.5连接工具.zip PHP实例开发源码—Xweibo for Discuz!X1.5连接工具.zip
商业源码-编程源码-Discuz! X1.5 简体UTF-8 build 20101025.zip
discuz源码分析.pdf Discuz开发教程.txt Discuz!模板制作教程.pdf 论坛社区discuz模版制作教程.doc discuz!x1.5数据表.docx discuz_x1.5文件结构.txt Discuz!X1.5详细教程.doc discuz_x1.5目录文件列表结构及模板...
Discuz X1.5是康盛创想Comsenz推出的一个以社区为基础的专业建站平台,让论坛BBS、个人空间SNS、门户Portal、群组Group、应用开放平台Open Platform充分融合于一体,帮助网站实现一站式服务。 Discuz! X1.5 Release...
源码学习,压缩包解压密码:www.cqlsoft.com
Discuz X1.5是康盛创想Comsenz推出的一个以社区为基础的专业建站平台,让论坛BBS、个人空间SNS、门户Portal、群组Group、应用开放平台Open Platform充分融合于一体,帮助网站实现一站式服务。Discuz! X1.5 Release ...
百度新闻插件适用于Discuz! X1.5和Discuz! X2,与百度新闻同步,不需要更新,也不需要采集!小偷源码类型!
百度新闻插件适用于Discuz! X1.5和Discuz! X2,与百度新闻同步,不需要更新,也不需要采集!小偷源码类型!
Discuz X1.5是康盛创想Comsenz推出的一个以社区为基础的专业建站平台,让论坛BBS、个人空间SNS、门户Portal、群组Group、应用开放平台Open Platform充分融合于一体,帮助网站实现一站式服务。 Discuz! X1.5 ...
源码学习,压缩包解压密码:www.cqlsoft.com
X1.5 手机版发布了,在今天开启的Discuz!X1.5 手机版试用申请活动中,在短短的5个小时之间,官方团队成员的微博转播数近200次,参与活动的站长多达550名,充分感受到了广大站长的热情以及对手机版的期待。
X1.5 圣诞节模板,蓝黑色,附PSD源文件,本风格是基于DiscuzX1.5 GBK (2010-11-25)版本,并且只修改了部分文件,未修改之文件,调用默认模板包的文件。如果出现变形,请下载最新程序,使用最新的默认模板覆盖你目前的...
X1.5RC Release 20100901 [风格模板]重构 风格模板以及CSS,让风格制作更简易降低 页面数据输出量,提升页面渲染速度调整 各功能显示细节,增大提示信息的友好度改善 直接下载收费附件的用户体验改善 趋势统计...
源码学习,压缩包解压密码:www.cqlsoft.com