分享

让ecshop的smarty支持数学运算.

 quasiceo 2014-05-04
让ecshop的smarty支持数学运算.
2013-11-09 13:34:25

在ecshop的使用,smarty可以很方便的做成网页。但ecshop的smarty把一些功能去掉了,只保留了逻辑运算、变量处理

等功能,连数学计算都不支持。我们想要在smarty模板中对一个变量进行动态的计算,就没有办法。

研究了一个晚上,终于可以让ecshop的smarty模板支持简单的数学计算了。

在ecshop的smarty模板中,对变量处理如下:


{$foo+ 1}

那么生成的后台代码是这样的:


<?php echo$this->_var['foo+1'] ; ?>

它将$号后面的全部作为变量名了。


我们要的效果,

模板中是这样:


{math equation="$foo + 1"}

在后台生成这样的代码:


<?php echo$this->_var['foo] + 1; ?>


这里需要对cls_template文件进行修改,让其支持math标签。

在select 方法中增加一个case:

1
2
3
4
case'math':
$t= $this->get_math_para(substr($tag, 8));
return'<?php echo '. $t. '; ?>';
break;


增加一个方法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
/**
* 处理math中的公式.
* */
functionget_math_para($val){
$pa= $this->str_trim($val);
foreach($paAS $value)
{
if(strrpos($value, '='))
{
list($a, $b) = explode('=', str_replace(array(' ', '"', "'", '"'), '', $value));
if(strpos($b, '$') >= 0)
{
//$b为类似的1+2,$abc*123等
$pattern= "/\\$[_a-zA-z]+[a-zA-Z0-9_]*/";
preg_match($pattern, $b,$arr);
if($arr) {
foreach($arras$match) {
$v= $this->get_val(substr($match, 1));
$b= str_replace($match, $v, $b);
}
}
}
}
}
return$b;
}

这样就可以了。


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多