使ecshop模板中可引用常量的实现方法
2015-01-24信息快讯网
据说ecshop的模板类是修改的smarty,不过个人感觉不是修改是完全重写了。它和smarty上只是模板标签上有相同的地方,同时阉割了很多功能
比如$smarty.const.'常量',这个就不能用。其实模板引擎原理上并不复杂,只是把一些模板标签替换为php中的函数,变量,语法结构罢了。
这次要在ecshop模板中加入引用常量的功能,只需在函数make_var()中加入两行代码
function make_var($val) { if (strrpos($val, '.') === false) { if (isset($this->_var[$val]) && isset($this->_patchstack[$val])) { $val = $this->_patchstack[$val]; } $p = '$this->_var[\'' . $val . '\']'; } else { $t = explode('.', $val); $_var_name = array_shift($t); if (isset($this->_var[$_var_name]) && isset($this->_patchstack[$_var_name])) { $_var_name = $this->_patchstack[$_var_name]; } if ($_var_name == 'smarty') { if($t[0] == 'const'){ return strtoupper($t[1]); } $p = $this->_compile_smarty_ref($t); } else { $p = '$this->_var[\'' . $_var_name . '\']'; } foreach ($t AS $val) { $p.= '[\'' . $val . '\']'; } } return $p; }
其中21-23行是新加的,这让就可在模板文件中通过 {$smarty.const.常量}来引用php中定义的常量了
21 if($t[0] == 'const'){ 22 return strtoupper($t[1]); 23 }
Thinkphp模板中使用自定义函数的方法
php引用计数器进行垃圾收集机制介绍
谨慎使用PHP的引用原因分析
PHP中使用foreach和引用导致程序BUG的问题介绍
比较discuz和ecshop的截取字符串函数php版
通过5个php实例细致说明传值与传引用的区别
openflashchart 2.0 简单案例php版
PHP面向对象的进阶学习(抽像类、接口、final、类常量)
PHP原生模板引擎 最简单的模板引擎
php引用地址改变变量值的问题
ecshop 批量上传(加入自定义属性)
TMDPHP 模板引擎使用教程
PHP中几个常用的魔术常量
PHP教程之PHP中shell脚本的使用方法分享
PHP逐行输出(ob_flush与flush的组合)
Pain 全世界最小最简单的PHP模板引擎 (普通版)
php中Smarty模板初体验
php小技巧 把数组的键和值交换形成了新的数组,查找值取得键
php 数组使用详解 推荐
Views rows style模板重写代码
PHP错误抑制符(@)导致引用传参失败Bug的分析
php中神奇的fastcgi_finish_request
在smarty模板中使用PHP函数的方法
flash用php连接数据库的代码
PHP中MVC模式的模板引擎开发经验分享
php模板中出现空行解决方法
理解php Hash函数,增强密码安全
PHP中foreach循环中使用引用要注意的地方
linux下删除7天前日志的代码(php+shell)
php 传值赋值与引用赋值的区别
smarty模板嵌套之include与fetch性能测试
一道关于php变量引用的面试题
用PHP为SHOPEX增加日志功能代码
PHP 面向对象 PHP5 中的常量
PHP 引用是个坏习惯
php 静态变量与自定义常量的使用方法