您现在的位置是:首页 > cms教程 > phpcms教程phpcms教程
PHPCMS源码引擎分析
含烟2025-05-21 10:28:04phpcms教程已有4人查阅
导读如:调用单页面index.php?m=content&c=index&a=lists&catid=9.1.先获取到模版变量的值$template_list="list";然后通过$type!=0来判断是单页面,
一、模版引擎
如:调用单页面index.php?m=content&c=index&a=lists&catid=9.
1.先获取到模版变量的值$template_list="list";然后通过$type!=0来判断是单页面,
然后通过$template = $setting['page_template'] ? $setting['page_template'] : 'page';获取单页免的模版page.html.
2.引入模版include template('content',$template);
3.查看template()函数:定义在/phpcms/libs/functions/global.func.php. 传入的三个参数分别是:
(1)module;
(2)模版,比如单页面page.html;
(3)模版风格,就是/phpcms/templates/下面的目录名,比如default,che.
该函数实现的功能:
(1)通过file_exists($compiledtplfile):判断模版编译文件是否存在;
(2)通过filemtime()判断模版文件的生成时间是否大于模版编译文件;
以上两点如果(||连接)为真,则通过$template_cache->template_compile($module, $template, $style);编译模版文件;
4.查看template_compile()函数:定义在/phpcms/libs/classes/template_cache.class.php. 传入的三个参数分别是:
(同上)
该函数实现的功能:
(1)通过$content = @file_get_contents ( $tplfile );读取模版源文件的内容;
(2)通过$content = $this->template_parse($content);正则匹配替换掉标签,将标签替换为php代码:
(3)通过$strlen = file_put_contents ( $compiledtplfile, $content );将替换后的字符串写入模版编译文件;
(4)返回$strlen,即用include template('content',$template);将$strlen引入到控制器代码里。其本质就是php和html代码混编。
5.模版解析:通过template_parse($str)用正则替换标签。 关键点:1.\s 空格匹配的使用;
2.\1 \2分组的使用;
3.替换为self::pc_tag函数的使用。
二、框架实现思路(参考:http:// .tuicool.com/articles/BvU3i2v)
通过单一入口的pc_base::create_app()来创建一个应用,调用不同的类库处理不同的应用;
当处理application时:调用框架类库文件下的application.class.php文件,执行构造函数,加载param路由类,使用路由类中的
$param->route_m(),$param->route_c(),$param->route_a()获取模块和控制器以及方法,route_m为模块,在modules文件下,然后是控制器和方法,标准的mvc结构。然后执行int函数,执行load_controller加载获取到的控制器并且实例化!
三、外部引用来调用phpcms的类库 四、数据库实现原理
1.三大类
mysql.class.php 数据库实现类 :final class mysql;
db_factory.class.php 数据库工厂类 :final class db_factory;
model.class.php 数据模型基类 :class model。
2.实现流程(/phpcms/libs/class/)
(1)mysql.class.php提供数据库连接、查询、执行等各种实现方法; (2)db_factory.class.php用get_instance($db_config = '')方法返回当前工厂类,用get_database($db_name)方法返回数据库操作实例(它调用工厂类的connect($db_name)来实现工厂类原理), (3)model.class.php加载工厂类(pc_base::load_sys_class('db_factory', '', 0);),提供数据库的curd操作方法。 总结:通过工厂类的get_instance()获取当前实例,调用工厂方法的get_database()连接数据库并返回数据库操作实例,并返回给model的$this->db,之后所有方法的调用直接通过$this->db调用model里的方法即可。
如:调用单页面index.php?m=content&c=index&a=lists&catid=9.
1.先获取到模版变量的值$template_list="list";然后通过$type!=0来判断是单页面,
然后通过$template = $setting['page_template'] ? $setting['page_template'] : 'page';获取单页免的模版page.html.
2.引入模版include template('content',$template);
3.查看template()函数:定义在/phpcms/libs/functions/global.func.php. 传入的三个参数分别是:
(1)module;
(2)模版,比如单页面page.html;
(3)模版风格,就是/phpcms/templates/下面的目录名,比如default,che.
该函数实现的功能:
(1)通过file_exists($compiledtplfile):判断模版编译文件是否存在;
(2)通过filemtime()判断模版文件的生成时间是否大于模版编译文件;
以上两点如果(||连接)为真,则通过$template_cache->template_compile($module, $template, $style);编译模版文件;
4.查看template_compile()函数:定义在/phpcms/libs/classes/template_cache.class.php. 传入的三个参数分别是:
(同上)
该函数实现的功能:
(1)通过$content = @file_get_contents ( $tplfile );读取模版源文件的内容;
(2)通过$content = $this->template_parse($content);正则匹配替换掉标签,将标签替换为php代码:
(3)通过$strlen = file_put_contents ( $compiledtplfile, $content );将替换后的字符串写入模版编译文件;
(4)返回$strlen,即用include template('content',$template);将$strlen引入到控制器代码里。其本质就是php和html代码混编。
5.模版解析:通过template_parse($str)用正则替换标签。 关键点:1.\s 空格匹配的使用;
2.\1 \2分组的使用;
3.替换为self::pc_tag函数的使用。
二、框架实现思路(参考:http:// .tuicool.com/articles/BvU3i2v)
通过单一入口的pc_base::create_app()来创建一个应用,调用不同的类库处理不同的应用;
当处理application时:调用框架类库文件下的application.class.php文件,执行构造函数,加载param路由类,使用路由类中的
$param->route_m(),$param->route_c(),$param->route_a()获取模块和控制器以及方法,route_m为模块,在modules文件下,然后是控制器和方法,标准的mvc结构。然后执行int函数,执行load_controller加载获取到的控制器并且实例化!
三、外部引用来调用phpcms的类库 四、数据库实现原理
1.三大类
mysql.class.php 数据库实现类 :final class mysql;
db_factory.class.php 数据库工厂类 :final class db_factory;
model.class.php 数据模型基类 :class model。
2.实现流程(/phpcms/libs/class/)
(1)mysql.class.php提供数据库连接、查询、执行等各种实现方法; (2)db_factory.class.php用get_instance($db_config = '')方法返回当前工厂类,用get_database($db_name)方法返回数据库操作实例(它调用工厂类的connect($db_name)来实现工厂类原理), (3)model.class.php加载工厂类(pc_base::load_sys_class('db_factory', '', 0);),提供数据库的curd操作方法。 总结:通过工厂类的get_instance()获取当前实例,调用工厂方法的get_database()连接数据库并返回数据库操作实例,并返回给model的$this->db,之后所有方法的调用直接通过$this->db调用model里的方法即可。
本文标签:
很赞哦! (1)
暂无内容 |
暂无内容 |
相关文章
暂无内容 |
暂无内容 |
随机图文
phpcms获取文章的方法
请求地址http://127.0.0.1/phpcms/index.php?m=content&c=index&a=show&catid=6&id=8先来判断地址对应的数据表查阅phpcms v9数据表结构手册phpcms频道页category.html使用方法
1.当前栏目的ID:{$catid}标题样式:{title_style($v[style])}(在添加内容或编辑内容的时候,标题右边有一个选择颜色的块)。phpcms调用二级导航栏标签的步骤方法
phpcms如何调用二级导航栏标签?phpcms写二级导航栏标签的方法:第一步:首先,要去官网下载一个phpcms v9系统文件,放在本地运行环境里并且打开。phpcms无法采集的解决方法
phpcms无法采集怎么办?无法采集https的网站内容主要是https不支持file_get_contents获取内容,所以可以考虑采用curl的方式获取。(需要开启curl,可以在pathinfo里边查看)
留言与评论 (共有 0 条评论) |