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属于控 制器层。

discuz MVC结构分析的更多相关文章

  1. discuz X论坛技术架构 MVC结构浅析

    摘自:http://yeyuan.iteye.com/blog/930727 PS:本人刚接触discuz论坛,php水平有限,当中的理解,如有不正确之处,欢迎指出 ----------------- ...

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

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

  3. .net mvc通过ucenter和 discuz的整合,nopcommerce ucenter 插件的方式实现

    discuz无疑是目前市面上最好的论坛之一,对于大多数公司来说,用discuz搭建一个论坛肯定是最节约成本的选择,然而我们的会员想要和discuz进行整合的话,只有两种荀泽,一种直接选用discuz的 ...

  4. MVC和MTV结构分析

    @font-face { font-family: "Times New Roman"; }@font-face { font-family: "宋体"; }@ ...

  5. ASP.NET MVC 5 03 - 安装MVC5并创建第一个应用程序

    不知不觉 又逢年底, 穷的钞票 所剩无几. 朋友圈里 各种装逼, 抹抹眼泪 MVC 继续走起.. 本系列纯属学习笔记,如果哪里有错误或遗漏的地方,希望大家高调指出,当然,我肯定不会低调改正的.(开个小 ...

  6. 【blade的UI设计】理解前端MVC与分层思想

    前言 最近校招要来了,很多大三的同学一定按捺不住心中的焦躁,其中有期待也有彷徨,或许更多的是些许担忧,最近在开始疯狂的复习了吧 这里小钗有几点建议给各位: ① 不要看得太重,关心则乱,太紧张反而表现不 ...

  7. 【PHP小项目使用MVC架构】

    小项目名称是雇员管理系统. mvc是一种项目的开发模式,中文名称为模式视图控制器,是强制程序员将数据的输入.处理.输出分开的一种开发模式. 在这个小项目中,控制器使用service作为后缀名. 项目u ...

  8. 2016北京PHP39期 ThinkPHP Discuz Dedecms 微信开发视频教程

    2016北京PHP39期 ThinkPHP Discuz Dedecms 微信开发视频教程 所有项目均带有软件,笔记,视频,源码 日期   课程(空内容代表放假) 2015/7/10 星期五 开学典礼 ...

  9. netMVC 搭建Ucenter 同步登陆退出discuz

    先看一下效果

随机推荐

  1. Request Entity Too Large for Self Hosted ASP.Net Web API在Selfhost的api后台怎么解决Request Entity Too Large问题

    Request Entity Too Large for Self Hosted ASP.Net Web API在Selfhost的api后台怎么解决Request Entity Too Large问 ...

  2. 超高性能的json序列化之MVC中使用Json.Net

    先不废话,直接上代码 Asp.net MVC自带Json序列化 /// <summary> /// 加载组件列表 /// </summary> /// <param na ...

  3. Redis_DataType

    Redis_DataType.html :first-child{margin-top:0!important}img.plugin{box-shadow:0 1px 3px rgba(0,0,0,. ...

  4. Android真机访问PC端服务器

    若电脑联网:     1.开启一个无线网(以猎豹免费wifi为例)     2.手机连接上这个无线网(这样手机和电脑就在一个局域网内了)     3.此时查看手机的ip地址(我的是192.168.19 ...

  5. 在win8.1中安装apache+php+mysql

    因为x项目需求,需要学习使用php,咱也没啥经验,win8.1的系统在搭建php的运营环境中,费了一些周折,但是最后还是解决了. 详情请看 原文:http://jingyan.baidu.com/ar ...

  6. 用于模式匹配的String方法

    String支持四种使用正则表达式的方法. 1.search()返回第一个与之匹配的子串的起始位置,找不到返回-1.search()参数是一个正则表达式,如果参数不是正则表达式,则会先通过RegExp ...

  7. ARM开发板上iconv调用失败的解决方法

    当前流行的字符编码格式有:US-ASCII.ISO-8859-1.UTF-8.UTF-16BE.UTF-16LE.UTF-16.GBK.GB2312等,其中GBK.GB2312是专门处理中文编码的.而 ...

  8. 循序渐进Python3(十)-- 1 -- pymysql

    使用pymsql 模块操作数据库 #!/usr/bin/env python , ),()]), user='root', passwd='123456', db='test')# 创建游标curso ...

  9. 分享一个web存储方法

    https://github.com/zhujiasheng/jquery-cookie/blob/master/src/jquery.cookie.js https://github.com/WQT ...

  10. iOS架构基础

    1.概念:架构其实是一个设计上的东西,它可以小到类类之间的交互,可以大到不痛的模块之间,可以说不痛的业务部门之间的交互都可以从架构的层面去理解它. 2.解耦 方法一:代理 方法二:通知