discuz 学习心得

来源:互联网 发布:网络运营推广 编辑:程序博客网 时间:2024/06/14 05:36

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 {}生气 生气生气生气生气 生气生气生气生气 生气生气生气生气 生气生气生气

当有请求到达服务器后,第一步先根据mod变量判断是要调用哪一个模板(在这个过程中当然都要调用系统内部类,并实例化初始化)

然后调用对应的模板 例如:require DISCUZ_ROOT.'./source/module/forum/forum_'.$mod.'.php';//调用对应的模板

       module目录中,对一般插件作者来说,掌握forum/home/group/member/misc这5个目录的程序文件含义就足够了,另外这些文件调用的模板与templates/default下面的目录结构和文件是对应的,这点非常好辨别,所以如果要修改对应的模板显示方式的话,去按照这个规则找htm文件改就可以了。

有时候module目录没能完成任务就可能进入

\source\include文件了,很多操作通过入口程序后,执行的具体代码都在这里。其中\source\include\cron里面全部是计划任务的脚本文件




viewthread.php 和viewthread.htm 负责帖子内容展示 详情请参见:http://www.discuzt.com/discuzcode-template_value_viewthread_postlist.html


class_core 模块功能

source/class/class_core.php 是 Discuz! 的通用初始化模块程序,其几乎被所有的外部代码所引用,在您开始插件设计之前,可以先对该模块的大致功能做一定的了解。class_core.php 主要完成了以下任务:

  • 对不同 PHP 及操作系统环境做了判断和兼容性处理,使得 Discuz! 可以运行于各种不同配置的服务器环境下。
  • 初始化常量 IN_DISCUZ 为 TRUE,用于 include 或 require 后续程序的判断,避免其他程序被非法引用。
  • 读取社区程序所在绝对路径,存放于常量 DISCUZ_ROOT 中。
  • 加载所需的基本函数库 source/function/function_core.php。
  • 通过 config/config_global.php 中提供的数据库账号信息,建立数据库连接。Discuz! 支持数据表的前缀,如需获得表的全名,可使用“DB::table('tablename')”方式。
  • 判断用户是否登录,如登录标记 $_G['uid'] 为非 0,同时将 $_G['username'](加了 addslashes 的用户名,可用于不加修改的插入数据库)、 $_G['member']['username'](原始的用户名,可用于页面显示)、$_G['member']['password'](用户密码的MD5串)等相应用户信息赋值,其他用户信息存放于 $_G['member'],更多信息可通过“getuserprofile()”获取。
  • 判断用户管理权限,将管理权限标记 $_G['adminid'] 为 1~3 中间的值。0 代表普通用户;1 代表论坛管理员;2 代表超级版主;3 代表论坛版主。 将用户权限按照其所在的主用户组 ID 标记为 $_G['groupid'],相关权限从该 $_G['groupid'] 所对应的系统缓存中读出,存放于 $_G['group']。
  • 预置读入了每个模块的各种设置变量。
  • [X2.5变更内容] $_G['username'] 将不进行 addslashes 处理。
标签模板说明
  • http://wiki.blueidea.com/index.php?title=Discuz!X/%E6%A8%A1%E6%9D%BF%E6%A0%87%E7%AD%BE%E8%AF%B4%E6%98%8E#.E4.B8.8D.E5.B8.A6.E4.B8.8B.E6.A0.87.E5.8F.98.E9.87.8F.E7.9A.84.E6.95.B0.E7.BB.84.E5.BE.AA.E7.8E.AF