Discuz 二次开发 (一) 目录结构和运行逻辑

目录结构

DISCUZ使用自己的框架,与现在主流的web框架不同,DISCUZ没有路由表,他的路由是由入口文件来实现的。

  • api

    • uc.php UCenter 通信文件
    • /api/addons 应用中心
    • /api/connect 通讯互联
    • /api/google Google引擎结构处理
    • /api/javascript 数据和广告的js调用
    • /api/manyou manyou应用及搜索等相关服务
    • /api/remote 远程更新
    • /api/trade 支付宝、财付通等交易接口
  • archiver (论坛Archiver静态化目录)

  • config

    • config_global.php 论坛核心参数配置文件
    • config_ucenter.php UCenter核心参数配置文件
  • data (论坛数据缓存目录)

  • install (论坛安装目录(初始化运行时直接请求到此处将重新安装论坛))

  • source (程序后端功能处理目录)

    • discuz_version.php 程序版本号文件

    • /source/admincp 后台管理

    • /source/archiver 论坛archiver静态化程序目录

    • /source/class 核心类库

    • /source/function discuzX自定义函数库

    • /source/include 程序功能组件目录

    • /source/language 程序语言包(kv结构)

    • /source/module 程序功能模块程序包

    • /source/plugins 插件扩展目录

  • static (程序资源目录(头像、图片、下载文件、js文件等等))

  • template (前端模板目录)

    • /default/common 基础css文件、header、footer等公共引入文件

    • /default/collage 大学计划页面

    • /default/dige dige专区页面

    • /default/forum 首页、帖子页面

    • /default/member 会员页面

    • /default/home 家园页面

    • /default/group 群组页面

    • /default/mobile 移动端页面

    • /default/portal 文章页面

    • /default/search 搜索页面

  • uc_client (UCenter客户端)

    • /uc_client/control UC业务处理操作类

    • /uc_client/data 缓存文件目录

    • /uc_client/lib 类库目录(包括数据库操作类,XML类,UCCODE类,邮件发送类)

    • /uc_client/model UC业务模型类

  • uc_server (UCenter服务端 后台ucenter功能实现目录)

  • 根目录文件

    • admin.php 后台入口文件
    • api.php API输出 入口文件
    • collage.php 大学计划入口文件
    • composer.json composer依赖版本记录文件
    • composer.lock composer依赖版本控制文件
    • connect.php 云平台接口文件
    • dige.php dige专区入口文件
    • forum.php 帖子信息入口文件
    • group.php 群组入口文件
    • home.php 家园入口文件
    • index.php 首页
    • member.php 用户入口文件(登录、注册、退出等)
    • misc.php 程序杂项扩展入口
    • plugin.php 插件入口文件
    • portal.php 门户入口文件
    • robots.txt 搜索引擎限制文件
    • search.php 搜索频道入口文件

2. 运行逻辑

discuz的入口文件起到了路由的作用。一个标准的discuz请求如下:

http://localhost/home.php?mod=space&uid=1&do=profile
  1. 当在浏览器输入以上url时,首先执行的是跟目录下的 home.php 文件

    <?phpdefine('APPTYPEID', 1);
    define('CURSCRIPT', 'home');if(!empty($_GET['mod']) && ($_GET['mod'] == 'misc' || $_GET['mod'] == 'invite')) {define('ALLOWGUEST', 1);
    }require_once './source/class/class_core.php';  //引入核心类文件,作用为:自动引入类规则,错误和异常处理,单例创建discuz_application类实例,引入默认函数库function.core.php
    require_once './source/function/function_home.php';  //引入discuzX函数库$discuz = C::app();  //实例化discuz_application类
    $cachelist = array('magic','usergroups', 'diytemplatenamehome','forumlinks','identity'); //加身份组缓存
    $discuz->cachelist = $cachelist; //设置缓存列表
    $discuz->init();  //初始化应用:数据库、系统设置、用户、session、任务、等(discuz_appication类里面)
    $space = array();$mod = getgpc('mod'); //接收$_GET['mod']数据
    if(!in_array($mod, array('space', 'spacecp', 'misc', 'magic', 'editor', 'invite', 'task', 'medal', 'rss', 'follow'))) {$mod = 'space';$_GET['do'] = 'home';
    }if($mod == 'space' && ((empty($_GET['do']) || $_GET['do'] == 'index') && ($_G['inajax']))) {$_GET['do'] = 'profile';
    }
    $curmod = !empty($_G['setting']['followstatus']) && (empty($_GET['diy']) && empty($_GET['do']) && $mod == 'space' || $_GET['do'] == 'follow') ? 'follow' : $mod;
    define('CURMODULE', $curmod);
    runhooks($_GET['do'] == 'profile' && $_G['inajax'] ? 'card' : $_GET['do']);
    require_once libfile('home/'.$mod, 'module');  //根据请求时传的mod参数经由上方判断确定加载对应文件?>
    

    : libfile()函数在会将对应的模块字符串替换为模块的实际url。
    libfile('home/'.$mod, 'module')的实际访问地址是 /source/module/home/$mod.php

  2. 进入到/source/module/home/home_space.php 文件中 根据请求参数 uid和do的值判断具体的执行过程,有些时候会直接引入响应的程序组件完成逻辑处理(这里引入了 /include/space/space_profile.php)

  3. 在 space_profile.php中判断运行之后输出到模板文件**/template/default/home/space_profile.htm** 中。
    :template()函数在 核心函数库 function_core.php 中 用于加载当前使用模板的模板文件 。根据传参此时加载了 /template/default/home/space_profile.htm 文件

  4. 在模板文件space_profile.htm中 可以直接使用php文件中的数据变量进行赋值渲染输出到浏览器。
    :template模板语法不赘述 详见 模板语法

