热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

discuzx代码文件分析

目录结构下面是Discuz!的文件目录及对应的描述。日常的开发中主要会涉及到source和template目录。虽然目录和文件都很多,但是实际上结构还是很清晰,大多数情况下通过文件名和目录就能知道某个文件的作用。比如:\source\class\discuz\discuz_censor.php
目录结构
下面是Discuz! 的文件目录及对应的描述。日常的开发中主要会涉及到source和template目录。
虽然目录和文件都很多,但是实际上结构还是很清晰,大多数情况下通过文件名和目录就能知道某个文件的作用。比如:
\source\class\discuz\discuz_censor.php  用来处理敏感词过滤的类
\source\function\function_credit.php  处理积分操作的函数库
\source\module\forum\forum_viewthread.php 处理帖子显示页面的模块

另外,source目录下的class、function、module、include、admincp这几个文件夹下的程序文件命名要遵守如下规则:文件名前缀为所在目录的名字加上下划线(_) 目录结构详细:
/┬── api 外部接口
 │      ├── connect     腾讯互联
 │      ├── db  UCenter数据库备份接口
 │      ├── google      Google引擎使用
 │      ├── Javascript  数据和广告的 JS调用
 │      ├── manyou      manyou应用及搜索等相关服务
 │      └── trade       在线支付接口
 ├── archiver   论坛静态化
 ├── config     站点配置文件
 ├── data       数据缓存及附件
 │      ├── attachment  上传的文件目录
 │      │      ├── album        相册专用
 │      │      ├── block        DIY专用
 │      │      ├── common       公共上传
 │      │      ├── forum        论坛附件专用
 │      │      ├── group        群组图标和头部图片专用
 │      │      ├── portal       门户上传文件专用
 │      │      ├── profile      个人资料专用
 │      │      └── temp 临时文件
 │      ├── avatar      视频认证专用
 │      ├── backup      站点数据备份
 │      ├── cache       数据缓存
 │      ├── diy DIY模块缓存
 │      ├── ipdata      Discuz!IP库
 │      ├── log 站点日志,前/后台管理日志、错误日志等
 │      ├── plugindata  插件缓存数据
 │      ├── template    模板缓存目录
 │      └── threadcache 帖子缓存
 ├── install 安装目录
 ├── source 代码主目录
 │      ├── admincp     后台程序
 │      │      ├── cloud        Discuz!云平台
 │      │      ├── menu 菜单
 │      │      └── moderate     审核功能
 │      ├── archiver    论坛静态化功能代码
 │      ├── class       类文件目录
 │      │      ├── adv  站点广告功能
 │      │      ├── block        DIY模块功能文件
 │      │      ├── cache        缓存类
 │      │      ├── db   数据库类
 │      │      ├── discuz       discuz类
 │      │      ├── forum        论坛
 │      │      ├── helper       存放从function_core分离出来的一部分函数
 │      │      ├── lib  工具类的集合类
 │      │      ├── magic        道具
 │      │      ├── memory       内存类
 │      │      ├── secqaa       验证问答
 │      │      ├── table        数据表操作类
 │      │      └── task 站点任务功能
 │      ├── function    函数文件
 │      │      └── cache        缓存功能拆分目录
 │      ├── include     被包含的文件
 │      │      ├── collection   淘帖
 │      │      ├── cron 计划任务
 │      │      ├── misc 杂项
 │      │      ├── modcp        前台论坛管理
 │      │      ├── portalcp     前台门户管理
 │      │      ├── post 帖子相关
 │      │      ├── search       搜索功能
 │      │      ├── space        家园和个人相关功能
 │      │      ├── spacecp      个人设置相关
 │      │      ├── table        编码转换数据
 │      │      ├── thread       查看主题相关
 │      │      └── topicadmin   前台主题管理
 │      ├── language    站点语言包
 │      │      ├── adv  广告
 │      │      ├── block        DIY模块
 │      │      ├── forum        论坛
 │      │      ├── group        群组
 │      │      ├── home 家园
 │      │      ├── magic        道具
 │      │      ├── member       登录注册页面语言
 │      │      ├── mobile       手机访问功能语言
 │      │      ├── portal       门户语言
 │      │      ├── ranklist     排行榜语言
 │      │      ├── search       搜索
 │      │      ├── secqaa       安全问答
 │      │      ├── tag  标签
 │      │      ├── task 任务
 │      │      └── userapp      manyou应用
 │      ├── module      功能模块
 │      │      ├── connect      腾讯互联
 │      │      ├── forum        论坛
 │      │      ├── group        群组
 │      │      ├── home 家园
 │      │      ├── member       登录注册
 │      │      ├── misc 杂项
 │      │      ├── portal       门户
 │      │      ├── search       搜索
 │      │      └── userapp      应用
 │      └── plugin      插件目录
 │              ├── cloudstat   Discuz!云平台
 │              ├── myapp       Manyou应用
 │              ├── myrepeats   马甲功能
 │              ├── qqconnect   腾讯互联
 │              └── soso_smilies        腾讯搜搜表情
 ├── static     非PHP文件
 │      ├── image       界面图片
 │      ├── js  站点JS脚本
 │      ├── space       空间皮肤
 │      └── topic       门户皮肤
 ├── template   模板目录
 │      └── default     默认风格
 ├── uc_client  UCenter客户端程序
 └── uc_server  UCenter服务端程序

