热门标签 | 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 {}


推荐阅读
  • Hadoop发行版本选择指南:技术解析与应用实践
    本文详细介绍了Hadoop的不同发行版本及其特点,帮助读者根据实际需求选择最合适的Hadoop版本。内容涵盖Apache Hadoop、Cloudera CDH等主流版本的特性及应用场景。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • DNN Community 和 Professional 版本的主要差异
    本文详细解析了 DotNetNuke (DNN) 的两种主要版本:Community 和 Professional。通过对比两者的功能和附加组件,帮助用户选择最适合其需求的版本。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • Valve 发布 Steam Deck 的新版 Windows 驱动程序
    Valve 最新发布了针对 Steam Deck 掌机的 Windows 驱动程序,旨在提升其在 Windows 环境下的兼容性、安全性和性能表现。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 数据管理权威指南:《DAMA-DMBOK2 数据管理知识体系》
    本书提供了全面的数据管理职能、术语和最佳实践方法的标准行业解释,构建了数据管理的总体框架,为数据管理的发展奠定了坚实的理论基础。适合各类数据管理专业人士和相关领域的从业人员。 ... [详细]
  • 如何在PHPcms网站中添加广告
    本文详细介绍了在PHPcms网站后台添加广告的方法,涵盖多种常见的广告形式,如百度广告和Google广告,并提供了相关设置的步骤。同时,文章还探讨了优化网站流量的SEO策略。 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 在即将迎来26岁生日之际,作者的人生陷入了低谷。经过近三年的硕士学习后,最终决定退学,并且面临没有工作经验的困境。尽管如此,作者依然坚定地选择为自己的人生负责。 ... [详细]
  • 本文详细探讨了JavaScript中的闭包与柯里化技术,这两者是函数式编程的重要组成部分,对提升代码的灵活性和可维护性具有重要作用。 ... [详细]
  • 我有这种ajax$.ajax({type:"POST",url:"bee_sesi_edit.php&# ... [详细]
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社区 版权所有