Discuz软件经解压后产生的三个文件夹中的一个叫upload的成为网站的根目录。里面的内容可以在某些网站上在线阅读,如用好库编程网。也可以离线在本地阅读,如用VS.Php for Visual Studio。这里面的内容安排的井然有序。不同用途的文件都放在了不同的文件夹里了。让我们来看看其中重要的几种文件和它们是如何结合在一起的。

1。入口PHP文件
在 根目录下有不多的几个PHP文件。它们是仅有的直接处理用户请求指令的PHP文件,是网站的入口。每个对应着网站的一个主要部分,如门户 (portal),家园(home), 论坛(forum)。 比如用户可以给网站发个请求指令全站博文目录页 home.php?mod=space&do=blog。当网站收到这个请求后,就会运行home.php来处理这个请求。home.php并不 直接回复用户,而是从用户提交的字符串里找到具体的请求内容,然后交给相应的程序块来处理。在上面的例子里,space意为空间,blog意为博客,所以 用户是在请求得到博文目录。所以这个请求交给了负责有关空间请求的程序块 source\module\home\home_space.php 来处理。

2。程序块PHP文件

程序块(module)可以说是入口文件的助手, 接受入口文件指派的任务。一个入口文件一般有几个这样的助手处理不同的请求。比如家园口(home.php)就有编辑器(editor),分享 (follow),邀请(invite),道具(magic),勋章(model),空间(space)等助手,都在source/module /home文件夹里。一般每个对应着一类界面样子固定的请求。比如负责空间请求的程序块是 source\module\home\home_space.php。和入口不同的是从同一个入口有可能会看到样子完全不同的页面。但当同一个程序块来服务时,会看到样子相同的的页面。 在用户的请求指令里(如home.php?mod=space&do=blog)指明了需要哪个程序块,如mod=space表明是要空间块,mod代表module(程序块)。

程序块并不是用户请求作啥就作啥,它负责检查该用户是否有权利作做此要求。有时它会将工作分派给 某个助手。如当用户请求home.php?mod=space&do=blog时,他不光指明了处理请求的程序块(mod=space)还指明了 具体的工作(do=blog),而空间这个程序块有助手来处理各个工作,都在source\include\space里,如 space_album.php处理相册, space_blog.php处理博客, space_favorite.php处理分享。

3。被包含PHP文件
space_blog.php 要想生成用户要的博文目录网页需要两样东西:一是数据,在这里就是博文名单和每篇博文的一些信息如标题和作者名。二是显示的格式。前者可要封装数据库表的类(class)来提供,后者定义在一个模板(template)文件里。

4。数据库表的封装类
Discuz 提供了很多个类(class)来封装数据库里的各个表,这样从数据库里取数据就不需要写SQL语句,而只要用相应的类里提供的方法(method)就行 了。这些类都在source\class\table文件夹里。space_blog.php要用的是table_home_blog类来得到储存在 home_blog表里的博文信息。

5。HTML模版文件

数据有了,那怎样将这些数据漂亮和整齐显示在浏览器里呢?这需要定义HTML的格式。这些格式都定义在template文件夹里。特别是用来显示博文信息的格式定义在template\default\home\space_blog_list.htm里。

最后让我们总结一下当网站收到用户的请求home.php?mod=space&do=blog时,网站程序内部分派工作的次序
1   home.php
2         分派给 source\module\home\home_space.php
3               分派给 source\include\space\space_blog.php
4                     数据取自source\class\table\table_home_blog.php
5                     格式定义在 template\default\home\space_blog_list.htm
从这些文件的内容和作用看,Discuz是按照MVC 架构模式将程序分割成若干逻辑部件:模型-视图-控制器(Model-View-Controller) 。

source\include\space\space_blog.php属于服务层,source\class\table \table_home_blog.php属于数据层,二者合起来组成了模型层,template\default\home \space_blog_list.htm属于视图层,而home.php和source\module\home\home_space.php属于控 制器层。

转载于:https://www.cnblogs.com/axtkdd/p/4707972.html

