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 相关文章推荐
php.ini中文版
Oct 09 PHP
PHP写入WRITE编码为UTF8的文件的实现代码
Jul 07 PHP
php完全过滤HTML,JS,CSS等标签
Jan 16 PHP
php 随机记录mysql rand()造成CPU 100%的解决办法
May 18 PHP
PHP在字符断点处截断文字的实现代码
Apr 21 PHP
php中一个有意思的日期逻辑处理
Mar 25 PHP
关于file_get_contents返回为空或函数不可用的解决方案
Jun 24 PHP
PHP网络操作函数汇总
May 18 PHP
编写PHP脚本使WordPress的主题支持Widget侧边栏
Dec 14 PHP
PHP 下载文件时如何自动添加bom头及解释BOM头和去掉bom头的方法
Jan 04 PHP
Yii rules常用规则示例
Mar 15 PHP
PHP中让json_encode不自动转义斜杠“/”的方法
Feb 28 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
深入浅析Yii admin的权限控制
2016/08/31 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
2018/10/14 PHP
浅谈PHP SHA1withRSA加密生成签名及验签
2019/03/18 PHP
Prototype 学习 工具函数学习($A方法)
2009/07/12 Javascript
jquery 操作日期、星期、元素的追加的实现代码
2012/02/07 Javascript
封装了jQuery的Ajax请求全局配置
2015/02/05 Javascript
JS实现可拖曳、可关闭的弹窗效果
2015/09/26 Javascript
AngularJS bootstrap启动详解及实例代码
2016/09/14 Javascript
ReactNative-JS 调用原生方法实例代码
2016/10/08 Javascript
JSP防止网页刷新重复提交数据的几种方法
2016/11/19 Javascript
原生js实现商品放大镜效果
2017/01/12 Javascript
JavaScript函数基础详解
2017/02/03 Javascript
JavaScript hasOwnProperty() 函数实例详解
2017/08/04 Javascript
Vue+ElementUI使用vue-pdf实现预览功能
2019/11/26 Javascript
JS函数基本定义与用法示例
2020/01/15 Javascript
python批量下载图片的三种方法
2013/04/22 Python
基于Python开发chrome插件的方法分析
2018/07/07 Python
Numpy之random函数使用学习
2019/01/29 Python
Python Threading 线程/互斥锁/死锁/GIL锁
2019/07/21 Python
Python Process多进程实现过程
2019/10/22 Python
使用TFRecord存取多个数据案例
2020/02/17 Python
python实现udp传输图片功能
2020/03/20 Python
python 给图像添加透明度(alpha通道)
2020/04/09 Python
python安装mysql的依赖包mysql-python操作
2021/01/01 Python
优衣库英国官网:UNIQLO英国
2016/12/25 全球购物
会计实习期自我鉴定
2013/10/06 职场文书
药物学专业学生的自我评价
2013/10/27 职场文书
总经理职责
2013/12/22 职场文书
超级搞笑检讨书
2014/01/15 职场文书
全陪导游欢迎词
2014/01/17 职场文书
总经理司机职责
2014/02/02 职场文书
新护士岗前培训制度
2014/02/02 职场文书
幼儿园标语大全
2014/06/19 职场文书
2014年人力资源部工作总结
2014/11/19 职场文书
校车安全管理责任书
2015/05/11 职场文书
python计算列表元素与乘积详情
2022/08/05 Python