destoon系统运行流程介绍 二次开发必看

admin|
50

Destoon 是一个基于 PHP/MySQL 的 B2B 电子商务网站管理系统。它的核心运行流程遵循典型的 MVC(Model-View-Controller)模式,并结合了其自身的一些特性(如模块化、伪静态、缓存机制等)。以下是 Destoon 系统处理一个 HTTP 请求的核心运行流程:


1.  用户发起请求 (HTTP Request):


       用户在浏览器中输入一个 Destoon 网站的 URL(例如:`http://www.example.com/product/123.html`)或点击网站上的链接/按钮。


       浏览器向 Web 服务器(通常是 Apache 或 Nginx)发送 HTTP 请求。


2.  Web 服务器处理:


       Web 服务器接收到请求。


       URL 重写 (Rewrite): 如果配置了伪静态规则(Destoon 强烈推荐),Web 服务器(通过 `.htaccess` 或 Nginx 配置)会将“漂亮”的 URL 重写回 Destoon 的入口文件(通常是 `index.php`)能识别的动态参数格式。例如:


           `product/123.html` 可能被重写为 `index.php?moduleid=5&itemid=123`(`moduleid=5` 代表产品模块)。


           核心参数通常是 `moduleid`(确定模块)和 `file`(确定模块内的具体操作文件/方法)。


3.  入口文件 (`index.php`):


       请求最终被路由到 Destoon 的入口文件 `index.php`。


       加载核心框架:


           设置基本常量(如 `DT_ROOT` 系统根目录)。


           包含核心配置文件 `config.inc.php`(包含数据库连接信息、基本系统设置等)。


           包含核心函数库文件 `common.inc.php`。这是最关键的一步:


               初始化数据库连接(使用 `DB` 类)。


               加载系统缓存(`cache.php`),包含模块配置、模型定义、分类信息、设置项等核心数据,避免频繁查询数据库。


               初始化模板引擎(通常是 Smarty)。


               处理全局 `$_GET`, `$_POST` 参数,进行基本的安全过滤。


               处理用户会话(Session)。


               根据 `moduleid` 加载对应模块的配置信息(从系统缓存中读取)。


               执行全局钩子(Hook)或插件(Plugin)的特定点(如果有)。


4.  路由分发 (根据 `moduleid` 和 `file`):


       核心框架根据 `moduleid` 参数确定用户请求的是哪个功能模块(例如:新闻 `moduleid=2`,产品 `moduleid=5`,公司 `moduleid=4`,会员中心等)。


       根据 `file` 参数(或者默认值,如 `index`)确定要执行该模块下的哪个具体功能文件(Controller)。


       如果请求的是后台管理页面 (`admin.php` 作为入口),流程类似,但会额外进行严格的权限验证。


5.  加载并执行模块控制器 (Controller):


       框架定位到对应模块目录下的控制器文件(例如:`module/product/admin/product.inc.php` 或 `module/product/product.inc.php`)。


       包含并执行该控制器文件:


           控制器文件通常包含一个与 `file` 参数同名的类(或直接包含函数)。


           框架会实例化这个类(或调用相应函数)。


           控制器负责:


               业务逻辑处理: 根据请求参数(`$_GET`, `$_POST`)执行特定操作(如查询数据库、添加数据、修改数据、删除数据、处理表单提交等)。


               调用模型 (Model): 控制器通过实例化模型类(如 `$product = new product();`)来访问和操作数据库。模型类封装了与数据库表交互的具体方法(CRUD)。


               数据处理: 对从模型获取的数据进行必要的处理、验证、格式化。


               权限检查 (尤其后台): 验证当前用户(管理员或会员)是否有权限执行该操作。


               准备视图数据: 将处理好的数据(如产品详情、列表数组)赋值给模板变量。


6.  模型 (Model) 操作数据库:


       控制器调用的模型方法内部使用 Destoon 封装的数据库操作类(通常是 `DB` 类或 `dba` 类)。


       这些类执行实际的 SQL 查询(SELECT, INSERT, UPDATE, DELETE)。


       查询结果被返回给控制器。


7.  加载并渲染模板 (View):


       控制器逻辑执行完毕后,确定要加载哪个模板文件(`.htm` 文件)。


       将之前准备好的模板变量(包含所有要显示的数据)传递给模板引擎(Smarty)。


       模板引擎解析 `.htm` 文件:


           处理模板标签(如 `{loop}...{/loop}`, `{if}...{/if}`, `{$variable}`, `{include 'file.htm'}`, 模块标签如 `{tag("moduleid=5&condition=status=3&pagesize=10&order=addtime desc&template=list-product")}`)。


           将动态数据填充到模板的对应位置。


           生成最终的纯 HTML 内容。


8.  输出响应 (HTTP Response):


       框架将模板引擎渲染好的 HTML 内容输出。


       同时输出必要的 HTTP 头信息(如 Content-Type, Cache-Control 等)。


       如果启用了页面缓存(Gzip 压缩或 Destoon 自身的 HTML 文件缓存),会在此环节处理。


9.  浏览器接收并渲染:


       Web 服务器将生成的 HTML 内容发送回用户的浏览器。


       浏览器解析 HTML、CSS 和 JavaScript,将网页呈现给用户。


关键点总结:


   MVC 架构: 清晰分离逻辑(Controller)、数据(Model)和展示(View)。


   入口单一: 所有请求都通过 `index.php`(前台)或 `admin.php`(后台)分发。


   模块化: 功能按模块组织,核心通过 `moduleid` 识别和加载模块。


   依赖缓存: 系统启动时加载大量核心配置和数据结构缓存 (`cache.php`),极大提升性能。


   数据库抽象: 通过 `DB` 或 `dba` 类操作数据库,提供一定程度的兼容性和便捷性。


   模板引擎: 使用 Smarty 分离 PHP 逻辑和 HTML 代码。


   伪静态: 通过 URL 重写实现“静态化”URL,对 SEO 友好。


   钩子/插件: 提供扩展点,允许在不修改核心代码的情况下增加功能。


后台管理 (`admin.php`) 流程的特殊性:


1.  严格的登录验证: 必须先登录管理员账号。


2.  菜单与权限加载: 根据管理员角色加载其有权限访问的菜单项。


3.  操作权限验证: 在执行具体控制器方法前,会再次验证当前管理员是否有权限执行该操作(增删改查等)。


4.  模块管理界面: 后台控制器通常提供数据列表、添加表单、编辑表单、删除按钮等管理界面。


5.  系统设置: 提供全局或模块级的配置管理功能。


理解这个流程有助于进行 Destoon 的二次开发、性能优化和故障排查。