discuz MVC结构分析相关推荐

  1. 基于Discuz的原生态MVC框架Uxf

    前言 国内大量网站在使用Discuz程序,当然,大多数网站只将其作为一款论坛程序,少量的将其作为一款完整的社区程序.因此,授权不授权的情况撇开不谈,很多人都会基于该款程序进行二次开发. Discuz二 ...

  2. discuz论坛数据库表结构分析

    附件表:pre_forum_attachment 关键表字段说明: aid mediumint(8) --附件id tid mediumint(8) --所在主题id pid int(10)--所在帖 ...

  3. Standup Timer的MVC模式及项目结构分析

    前言 学习android一段时间了,为了进一步了解android的应用是如何设计开发的,决定详细研究几个开源的android应用.从一些开源应用中吸收点东西,一边进行量的积累,一边探索android的 ...

  4. Spring Boot常见企业开发场景应用、自动配置原理结构分析

    读者应具备: Spring SpringMVC服务器端开发基础 Maven基础 本篇主要介绍Spring Boot在企业开发中常见场景的使用.以及Spring Boot的基本原理结构. 以下为本篇设计 ...

  5. Discuz!NT论坛代码小分析

    Discuz开源代码结构分析 2008-4-11 右图是DiscuzNt(以下简称DZ)开源代码的方案结构 20个项目,看上去好像很庞大,现在我们来分析一下它的层次,从本人的个人分析角度上看discu ...

  6. Java-GUI编程实战之管理系统 Day3【学生管理系统GUI设计、学生管理系统增删改查、项目MVC结构介绍、Java技能图谱】

    视频.课件.源码[链接:https://pan.baidu.com/s/13ffqGDzH-DZib6-MFViW3Q 提取码:zjxs] Java-GUI编程实战之管理系统 Day1[项目开发流程. ...

  7. Java-GUI编程实战之管理系统 Day1【项目开发流程、软件三层架构、项目需求、项目结构分析】

    视频.课件.源码[链接:https://pan.baidu.com/s/13ffqGDzH-DZib6-MFViW3Q 提取码:zjxs] Java-GUI编程实战之管理系统 Day1[项目开发流程. ...

  8. asp.net(mvc) 框架

    1.NFine mvc+ef 2.Grove orm架构 3.NHibernate orm 4.NBear 5.petshop 6.Membership 7.Brnshop 网上商城 8.cms快速开 ...

  9. 精化集ASP.NET AJAX与ASP.NET MVC分类第二轮筛选结果

    以下是包同学导给我的清单.老赵的第二轮把关很严,杀了几乎99%的文章.不过似乎有少部分并没有经过我的手,可能是其他同学转过来的吧.第三轮老赵依旧会严格把关,肯定也会杀更多(包括通过其他同学第二轮的)文 ...

最新文章

  1. xshell远程登录ubuntu设置流程
  2. 数据分析工具Pandas(2):Pandas的索引操作
  3. openblas 矩阵算法库 简介
  4. JNA:JAVA调用DLL
  5. 结对编程小项目实现 Python+PyQt5+OOP
  6. 6.0 《数据库系统概论》之关系数据库的规范化理论(数据依赖对表的影响[插入-删除-修改-冗余]、1NF-2NF-3NF-BCNF-4NF、函数依赖与多值依赖)
  7. SEO优化工具之——Google Adwords 关键词工具
  8. AUTOSAR从入门到精通100讲(十三)--autosar架构中的ARXML
  9. WAP自助建站 我编程之路的启蒙
  10. Flash中与xml交互时不显示中文的解决办法
  11. 可能是全网最好的MySQL重要知识点/面试题总结
  12. D3 插入删除元素元素
  13. 关于阿里云服务器Linux安装Tomcat后,外网不能访问解决方案
  14. 【十一】Jmeter 函数助手实战:__time 时间戳函数
  15. VS2010打开就自动关闭问题解决
  16. 生物信息学笔记03 -- 基因组序列分析 方法
  17. SEO网站收录情况分析查询方法(小技巧Tips)
  18. [ctf web][csaw-ctf-2016-quals]mfw writeup
  19. ZN-IRF02工业机器人视觉分拣实训系统
  20. C++面向对象(三):类和对象

热门文章

  1. STL之deque和其他容器
  2. linux上mongodb的安装与卸载
  3. 面向对象的故事~数据底层操作告诉了我们接口,抽象类,继承与多态性的使用~续(TestBase继承ITest是多余的?)...
  4. DenyHosts 加固centos系统安全
  5. TOUGHRADIUS 项目介绍
  6. Zabbix中文模式:图片下面的字符乱码
  7. [Android Studio] Android Studio如何提示函数用法
  8. Spring boot + mybatis plus 快速构建项目,生成基本业务操作代码。
  9. electron 打包后 __static_electron开发客户端注意事项(兼开源个人知识管理工具“想学吗”)...
  10. mysql正在运行安全文件怎么办_MySQL服务器运行的安全文件化选项,所以它不能执行该语句什么情? 爱问知识人...