加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

ecshop在dwt模板中和lbi中输入数组详情的方法 ecshop模板中输出

发布时间:2020-12-14 04:41:21 所属栏目:大数据 来源:网络整理
导读:ecshop系统的模板是基于smarty开发的,所以语法有很多smarty的特性,但是又不尽相同。 在ecshop的模板文件中(包含.dwt和.lbi的文件),想要用print_r打印一个数组(smarty的语法是{$array|print_r})却发现不行,在模板中始终只是出现一个array,无法打印出

ecshop系统的模板是基于smarty开发的,所以语法有很多smarty的特性,但是又不尽相同。

在ecshop的模板文件中(包含.dwt和.lbi的文件),想要用print_r打印一个数组(smarty的语法是{$array|print_r})却发现不行,在模板中始终只是出现一个array,无法打印出数组中的内容。
随着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;
}

在上面的代码中,我在有基础上加入了两个函数的引用,一个是print_r,一个是var_export。
不懂的直接把代码复制,替换掉原来的get_val函数即可;懂的,你就可以随心所欲的拓展了。
模板中使用的方式是:<!--{$array|print_r}-->
更多的我就不说了,说多了篇幅太长...嘿嘿...
您可能也喜欢:
  • 模板生成静态页面 ——原代码
  • ECSHOP首页出现:Only variables should be passed by referen
  • 虚拟主机服务器php fsockopen函

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读