Php Ctemplate引擎开发相关内容


Posted in PHP onMarch 03, 2012

1.简介

也许你对Php Ctemplate不了,解甚看到这个名词,只知道它的前半部分是一种编程语言。没有关系让我来给大家介绍一下这个基于php语言的标签模版引擎(请允许我这样去翻译这套web开发解决方案,尽管我可能翻译的不准确)。

先简短说一下他的历史。了解Php Ctemplate先要知道Ctempalte;Ctempalte全称是Google Ctemplate。它是一种用c++语言、简单但是效率非常高的网页模版引擎。让我们来看一段代码,聪明的你立刻就知道它怎么用了(来自官方Demo)

Php Ctemplate引擎开发相关内容那么C++输出便是:
Hello John Smith
You Have just won (这里是执行random%100000 随机数)
Well ,(这里是执行random%100000 的随机数再 * 0.83),after taxes
好吧,总结一下 就是把c++源码中的Template对象加载 tpl(我们可以称它为模版)文件之后,再填充TemplateDictionary中的对应的值,最后输出。听起来很拗口是吧,简单点把后端标签对应值填充到tpl的{{标签}}中。
详细的请参见http://google-ctemplate.googlecode.com/svn/trunk/doc/index.html
那么PHP ctemplate呢?大家都知道PHP扩展吧,玩过PHP的朋友都知道gd,exif,mysql,mysqli这些扩展吧。对,就是php.ini 文件里“extension=”那里的dll。我总结PHP ctemplate就是用PHP扩展接口的格式,包装了Google Ctemplate,让PHP具有Google Ctemplate的功能。再通俗点体现在代码上就是:tpl文件不变,只是把c++ 文件变成了php文件。至于它的用法我想我在这里就不多介绍了,他和Google Ctempalte 一样。
详见http://code.google.com/p/php-ctemplate/
2.WIN32下可以吗
也许你会很快意识到这种模版引擎,符合我们常见的MVC吧。没错,就是这样。但是很遗憾,PHP Ctemplate只能在Freebsd系统中运行,win32环境中的php,我至今没有在网上发现对应的PHP ctemplate dll,我也咨询过PHP ctemplate的作者,他好像不太愿意在win32环境中编译这些代码;我曾经和我开发c++的朋友“阿呆”试着编译,我们找了php源码+ Ctemplate源码+PHP ctemplate源码编译出了win32下的PHP ctemplate扩展,但是很奇怪,每次php启动加载PHP ctemplate时,php引擎就会出现异常,PHP ctemplate不能正常加载。

如果成功加载php ctemplate则会在phpinfo 中显示:

Php Ctemplate引擎开发相关内容

      我也看了下PHP ctemplate的源码好像是基于Zend编写的。因为本人对c++和php都不是很精通,实在也没有能力去重新编写这套扩展,所以只能想了个折中的办法:把Ctemplate用ATL COM 包装起来,模拟PHP ctemplate的函数和方法。

3.我的尝试

      之所以这么曲折,是因为用这套框架后,根本没有办法调试PHP代码,我试过在freebsd的环境中安装xdebug,好吧,勉强能进行远程调试。可是freebsd是没有图形界面的,哎,无奈下安装了gnome,只能暂时这样了。出于好奇和不服气,我把Ctemplate用ATL COM 包装起来,模拟PHP ctemplate的函数和方法,但是只完成了一半。在这里要特别感谢“阿呆”同志,没有他我也根本写不出c++的ATL。下面是ATL COM里面的方法(只完成了一部分)。

 

Php Ctemplate引擎开发相关内容

我包装的ATL COM 功能我包装在了core.php 中。

Php Ctemplate引擎开发相关内容

      如果大家有兴趣可以找我要源码继续完善,因为它是COM的所以ASP也可以使用,我会把dll提供下载。如果大虾们成在win32下成功编译使用PHP ctemplate,那我更求之不得。
下载COM文件 phpctempalteCOM

