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正则匹配汉字的方法介绍
Apr 25 PHP
Linux下安装oracle客户端并配置php5.3
Oct 12 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
Dec 18 PHP
php 利用array_slice函数获取随机数组或前几条数据
Sep 30 PHP
PHP利用超级全局变量$_GET来接收表单数据的实例
Nov 05 PHP
记录一次排查PHP脚本执行卡住的问题
Dec 27 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
May 20 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
Oct 26 PHP
php获取目录下所有文件及目录(多种方法)(推荐)
May 14 PHP
php用wangeditor3实现图片上传功能
Aug 22 PHP
PHP项目多语言配置平台实现过程解析
May 18 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+mysql事务rollback&commit示例
2010/02/08 PHP
一个简单安全的PHP验证码类、PHP验证码
2016/09/24 PHP
php中final关键字用法分析
2016/12/07 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
2016/12/08 PHP
jquery 面包屑导航 具体实现
2013/06/05 Javascript
网页前端优化之滚动延时加载图片示例
2013/07/13 Javascript
jquery indexOf使用方法
2013/08/19 Javascript
高性能JavaScript模板引擎实现原理详解
2015/02/05 Javascript
JavaScript代码实现图片循环滚动效果
2020/03/19 Javascript
jQuery如何封装输入框插件
2016/08/19 Javascript
Omi v1.0.2发布正式支持传递javascript表达式
2017/03/21 Javascript
BootStrap中jQuery插件Carousel实现轮播广告效果
2017/03/27 jQuery
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
手机注册发送验证码倒计时的简单实例
2017/11/15 Javascript
nodejs读取并去重excel文件
2018/04/22 NodeJs
JavaScript解析机制与闭包原理实例详解
2019/03/08 Javascript
[48:32]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
[42:32]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第二场 10.28
2020/10/28 DOTA
整理Python中的赋值运算符
2015/05/13 Python
学习python类方法与对象方法
2016/03/15 Python
python中函数传参详解
2016/07/03 Python
Python实现Windows和Linux之间互相传输文件(文件夹)的方法
2017/05/08 Python
python实现学生管理系统
2018/01/11 Python
pycharm创建一个python包方法图解
2019/04/10 Python
Python3 翻转二叉树的实现
2019/09/30 Python
django 链接多个数据库 并使用原生sql实现
2020/03/28 Python
解决python 虚拟环境删除包无法加载的问题
2020/07/13 Python
活动总结模板
2014/05/09 职场文书
授权委托书格式范文
2014/08/02 职场文书
党员群众路线教育实践活动学习笔记
2014/11/05 职场文书
先进人物事迹材料
2014/12/29 职场文书
违纪检讨书范文
2015/01/27 职场文书
专家推荐信怎么写
2015/03/25 职场文书
检讨书模板大全
2015/05/07 职场文书
小学运动会开幕词
2016/03/04 职场文书
详解SpringBoot异常处理流程及原理
2021/06/21 Java/Android