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

Discuz 二次开发 (一) 目录结构和运行逻辑Discuz二次开发(一)目录结构和运行逻辑目录结构DISCUZ使用自己的框架,与现在主流的web框架不同,DISCUZ没有路由表,他的路由是由入口文件来实现的。apiuc.phpUCenter通信文件/api/addons应用中心/api/connect通讯互联/api/googleGoogle引擎结构处理/api/javascript数据和广告的js调用/api/manyoumanyou应用及搜索等相关服务/api/remote远程更新/api/tr

大家好,又见面了,我是你们的朋友全栈君。

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 文件

    <?php
    
    define('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模板语法不赘述 详见 模板语法

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/144604.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Git提交日志格式规约[通俗易懂]

    Git提交日志格式规约[通俗易懂]俗话说,无规矩不成方圆。前端时间,阿里诚意献上重磅大礼:《阿里巴巴Java开发手册》,首次公开阿里官方Java代码规范标准。这套Java统一规范标准将有助于提高行业编码规范化水平,帮助行业人员提高开发质量和效率、大大降低代码维护成本。那么问题来了,Git提交日志是否需要规范化呢?答案是肯定的。

  • 基于TCP的socket编程原理概述「建议收藏」

    基于TCP的socket编程原理概述「建议收藏」解:服务器端:1)创建套接字socket;2)bind(将套接字绑定到本地地址和端口上)3)listen(将套接字设置为监听模式,准备接受连接请求)4)accept等待客户请求到来,当请求到后,接受连接请求,返回一个新的对应于此次连接的套接字5)用返回的套接字和客户端进行通信(send/receive)6)返回等待另个客户请求7)关闭套接字客户端:1)创

    2022年10月18日
  • 基于Android点餐APP系统的设计与实现[通俗易懂]

    基于Android点餐APP系统的设计与实现[通俗易懂]假如您对此内容感兴趣,你可以加QQ群:868378707(毕业设计online);搜索微信小程序“毕设编程Online”,免费获取源码;基于Android的点餐系统由服务器端和安卓客户端两部分组成。服务器端供餐厅工作人员使用,主要实现菜品信息管理;安卓客户端由餐厅客户使用,主要实现浏览菜品,点餐等功能。主要内容如下:服务器端:1:用户登录:用户在使用系统前先进行登录功能。2:菜品信息管理:包括菜品名称,菜品类别,菜品价格,菜品图片,菜品介绍,菜品发布等信息等增删改查功能3:…

  • c语言 木马编程教学,木马编程 之超强服务… 附代码 原创.

    c语言 木马编程教学,木马编程 之超强服务… 附代码 原创.该楼层疑似违规已被系统折叠隐藏此楼查看此楼}BOOLAddSvchostGroup(VOID){HKEYhkey;//其实是一个句柄.if(RegOpenKey(HKEY_LOCAL_MACHINE,”SOFTWARE\\Microsoft\\WindowsNT\\CurrentVersion\\SvcHost”,&hkey)!=ERROR_SUCCESS)returnFALSE…

  • spss线性回归模型汇总_多元线性回归分析模型

    spss线性回归模型汇总_多元线性回归分析模型多元线性回归,主要是研究一个因变量与多个自变量之间的相关关系,跟一元回归原理差不多,区别在于影响因素(自变量)更多些而已,例如:一元线性回归方程为:毫无疑问,多元线性回归方程应该为:上图中的x1

  • ftp扫描软件下载_ftp扫描文件夹连接失败

    ftp扫描软件下载_ftp扫描文件夹连接失败不知道大家用过哪几种ftp扫描工具,是不是感觉都是大同小异的呢?其实市面上的ftp扫描工具功能都是差不多的,当然也还是有一点差别的,那一点的差别可能就是我们选择那一种ftp扫描工具的原因。不论怎么说,也都是要选择自己喜欢的ftp扫描工具来使用。第一款:IIS7服务器管理工具这款工具里面的ftp扫描工具体验感是比较好的,除了一般ftp扫描工具里面都有的批量管理,它还有很多自己设计的功能。可以说这就是它成功的关键。它还能够进行定时上传下载、定时备份和多任务同时进行。哦对,它还有自动更新的功能。IIS7服务

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号