ecshop在dwt模板中和lbi中输入数组详情的方法 ecshop模板中输出数组的方法
Posted lixiang1
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ecshop在dwt模板中和lbi中输入数组详情的方法 ecshop模板中输出数组的方法相关的知识,希望对你有一定的参考价值。
ecshop系统的模板是基于smarty开发的,所以语法有很多smarty的特性,但是又不尽相同。
随着ecshop的发展,现在市面上ecshop的商业模板越来越多,免费模板也是来越多,这时候买别人的模板,放在商城中就很担心被加入后门了,所以ecshop就在模板类中屏蔽了所有的函数调用,防止模板中被加入后门,只开放了少量的必须的函数(如:escape,nl2br等)。
但是作为开发者,想要在页面输出数组便于调试是很重要的,那么怎么解决这个问题呢?
第一步:打开ecshop目录下 “includes/cls_template.php”文件
第二步:在文件中搜索“function get_val($val)”,即get_val函数
经过上面两步,懂php代码的人,认证看下就会发现,原来在模板中可以使用的函数都是在这里“定义”的,剩下的就是加入你想用的函数了,函数体可以写在ecshop的函数库中,在这里调用函数就行了,由于调用的原理是使用eval函数,所以写法要注意,废话少说上代码:
/**
* 处理smarty标签中的变量标签
*
* @access public
* @param string $val
*
* @return bool
*/
function get_val($val)
if (strrpos($val, ‘[‘) !== false)
$val = preg_replace("/\[([^\[\]]*)\]/eis", "‘.‘.str_replace(‘$‘,‘\$‘,‘\\1‘)", $val);
if (strrpos($val, ‘|‘) !== false)
$moddb = explode(‘|‘, $val);
$val = array_shift($moddb);
if (empty($val))
return ‘‘;
if (strpos($val, ‘.$‘) !== false)
$all = explode(‘.$‘, $val);
foreach ($all AS $key => $val)
$all[$key] = $key == 0 ? $this->make_var($val) : ‘[‘. $this->make_var($val) . ‘]‘;
$p = implode(‘‘, $all);
else
$p = $this->make_var($val);
if (!empty($moddb))
foreach ($moddb AS $key => $mod)
$s = explode(‘:‘, $mod);
switch ($s[0])
case ‘escape‘:
$s[1] = trim($s[1], ‘"‘);
if ($s[1] == ‘html‘)
$p = ‘htmlspecialchars(‘ . $p . ‘)‘;
elseif ($s[1] == ‘url‘)
$p = ‘urlencode(‘ . $p . ‘)‘;
elseif ($s[1] == ‘decode_url‘)
$p = ‘urldecode(‘ . $p . ‘)‘;
elseif ($s[1] == ‘quotes‘)
$p = ‘addslashes(‘ . $p . ‘)‘;
elseif ($s[1] == ‘u8_url‘)
if (EC_CHARSET != ‘utf-8‘)
$p = ‘urlencode(ecs_iconv("‘ . EC_CHARSET . ‘", "utf-8",‘ . $p . ‘))‘;
else
$p = ‘urlencode(‘ . $p . ‘)‘;
else
$p = ‘htmlspecialchars(‘ . $p . ‘)‘;
break;
case ‘nl2br‘:
$p = ‘nl2br(‘ . $p . ‘)‘;
break;
case ‘default‘:
$s[1] = $s[1]0 == ‘$‘ ? $this->get_val(substr($s[1], 1)) : "‘$s[1]‘";
$p = ‘empty(‘ . $p . ‘) ? ‘ . $s[1] . ‘ : ‘ . $p;
break;
case ‘truncate‘:
$p = ‘sub_str(‘ . $p . ",$s[1])";
break;
case ‘strip_tags‘:
$p = ‘strip_tags(‘ . $p . ‘)‘;
break;
case ‘print_r‘:
$p=‘print_r(‘.$p.‘,true)‘;
break;
case ‘var_export‘:
$p=‘var_export(‘.$p.‘,true)‘;
break;
default:
# code...
break;
return $p;
不懂的直接把代码复制,替换掉原来的get_val函数即可;懂的,你就可以随心所欲的拓展了。
模板中使用的方式是:<!--$array|print_r-->
更多的我就不说了,说多了篇幅太长...嘿嘿...
以上是关于ecshop在dwt模板中和lbi中输入数组详情的方法 ecshop模板中输出数组的方法的主要内容,如果未能解决你的问题,请参考以下文章
ecshop不能在模板文件.dwt和.lbi中直接添加php代码的解决方法
关于ecshop中'/library/cat_goods.lbi'的调用来源