PS:本人刚接触discuz论坛,php水平有限,当中的理解,如有不正确之处,欢迎指出
依我的理解,discuz的MVC结构是这样的,Model即逻辑处理应该是source/function,这里面的一些函数是对数据库,缓存,内存,配置等一些的相关操作。
Control即控制器,应该是source/module对应相关的模块,比如门户的相关操作,就在portal文件夹下,论坛的相关操作是在forum文件夹下。
而view即最终呈现给用户看的则是template()这个函数,稍后可以简单的说下这个函数的相关过程。
接下来说下执行的相关流程,先看下一些代码
define('APPTYPEID', 4);
define('CURSCRIPT', 'portal');
require './source/class/class_core.php';//这个文件是核心文件,初始化工作是在这里进行的。
$discuz = & discuz_core::instance//实例化对象,这里是一个单件模式
$cachelist = array('userapp', 'portalcategory');
$discuz->cachelist = $cachelist;//声明缓存列表
$discuz->init();
//进行初始化,环境检查,读取配置,设置内存等
require DISCUZ_ROOT.'./source/function/function_home.php';
require DISCUZ_ROOT.'./source/function/function_portal.php';
//包含protal.php对应的核心函数文件
if(empty($_GET['mod']) || !in_array($_GET['mod'], array('list', 'view', 'comment', 'portalcp', 'topic', 'attachment'))) $_GET['mod'] = 'index';
检查mod,是否在mod列表里,如果不在或者不对应,则默认为index
define('CURMODULE', $_GET['mod']);
runhooks();//这个是用来检查加载插件的
$navtitle = str_replace('{bbname}', $_G['setting']['bbname'], $_G['setting']['seotitle']['portal']);
require_once libfile('portal/'.$_GET['mod'], 'module');
//这个是用来加截source/module下的对应文件的。
接下来我们可以看下libfile()这个函数
//该文件在source/function/function.core.php
//按上面的传入两个参数libfile("portal/index","module")
function libfile($libname, $folder = '') {
$libpath = DISCUZ_ROOT.'/source/'.$folder;
//$libpath = "disucz/source/module"
if(strstr($libname, '/')) {
list($pre, $name) = explode('/', $libname);
return realpath("{$libpath}/{$pre}/{$pre}_{$name}.php");
} else {
return realpath("{$libpath}/{$libname}.php");
}
//$libname=protal/protal_index.php
//那么返回的文件就应该是disucz/source/module/protal/protal_index.php
}
那么我们就来看下protal_index.php这个文件
if(!defined('IN_DISCUZ')) {
exit('Access Denied');
}
//上面是用来检查discuz核心文件是否加载,
$navtitle = str_replace('{bbname}', $_G['setting']['bbname'], $_G['setting']['seotitle']['portal']);
if(!$navtitle) {
$navtitle = $_G['setting']['navs'][1]['navname'];
} else {
$nobbname = true;
}
$metakeywords = $_G['setting']['seokeywords']['portal'];
if(!$metakeywords) {
$metakeywords = $_G['setting']['navs'][1]['navname'];
}
$metadescription = $_G['setting']['seodescription']['portal'];
if(!$metadescription) {
$metadescription = $_G['setting']['navs'][1]['navname'];
}
上面是一些文件头信息,
include_once template('diy:portal/index');
这个template函数,代码比较长,我就不贴了,大致说下功能。
template主要的功能是用来生成缓存文件的名字,只是用来生成这个名字,实际并未生成,真正生成的是template函数最后的那个checktplrefresh(),看名字,应该猜得出,是检查模板是否更新
看下checktplrefresh()这个函数
function checktplrefresh($maintpl, $subtpl, $timecompare, $templateid, $cachefile, $tpldir, $file) {
static $tplrefresh, $timestamp;
if($tplrefresh === null) {
$tplrefresh = getglobal('config/output/tplrefresh');
$timestamp = getglobal('timestamp');
}
//上面的那段我还不知道是干啥来着,
if(empty($timecompare) || $tplrefresh == 1 || ($tplrefresh > 1 && !($timestamp % $tplrefresh))) {
if(empty($timecompare) || @filemtime(DISCUZ_ROOT.$subtpl) > $timecompare) {
require_once DISCUZ_ROOT.'/source/class/class_template.php';
$template = new template();
$template->parse_template($maintpl, $templateid, $tpldir, $file, $cachefile);
return TRUE;
}
}
return FALSE;
}
下面的这个判断主要是看是否在缓存时间内,如果在缓存时间内,则返回false,直接包含之前生成的缓存文件,如果不在缓存时间之后,则进行重新解析。完了之后,就会执行解析好的php缓存文件。显示到前台,大家可以看下parse_template()这个函数用了很正则去解析模板。这个就不多介绍了,大家可以去看下。
由此以来,先是调用source/module/下的相关文件进行读取数据库或者是读取缓存数据的相关功能把,相关变量赋值然后用template和template类进行对模板解析,变量替换,然后显示到前台,大致的过程就是这样的。
当然中间还有一些缓存的相关判断,这部分还在研究之中,稍候会贴出来。
以上可能会有理解错误的地方,欢迎指出或补充
分享到:
相关推荐
为了帮助用户更顺利地搭建和使用Discuz X1.5论坛系统,本文将详细解读《Discuz X1.5使用手册》中的关键步骤和要点,从而为用户提供一份清晰、实用的操作指南。 首先,我们要明确搭建Discuz X1.5论坛系统的基本要求...
### Discuz X1.5 目录结构解析 #### 一、概述 Discuz! X1.5是一款非常流行的开源论坛软件,它基于PHP+MySQL技术构建,具有强大的功能和高度可定制性。本文将详细介绍Discuz! X1.5的目录结构,帮助开发者更好地理解...
2. 下载解压:获取"Discuz_X1.5_SC_GBK.dz1.5论坛"压缩包,解压后得到"upload"目录,这是论坛的安装文件。 3. 数据库配置:创建MySQL数据库,并记录数据库名、用户名、密码。 4. 安装向导:访问服务器上"upload...
《Discuz X1.5数据结构与数据字典详解》 Discuz X1.5是一款广泛应用的开源社区论坛系统,其稳定性和强大的功能深受广大站长喜爱。为了更好地理解和管理论坛,掌握其数据结构和数据字典是至关重要的。本文将深入解析...
X1.5是Discuz!论坛系统的一个版本,它是一款基于PHP和MySQL的社区建站软件,被广泛应用于搭建互动交流平台。本文将深入解析Discuz! X1.5的数据库结构,帮助您更好地理解和管理您的论坛数据。 在Discuz! X1.5中,...
X1.5在文件结构上进行了优化与调整,使得二次开发更为便捷高效。本文将详细解析Discuz! X1.5的文件结构,帮助开发者更好地理解和利用其架构。 #### 二、目录与文件结构详解 ##### 目录结构 1. **admin.php**:...
【标题】"DISCUZ X1.5 2.0 游戏插件"涉及到的是一个针对DISCUZ论坛系统的游戏扩展应用。DISCUZ是一款非常流行的开源社区论坛软件,它允许用户创建和管理自己的在线论坛,提供丰富的功能和自定义选项。X1.5和X2.0是该...
discuz x1.5 wap 手机接口,拷贝到论坛根目录即可 WAP 2.3比之前的版本更新的细节如下: --贴子界面优化。 --自动读取标题。 --增加置顶贴区别。 --页面直接显示用户。 --修复登录BUG。(要是你登录还有问题,我也...
### discuz X1.5论坛部署(Windows) #### 一、概述 本文旨在详细介绍如何在Windows环境下部署Discuz X1.5论坛系统。通过本文,您将了解到完整的部署流程,包括系统环境的准备、所需软件的选择及安装、环境变量的...
X1.5 经典版:中国SNS源码的里程碑》 Discuz! X1.5经典版,作为中国社交网络服务(SNS)领域的一款标志性产品,自发布以来就受到了广大站长和开发者的热烈追捧。这款开源的论坛软件,以其强大的功能、稳定的表现...
discuz!x1.5数据表的说明文档,包含所有的表的说明,。定义,等等
Discuz!X1.5 数据结构说明书.CHM
X1.5导航插件是一款专为Discuz! X1.5平台设计的强大辅助工具,它旨在帮助用户更好地管理和优化社区网站的导航功能,提升用户体验,增强网站的互动性和实用性。这款插件在www.58119.com上有着生动的展示,通过实际...
在Discuz_X1.5_SC_UTF8中使用UTF-8编码,意味着论坛可以无缝处理中文信息,无论是用户注册、发帖还是评论,都能保证文字的正确显示。 4. **文件结构解析** - **upload**:这个目录通常包含了论坛所需的静态资源,...
X1.5 对URL结构进行了优化,支持自定义友好的URL格式,有利于搜索引擎抓取和索引。 6. **社交网络整合** 这个版本的Discuz! 支持与SNS(社交网络服务)的整合,如QQ账号登录,方便用户快速注册和登录论坛,增加...
X2 & X1.5" 是一个针对Discuz!论坛系统的插件,旨在实现一种特殊的社区运营策略,即用户需要付费才能查看某些特定的帖子。这个插件主要用于那些希望增加社区内容价值,或者通过内容收费来获取额外收入的Discuz!论坛...
X1.5是一款深受用户喜爱的论坛系统,其设计目标是提供高效、易用且功能丰富的网络社区平台。在Discuz!X1.5版本中,开发者着重提升了系统的性能和用户体验,通过一系列的改进使论坛更具吸引力。 首先,广场作为论坛...
X 1.5 远程图片本地化插件"是提升Discuz! X 1.5 论坛性能的有效工具,通过自动抓取和存储远程图片,解决了图片加载慢的问题,改善了用户浏览体验。正确安装和配置这个插件,将为你的论坛运营带来显著的效益。
X 1.5 URF-8:中文版深度解析》 Discuz! X 1.5是一款由Comsenz公司开发的社区论坛软件,它以其强大的功能、高效的性能以及良好的用户体验,在国内互联网社区建设领域占据了重要的地位。URF-8,即Unicode Right-to-...
X1.5 的插件系统基于PHP语言构建,遵循一定的文件结构和命名规则。插件主要包含config.php(配置文件)、class_plugin.php(主逻辑处理文件)以及相应的模板文件等。 2. API调用:Discuz! 提供了丰富的API接口,如...