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 相关文章推荐
ADODB结合SMARTY使用~超级强
Nov 25 PHP
php安全配置 如何配置使其更安全
Dec 16 PHP
PHP autoload与spl_autoload自动加载机制的深入理解
Jun 05 PHP
php获取twitter最新消息的方法
Apr 14 PHP
10个php函数实用却不常见
Oct 13 PHP
WordPress中设置Post Type自定义文章类型的实例教程
May 10 PHP
php is_writable判断文件是否可写实例代码
Oct 13 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
Ajax中的JSON格式与php传输过程全面解析
Nov 14 PHP
laravel-admin 实现给grid的列添加行数序号的方法
Oct 08 PHP
PHP 构造函数和析构函数原理与用法分析
Apr 21 PHP
详解PHP用mb_string处理windows中文字符
May 26 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
树型结构列出指定目录里所有文件的PHP类
2006/10/09 PHP
30 个很棒的PHP开源CMS内容管理系统小结
2011/10/14 PHP
php一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
php简单定时执行任务的实现方法
2015/02/23 PHP
php实现的IMEI限制的短信验证码发送类
2015/05/05 PHP
PHP7 标准库修改
2021/03/09 PHP
JavaScript中“+”的陷阱深刻理解
2012/12/04 Javascript
利用百度地图JSAPI生成h7n9禽流感分布图实现代码
2013/04/15 Javascript
jQuery 滑动方法slideDown向下滑动元素
2014/01/16 Javascript
jQuery事件绑定与解除绑定实现方法
2015/04/15 Javascript
使用CamanJS在Web页面上处理图像的技巧
2015/08/18 Javascript
jQuery中on绑定事件后引发的事件冒泡问题如何解决
2016/05/25 Javascript
JS组件Bootstrap Table使用实例分享
2016/05/30 Javascript
jquery实现垂直和水平菜单导航栏
2020/08/27 Javascript
nodejs中密码加密处理操作详解
2018/03/20 NodeJs
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
[52:22]EG vs VG Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
Python的多维空数组赋值方法
2018/04/13 Python
python3中获取文件当前绝对路径的两种方法
2018/04/26 Python
nohup后台启动Python脚本,log不刷新的解决方法
2019/01/14 Python
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法
2019/07/04 Python
使用python os模块复制文件到指定文件夹的方法
2019/08/22 Python
Pytorch 的损失函数Loss function使用详解
2020/01/02 Python
浅谈Django中的QueryDict元素为数组的坑
2020/03/31 Python
解决python脚本中error: unrecognized arguments: True错误
2020/04/20 Python
python xlsxwriter模块的使用
2020/12/24 Python
Python结合百度语音识别实现实时翻译软件的实现
2021/01/18 Python
Python中生成ndarray实例讲解
2021/02/22 Python
python Protobuf定义消息类型知识点讲解
2021/03/02 Python
HTML块级标签汇总(小篇)
2016/07/13 HTML / CSS
建筑设计所实习生自我鉴定
2013/09/25 职场文书
夫妻分居协议书范本(有子女版)
2014/11/01 职场文书
pytorch 中nn.Dropout的使用说明
2021/05/20 Python
Java字符缓冲流BufferedWriter
2022/04/09 Java/Android
JAVA长虹键法之建造者Builder模式实现
2022/04/10 Java/Android
Python实现数据的序列化操作详解
2022/07/07 Python