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 相关文章推荐
第1次亲密接触PHP5(1)
Oct 09 PHP
php visitFile()遍历指定文件夹函数
Aug 21 PHP
PHP在网页中动态生成PDF文件详细教程
Jul 05 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
Jan 19 PHP
Symfony2创建页面实例详解
Mar 18 PHP
Yii视图CGridView实现操作按钮定义地址示例
Jul 14 PHP
详解PHP归并排序的实现
Oct 18 PHP
Symfony2创建基于域名的路由相关示例
Nov 14 PHP
php 5.4 全新的代码复用Trait详解
Jan 05 PHP
ThinkPHP开发--使用七牛云储存
Sep 14 PHP
PHP常见数组排序方法小结
Aug 20 PHP
用php如何解决大文件分片上传问题
Jul 07 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
几种显示数据的方法的比较
2006/10/09 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
2014/11/03 PHP
PHP的swoole扩展安装方法详细教程
2016/05/18 PHP
PHPExcel中文帮助手册|PHPExcel使用方法(分享)
2017/06/09 PHP
JavaScript中奇葩的假值示例应用
2014/03/11 Javascript
jQuery实现根据类型自动显示和隐藏表单
2015/03/18 Javascript
轻量级的原生js日历插件calendar.js使用指南
2015/04/28 Javascript
javascript使用avalon绑定实现checkbox全选
2015/05/06 Javascript
node.js中格式化数字增加千位符的几种方法
2015/07/03 Javascript
javascript中eval解析JSON字符串
2016/02/27 Javascript
利用JavaScript判断浏览器类型及版本
2016/08/23 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/09/29 Javascript
原生JS实现几个常用DOM操作API实例
2017/01/19 Javascript
[04:16]完美世界DOTA2联赛PWL S2 集锦第一期
2020/11/23 DOTA
布同 统计英文单词的个数的python代码
2011/03/13 Python
python爬取网站数据保存使用的方法
2013/11/20 Python
python文件名和文件路径操作实例
2017/09/29 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
2018/02/02 Python
Python的高阶函数用法实例分析
2019/04/11 Python
Python OpenCV利用笔记本摄像头实现人脸检测
2020/08/20 Python
详解pyppeteer(python版puppeteer)基本使用
2019/06/12 Python
Python中的 is 和 == 以及字符串驻留机制详解
2019/06/28 Python
Python字典添加,删除,查询等相关操作方法详解
2020/02/07 Python
在django中实现choices字段获取对应字段值
2020/07/12 Python
css3动画过渡实现鼠标跟随导航效果
2018/02/08 HTML / CSS
家庭睡衣和家庭用品:Little Blue House
2018/03/18 全球购物
自我鉴定范文
2013/11/10 职场文书
卖车协议书
2014/04/21 职场文书
法律系毕业生求职信
2014/05/28 职场文书
清洁工个人工作总结
2015/03/05 职场文书
培训后的感想
2015/08/07 职场文书
品德与社会教学反思
2016/02/24 职场文书
祝福语集锦:送给闺蜜的生日祝福语
2019/10/08 职场文书
SQLServer2019 数据库的基本使用之图形化界面操作的实现
2021/04/08 SQL Server
Mysql 用户权限管理实现
2021/05/25 MySQL
uniapp引入支付宝原生扫码插件步骤详解
2022/07/23 Javascript