PHP 相关文章推荐
学习使用curl采集curl使用方法
Jan 11 PHP
检查php文件中是否含有bom的函数
May 31 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
Aug 21 PHP
PHP MSSQL 分页实例
Apr 13 PHP
Joomla调用系统自带编辑器的实现方法
May 05 PHP
浅析Yii2缓存的使用
May 10 PHP
php数组指针操作详解
Feb 14 PHP
PHP API接口必备之输出json格式数据示例代码
Jun 27 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 PHP
php基于Redis消息队列实现的消息推送的方法
Nov 28 PHP
PHP实现随机发放扑克牌
Apr 21 PHP
Thinkphp 框架扩展之Widget扩展实现方法分析
Apr 23 PHP
PHP代码网站如何防范SQL注入漏洞攻击建议分享
Mar 01 #PHP
PHP和JAVA中的重载(overload)和覆盖(override) 介绍
Mar 01 #PHP
JS中encodeURIComponent函数用php解码的代码
Mar 01 #PHP
PHP设计模式之装饰者模式
Feb 29 #PHP
php preg_filter执行一个正则表达式搜索和替换
Feb 27 #PHP
mysql总结之explain
Feb 27 #PHP
php&mysql 日期操作小记
Feb 27 #PHP
You might like
easyui的tabs update正确用法分享
2014/03/21 PHP
PHP连接sql server 2005环境配置及问题解决
2014/08/08 PHP
php实现转换ubb代码的方法
2015/06/18 PHP
PHP读取word文档的方法分析【基于COM组件】
2017/08/01 PHP
php 字符串中是否包含指定字符串的多种方法
2018/04/12 PHP
浅析PHP 中move_uploaded_file 上传中文文件名失败
2019/04/17 PHP
laravel-admin的图片删除实例
2019/09/30 PHP
nodejs的require模块(文件模块/核心模块)及路径介绍
2013/01/14 NodeJs
javascript页面上使用动态时间具体实现
2014/03/18 Javascript
一个很有趣3D球状标签云兼容IE8
2014/08/22 Javascript
JavaScript模拟push
2016/03/06 Javascript
AngularJS 基础ng-class-even指令用法
2016/08/01 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
基于jquery实现五星好评
2017/11/18 jQuery
vue.js2.0点击获取自己的属性和jquery方法
2018/02/23 jQuery
JS异步错误捕获的一些事小结
2019/04/26 Javascript
原生JS实现列表内容自动向上滚动效果
2019/05/22 Javascript
JS实现的进制转换,浮点数相加,数字判断操作示例
2019/11/09 Javascript
详解vue父子组件状态同步的最佳方式
2020/09/10 Javascript
[05:59]2018DOTA2国际邀请赛寻真——只为胜利的Secret
2018/08/13 DOTA
[43:26]完美世界DOTA2联赛PWL S2 Forest vs Rebirth 第二场 11.20
2020/11/23 DOTA
python根据给定文件返回文件名和扩展名的方法
2015/03/27 Python
Python实现简单的获取图片爬虫功能示例
2017/07/12 Python
深入理解Python中的*重复运算符
2017/10/28 Python
美体小铺瑞典官方网站:The Body Shop瑞典
2018/01/27 全球购物
莫斯科大型旅游休闲商品超市:Camping.ru
2020/09/16 全球购物
预防传染病方案
2014/06/14 职场文书
环境科学专业教师求职信
2014/07/12 职场文书
网络技术专业求职信
2014/07/13 职场文书
事业单位年度考核个人总结
2015/02/12 职场文书
刑事上诉状(无罪)
2015/05/23 职场文书
搞笑婚庆主持词
2015/06/29 职场文书
大学运动会通讯稿
2015/07/18 职场文书
使用@Value值注入及配置文件组件扫描
2021/07/09 Java/Android
PyTorch中的torch.cat简单介绍
2022/03/17 Python
Python使用DFA算法过滤内容敏感词
2022/04/22 Python