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实现像JSP,ASP里Application那样的全局变量
Jan 12 PHP
PHP5 面向对象程序设计
Feb 13 PHP
PHP 函数执行效率的小比较
Oct 17 PHP
php数据入库前清理 注意php intval与mysql的int取值范围不同
Dec 12 PHP
PHP学习笔记之三 数据库基本操作
Jan 17 PHP
Php无限级栏目分类读取的实现代码
Feb 19 PHP
destoon安全设置中需要设置可写权限的目录及文件
Jun 21 PHP
ThinkPHP中的三大自动简介
Aug 22 PHP
PHP 抽象方法与抽象类abstract关键字介绍及应用
Oct 16 PHP
ThinkPHP处理Ajax返回的方法
Nov 22 PHP
PHP防盗链的基本思想 防盗链的设置方法
Sep 25 PHP
php判断电子邮件是否正确方法
Dec 04 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代码收集表单内容并写入文件的代码
2012/01/29 PHP
php图像处理函数大全(推荐收藏)
2013/07/11 PHP
php中AES加密解密的例子小结
2014/02/18 PHP
PHP中的替代语法简介
2014/08/22 PHP
PHP通过插入mysql数据来实现多机互锁实例
2014/11/05 PHP
PHP中应该避免使用同名变量(拆分临时变量)
2015/04/03 PHP
php脚本运行时的超时机制详解
2016/02/17 PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
2016/03/01 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
通过javascript设置css属性的代码
2009/12/28 Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
2014/06/06 Javascript
JS实现的表格行鼠标点击高亮效果代码
2015/11/27 Javascript
AngularJS基础 ng-options 指令详解
2016/08/02 Javascript
极力推荐10个短小实用的JavaScript代码段
2016/08/03 Javascript
JS ES6多行字符串与连接字符串的表示方法
2017/04/26 Javascript
自定义vue全局组件use使用、vuex的使用详解
2017/06/14 Javascript
React 子组件向父组件传值的方法
2017/07/24 Javascript
基于构造函数的五种继承方法小结
2017/07/27 Javascript
JS去掉字符串中所有的逗号
2017/10/18 Javascript
vue jsx 使用指南及vue.js 使用jsx语法的方法
2017/11/11 Javascript
layui输入框只允许输入中文且判断长度的例子
2019/09/18 Javascript
Openlayers实现图形绘制
2020/09/28 Javascript
[51:22]Fnatic vs IG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python使用mysqldb连接数据库操作方法示例详解
2013/12/03 Python
python解决pandas处理缺失值为空字符串的问题
2018/04/08 Python
Python实现购物车程序
2018/04/16 Python
PyCharm代码整体缩进,反向缩进的方法
2018/06/25 Python
python实现一行输入多个值和一行输出多个值的例子
2019/07/16 Python
Python pandas用法最全整理
2019/08/04 Python
详解Pycharm与anaconda安装配置指南
2020/08/25 Python
英国领先的体验日提供商:Buyagift
2019/04/19 全球购物
某公司Java工程师面试题笔试题
2016/03/27 面试题
保安员岗位职责
2013/11/17 职场文书
2016年小学植树节活动总结
2016/03/16 职场文书
NodeJs内存占用过高的排查实战记录
2021/05/10 NodeJs
Pytest中skip skipif跳过用例详解
2021/06/30 Python