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}变量用于访问当前时间戳.
可以用 date_format调节器格式化输出. 例如{$smarty.now|date_format:"%Y-%m-%d %H:%

M:%S"}

{$smarty.const}
你可以直接访问PHP常量. 例如{$smarty.const._MY_CONST_VAL}

{$smarty.capture}
可以通过 {capture}..{/capture}结构 截取的输出可以使用{$smarty} 变量访问.

{$smarty.config}
{$smarty}变量 可以访问已经加载的config变量.
例如 {$smarty.config.foo}就可以表示 {#foo#}.

{$smarty.section}, {$smarty.foreach}
{$smarty} 变量可以访问'section'和'foreach'循环的属性.

{$smarty.template}
显示当前被处理的模板的名字.

{$smarty.version}
显示smarty模板的版本

{$smarty.ldelim}
显示左分隔符

{$smarty.rdelim}
显示右分隔符

 

这次要在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教程中定义

的常量了
复制代码 代码如下:

if($t[0] == 'const'){
  return strtoupper($t[1]);
}

其实模板引擎原理上并不复杂,只是把一些模板标签替换为php中的函数,变量,语法结构罢

了。

时间: 2024-07-29 02:13:18

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

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

比如$smarty.const.'常量',这个就不能用. 其实模板引擎原理上并不复杂,只是把一些模板标签替换为php中的函数,变量,语法结构罢了. 这次要在ecshop模板中加入引用常量的功能,只需在函数make_var()中加入两行代码 复制代码 代码如下: function make_var($val) { if (strrpos($val, '.') === false) { if (isset($this->_var[$val]) && isset($this->_pa

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