使ecshop模板中可引用常量的实现方法

比如$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 }

时间: 2024-12-05 10:57:50

使ecshop模板中可引用常量的实现方法的相关文章

ecshop模板中可引用常量的实现方法

ecshop模板中可引用常量的实现方法 页面请求变量 以下是访问页面请求变量诸如get,post,cookies,server,enviroment和session变量的例子. 例如{$smarty.server.SERVER_NAME}取得服务器变量, {$smarty.env.PATH}取得系统环境变量path, {$smarty.request.username}取得 get/post/cookies/server/env的复合变量. {$smarty.now}变量用于访问当前时间戳. 可

java接口中定义的常量的访问方法

我们在定义常量的时候,可以把常量定义在接口里面,如: packageorg.zy.demo.base; publicinterfaceInterfaceDemo{ finalStringname="thisismyname"; } 上面是我定义的接口和常量. 常量的定义没有指明publicstatic 我实现此接口: packageorg.zy.demo.base; publicclassInterfaceImplimplementsInterfaceDemo{ } 那么我们如何访问呢

asp.net TemplateField模板中的Bind方法和Eval方法_实用技巧

比如我们要取个日期型的数据,在数据库中列名是updated,数值是2008/06/01.但是想2008年06月01日这样显示,我们可以这样来写Bind("updated", "{0:yyyy年MM月dd日}"),Eval也是如此. 2者都能读取数据中的值,并显示.当我们使用编辑更新操作时,Bind能够自动的将修改的值更新到数据库中,并显示出修改后的值.但是用了Eval却只能得到错误画面,新的数据没有更新到数据库中. 从这点看来,Bind方法和Eval方法的区别就是:

linux下Shell中调用/引用/包含脚本文件方法

脚本 first (测试示例1)  代码如下 复制代码 #!/bin/bash echo 'your are in first file'   问)在当前脚本文件中调用另外一个脚本文件? 方法一: 使用 source 脚本 second (测试示例2)  代码如下 复制代码 #!/bin/bash echo 'your are in second file' source first   方法二: 使用 .  代码如下 复制代码 脚本 second (测试示例3) #!/bin/bash ech

如何在smarty模板中定义变量与常量

  定义常量非常的简单 方法是:  代码如下   {$smarty.const.你定义的常量名} 定义变量如何做呢? smarty中定义变量 . {*下面的这一段相当于在模板内部定义一个变量UserName*}  代码如下   {assign var="UserName" value="myz"} 这里将显示模板内部定义的一个变量:UserName = {$UserName} 例子  代码如下   <*assign var="i" valu

template-c++ 编写类似于标准库中find算法的模板,非引用形参和引用形参的区别是什么

问题描述 c++ 编写类似于标准库中find算法的模板,非引用形参和引用形参的区别是什么 #include <iostream> #include <string> #include <vector> using namespace std; template<typename Init,typename T> Init find(Init begin,Init end,const T& val){ while(begin!=end){ if(val

thinkphp-Thinkphp中定义的系统路径常量在模板中不能编译

问题描述 Thinkphp中定义的系统路径常量在模板中不能编译 我在入口文件中定义了路径常量:define("URL", "http://localhost/thinkshop/"); define("ADMIN_CSS_URL",URL."shop/public/Admin/css"); 在Admin模块中的模板文件中不能被识别,编译文件直接输出的{Think.const.CSS_URL}.求教! 解决方案 http://w

如何在smarty模板中定义变量与常量?

定义常量非常的简单 方法是:  代码如下 复制代码 {$smarty.const.你定义的常量名} 定义变量如何做呢? smarty中定义变量 . {*下面的这一段相当于在模板内部定义一个变量UserName*}  代码如下 复制代码 {assign var="UserName" value="myz"} 这里将显示模板内部定义的一个变量:UserName = {$UserName}  例子  代码如下 复制代码 <*assign var="i&qu

ecshop京东模板中配件价格/优惠套餐价格失效解决办法

因ecshop模板二次开发的太多了,会出现大小问题.遇到商品详情页的优惠套餐价格失效问题,怎么解决?下面是解决办法,适用京东jd2013等模板. 打开js/common.js文件,找到addToCartNums(goodsId, parentId)方法函数. 整个函数改为如下代码: function addToCartNums(goodsId, parentId) { var goodsIds=goodsId.substr(0,goodsId.length-1).split(','); var