自动加载
Discuz! X2.5要求PHP版本大于5.1,抛弃了对PHP4的支持,因此支持更多的PHP新特性,自动加载类文件就是其中一个。在class_core.php中有这样一段代码:
if(function_exists('spl_autoload_register')) {
        spl_autoload_register(array('core', 'autoload'));
} else {
        function __autoload($class) {
                return core::autoload($class);
        }
}
当调用不存在的类的时候就会调用core::autoload方法来加载相应的类文件。所以我们在开发的过程中就要用到某个类的时候就不需要include或者require了。只要对应的类文件存在,并且命名符合规范,直接调用即可。

注意:产品中个别特殊类由于历史原因无法实现自动加载,需手动处理 include或require
class_core.php 流程控制的说明
class_core.php是入口启动文件,主要实现了以下功能:
注册 autoload 方法和异常处理方法
C::t 方法的实现:通过 C::t 方法来调用数据层对应表的对象来实现对数据的操作
memory 的初始化:主要由 discuz_memory 类来实现
创建 discuz_application 实例 ( discuz_application 是原来 discuz! X2 的 discuz_core):进行核心的初始化操作,主要有加载配置文件、加载环境变量、连接数据库、加载setting信息、初始化用户数据、 session的初始、计划任务等
简写类的映射:将 class core 映射为 C,discuz_database 映射为 DB,仅为方便使用,代码如下
class C extends core {}
class DB extends discuz_database {}


推荐阅读
  • 本文介绍了Hive常用命令及其用途,包括列出数据表、显示表字段信息、进入数据库、执行select操作、导出数据到csv文件等。同时还涉及了在AndroidManifest.xml中获取meta-data的value值的方法。 ... [详细]
  • Jquery 跨域问题
    为什么80%的码农都做不了架构师?JQuery1.2后getJSON方法支持跨域读取json数据,原理是利用一个叫做jsonp的概念。当然 ... [详细]
  • 本文介绍了如何使用PHP向系统日历中添加事件的方法,通过使用PHP技术可以实现自动添加事件的功能,从而实现全局通知系统和迅速记录工具的自动化。同时还提到了系统exchange自带的日历具有同步感的特点,以及使用web技术实现自动添加事件的优势。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • MACElasticsearch安装步骤及验证方法
    本文介绍了MACElasticsearch的安装步骤,包括下载ZIP文件、解压到安装目录、启动服务,并提供了验证启动是否成功的方法。同时,还介绍了安装elasticsearch-head插件的方法,以便于进行查询操作。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • IT方面的论坛太多了,有综合,有专业,有行业,在各个论坛里混了几年,体会颇深,以前是论坛哪里人多 ... [详细]
  • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
  • REVERT权限切换的操作步骤和注意事项
    本文介绍了在SQL Server中进行REVERT权限切换的操作步骤和注意事项。首先登录到SQL Server,其中包括一个具有很小权限的普通用户和一个系统管理员角色中的成员。然后通过添加Windows登录到SQL Server,并将其添加到AdventureWorks数据库中的用户列表中。最后通过REVERT命令切换权限。在操作过程中需要注意的是,确保登录名和数据库名的正确性,并遵循安全措施,以防止权限泄露和数据损坏。 ... [详细]
  • 本文分析了Wince程序内存和存储内存的分布及作用。Wince内存包括系统内存、对象存储和程序内存,其中系统内存占用了一部分SDRAM,而剩下的30M为程序内存和存储内存。对象存储是嵌入式wince操作系统中的一个新概念,常用于消费电子设备中。此外,文章还介绍了主电源和后备电池在操作系统中的作用。 ... [详细]
  • GSIOpenSSH PAM_USER 安全绕过漏洞
    漏洞名称:GSI-OpenSSHPAM_USER安全绕过漏洞CNNVD编号:CNNVD-201304-097发布时间:2013-04-09 ... [详细]
  • 本文介绍了一种求解最小权匹配问题的方法,使用了拆点和KM算法。通过将机器拆成多个点,表示加工的顺序,然后使用KM算法求解最小权匹配,得到最优解。文章给出了具体的代码实现,并提供了一篇题解作为参考。 ... [详细]
  • 我有使用googledrivepdf的共享链接,我必须使用angular7下载pdf文件。我已经完成了自欺 ... [详细]
author-avatar
拍友2502882315
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有