Discuz 二次开发 (一) 目录结构和运行逻辑相关推荐

  1. 关于ShopEx的二次开发的目录结构及各文件功能

    一.目录结构: 二.了解各文件夹的作用 1.static文件夹 用于放置系统资源文件,包括了系统模板制作的图片公共图片.CSS.JS等 2.plugin/widgets文件夹 挂件文件夹,这里的每一个 ...

  2. vue项目开发的目录结构

    vue项目开发的目录结构 一.通过命令行工具安装vue(npm install webpack vue-project) build -- 项目构建的相关代码 config -- 配置目录,包括端口. ...

  3. Kettle教程(二):Kettle目录结构介绍

    文章目录 前言 一.Kettle的Spoon/Pan/Kitchen/Carte 简介 1.Spoon 2.Pan 3.Kitchen 4.Carte 二.Kettle的目录结构介绍 三.总结 前言 ...

  4. Discuz二次开发基本知识详细讲解

    Discuz是国内最流行的论坛软件管理系统,今天小编跟大家分享一篇关于Discuz二次开发基本知识详细讲解,感兴趣的朋友跟小编一起来了解一下吧! 一) Discuz!的文件系统目录注:想搞DZ开发,就 ...

  5. discuz php接口文档,Discuz二次开发技术文档

    点评:Discuz二次开发基本知识总结,需要对discuz进行二次开发的朋友可以参考下. 一) Discuz!的文件系统目录 注:想搞DZ开发,就得弄懂DZ中每个文件的功能. a) Admin:后台管 ...

  6. discuz 二次开发文章

    参考: Discuz! X3.2 二次开发基本流程: https://blog.csdn.net/qq_35637004/article/details/81078611 discuz二次开发常用技术 ...

  7. discuz二次开发技巧

    discuz二次开发技巧 二次开发大多时候知识设置和处理,如果能够获知模板文件获得的变量数组将大大提高我们的开发效率 获取页面已经定义的变量 <--{eval printf_r(get_defi ...

  8. 1.TomCat配置以及JavaWeb开发的目录结构

    1. 部署并启动 tomcat 服务器. 1). 解压 apache-tomcat-6.0.16.zip 到一个非中文目录下 2). 配置一个环境变量. java_home(指向 JDK 安装的根目录 ...

  9. discuz php接口文档,Discuz二次开发手册.doc

    Discuz二次开发手册 Discuz文件说明,有助于discuz爱好者,进行自己的开发,在这里提供方便 admincp.php--后台系统设置主程序文件,一般只处理菜单的显示的访问权限,不处理管理控 ...

最新文章

  1. 《互联网人求职图鉴》:这类人才“最吃香”,最高薪编程语言出炉!
  2. iOS10 UI教程视图的几何形状
  3. python核心教程第二版答案_《python核心教程》课后题答案注解
  4. 2021春季每日一题【week4 完结】
  5. Spring MVC——数据检验步骤
  6. db2dual_db2 oracle 创建 序列 | 学步园
  7. 「leetcode」669. 修剪二叉搜索树:【递归】【迭代】详解
  8. 分布式存储之Ceph软件安装及使用
  9. 地震数据的获取与处理
  10. Mac,Windows11,Windows10局域网互传共享文件
  11. python学习 Day08 字符串和正则表达式
  12. SRT软体机器人:等风来不如追风去,“万米蓝海”的探索才刚开始
  13. STM32驱动_cc2420
  14. miui11升级鸿蒙,这就是MIUI 11的升级机型名单?还挺给力!
  15. Spring教程——Spring注入内部Bean
  16. Altium designer中蛇形线走法和操作说明
  17. 银行普惠金融可持续发展能力建设——风控科技应用
  18. 一张图告诉你,如何构建内网隐蔽通道
  19. 北邮计算机考研复试往年题目,北邮考研复试笔试题目汇总
  20. Javascript | 模拟mvc实现点餐程序

热门文章

  1. 嵌入式软件测试研究意义,嵌入式软件测试的研究
  2. TP-Link WR703N升级64M内存+外接SMA天线+刷OpenWRT(1)硬件介绍
  3. 每日笔记重点!!!!
  4. 域AD策略屏蔽USB驱动
  5. java的thread类_thread 类详解
  6. BP商业计划书应该怎样撰写?
  7. 又见上海电影节抢票热,电影节不该只有狂欢
  8. Eviews:季度数据转为月度数据(频率转换)
  9. Paper Reading- Center-based 3D Object Detection and Tracking (Based: KITTI)
  10. ethos从入门到精通-7AMD显卡超频