很多人用Z-Blog用了好几年,只知道后台发文章,但是不知道整个程序是怎么跑起来的,今天把核心运行逻辑讲明白,懂了这个,你再改二次开发就有思路了。
第一步:入口引导
用户访问任何一个页面,首先请求根目录的index.php,这个文件非常短,只有几行代码,它的作用就是引入zb_system/function/c_system_base.php,这个文件是整个程序的引导核心,负责加载所有配置、连接数据库、初始化全局对象$zbp。
$zbp是整个Z-Blog的全局对象,里面存了所有东西:站点配置、分类列表、文章数据、用户信息、插件钩子,后面所有操作都是围绕这个对象来的。
第二步:路由解析
引导文件加载完,会根据当前访问的URL,判断用户要访问什么:是首页、文章页、分类页、标签页还是搜索页。开了伪静态之后,Nginx把所有请求都转给index.php,由index.php解析URL里的参数,找到对应的文章或者分类数据。
比如访问/cate-1.html,就解析出是ID=1的分类,然后从数据库取出这个分类下的文章列表;访问/post/123.html,就取出ID=123的那篇文章。
第三步:主题渲染
数据查出来之后,程序会去找当前主题目录下的对应模板文件:首页用主题里的index.php,文章页用single.php,分类页用category.php,标签页用tag.php。把模板里的占位符替换成真实数据,比如{$title}替换成文章标题,{$content}替换成正文,生成最终的HTML页面。
这就是为什么你改主题里的模板文件,前台会立刻变,因为模板就是渲染用的,每次访问都会重新编译缓存。
第四步:插件钩子
Z-Blog的插件系统靠钩子实现,在程序运行的各个关键节点,都埋了钩子:比如文章保存前、页面渲染前、内容输出前,插件可以注册钩子函数,在这些节点插入自己的逻辑。
比如SEO插件,就是注册了内容输出的钩子,在文章显示之前自动给文章加SEO标题、描述;缓存插件就是注册了页面渲染的钩子,第一次生成页面之后存成静态文件,后面访问直接返回静态文件,不用再查数据库,速度快很多。
第五步:输出和缓存
整个页面渲染完,最后把HTML输出给浏览器,同时根据插件设置,把页面存进缓存目录,下次有人访问同样的页面,直接读缓存文件,跳过前面查数据库、渲染模板的步骤,速度能快好几倍。
对二次开发的帮助
懂了这个流程,你就知道改功能应该在哪下手:要改数据读取,就在路由解析后加逻辑;要改页面显示,就在主题模板里改;要加自动功能,就写插件注册钩子,不用动核心文件。
很多新手二次开发的时候,直接去改zb_system里的核心文件,结果一升级系统就被覆盖,又得重新改,用钩子的方式,升级完全不影响你的自定义功能。
本站源码来源于网络收集修改或者交换,甚至可能并非原创,如遇未经考证信息需持审慎态度。若有疑问,可联系本站处理。