使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 静态变量与自定义常量的使用方法
©2014-2024 dbsqp.com