discuz 1.5X源码简单分析

原创 2012年03月22日 14:02:25

不考虑后台,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
首先,引用了两个文件

Php代码  
require './source/class/class_core.php';  require './source/function/function_forum.php';  

class_core初始化DZX的环境。通过下面两句代码实现
Php代码  
$discuz = & discuz_core::instance();  $discuz->cachelist = $cachelist;  $discuz->init();  

其中的$discuz->cachelist = $cachelist;没搞明白是做什么用的。
接下来根据不同的mod调用不同的php文件,代码如下:
Php代码  
$mod = !in_array($discuz->var['mod'], $modarray) ? 'index' : $discuz->var['mod'];  

url中如果没有通过?mod=xxx来指定mod的话,默认为index。
然后引用模块文件
Php代码  
require DISCUZ_ROOT.'./source/module/forum/forum_'.$mod.'.php';  

我们只要看一下source\module下面的目录及文件,就能知道每个入口文件都有哪些mod参数可以指定。
这里默认会找到source\module\forum\forum_index.php。
forum_index.php首页取到显示页面需要的数据,前面写了一大堆的东西,没细看。对流程最重要的一句是:
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}直接被本地化成相应的字符了
Html代码  
<!--{hook/index_side_bottom}-->  

变成了:
Php代码  
<?php if(!emptyempty($_G['setting']['pluginhooks']['index_side_bottom'])) echo $_G['setting']['pluginhooks']['index_side_bottom']; ?>  

$_G在DZX里常见到,感觉是一个很庞大的全局变量。还没细细研究了。

总体来说,DZX的流程,也是目前大多CMS的设计方式。根据URL准备数据,再调用对应的模板,模板编译后保存为缓存,缓存文件中调用函数或已准备好的数据,最后显示。像我看过的wordpress,textpattern差不多都这样。

discuz X1.5最新康盛源码

  • 2010年11月22日 09:32
  • 7.12MB
  • 下载

Discuz! X2 核心类(class_core.php)源码分析

/** *      [Discuz!] (C)2001-2099 Comsenz Inc. *      This is NOT a freeware, use is subject to li...
  • heephp
  • heephp
  • 2012年01月06日 16:47
  • 773

Discuz! X2 核心类源码(class_core.php)分析

新安装的 Discuz!X是如何判断是否是第一次安装的?相关源码分析

通过分析 Discuz 的源码可以找到答案。 首先在 Discuz! X2 根目录下找到 index.php。正常情况下首先加载的均是此文件。此文件的主要功能是根据客户端传送过来的URL来判断应...

discuz!X1.5 指定版块发帖时 自动默认最高阅读权限(让您的秘密版块只有vip可见)

有时候站里一些特殊版块 ,比如我那个站,里面有几个版块需要发帖的时候,想让只有vip才能看到,或者只有楼主和管理员可见,而其他人只能看到列表而看不到内容,这就用到一下代码了 修改文件:/templa...

巧用Discuz! X1.5 DIY门户应用

门户,是Discuz!X1.5版本最重要的核心功能之一。站长可以用“门户”制作一个简单的社区首页,也可以制作成类似于门户网站那样复杂的首页。一般来说,地方社区的“门户”往往具有示范效应,能够增强自身品...
  • gocoo
  • gocoo
  • 2011年01月28日 00:33
  • 280

OpenJWeb+discuz(X1.5)集成说明

因为discuz已经是一个相当成熟的论坛产品,所以openjweb取消了论坛产品的开发计划,而是直接与discuz集成。集成涉及到如何部署在同一台主机下,并共用80端口,同时还要考虑openjweb的...

discuz!x1.5 程序目录和文件列表

作为一款以社区为基础的专业建站平台,Discuz! X1社区平台系统让论坛(BBS)、社交网络(SNS)、门户(Portal)、群组(Group)、开放平台(Open Platform)充分融合于一体...

discuz!x1.5 程序目录和文件列表

from:http://blog.sina.com.cn/s/blog_56f273130100sgab.htmldiscuz!x1.5 程序目录和文件列表 作为一款以社区为基础的专业建站平台,Di...

Discuz!X1.5中实现不同版块使用不同的模板文件

通过此修改可在Discuz!X1后台为不同版块设置不同的模板文件。在需要为论坛不同版块设置不同模板风格的时候特别有用,比如你专门一个版块用来发布活动,那么可以为这个版块专门做一个模板文件,从而实现个性...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:discuz 1.5X源码简单分析
举报原因:
原因补充:

(最多只允许输入30个字)