ECSHop的自定义属性很是好用,但是在前台输出的时候非常麻烦,只能循环输出所有的附加商品属性,不能输出制定的某个自定义的属性,本来它用的是Smarty模板,但是到2.5之后好像是把Smarty修改很多,里面好多东西不能用了。今天给朋友改东西,随便就写了下。
我只在商品具体信息页面(goods.php)做了这个事情,可以的话可以写到每个页面去。
修改goods.php
在
PHP代码
- $smarty->assign(‘properties’, $properties['pro']);
这句前添加:
PHP代码
- //By Sharmy
- $pros = array();
- foreach($properties['pro']['商品属性'] as $k=>$pro){
- $pros[$pro['name']]['specId'] = $k;
- $pros[$pro['name']]['value'] = $pro['value'];
- }
- $smarty->assign(‘pros’, $pros);
然后在模板部分可以这样调用(例如调用自己在后台定义的"净重"的商品类别属性):
XML/HTML代码
- <ul><li> 净重:{$pros.净重.value}</li></ul>
嘿嘿,是不搜很爽?
接下来就可以修改它的其它页面了,最好是修改调用的function部分,例如修改lib_goods.php里的get_goods_propertiess。

在商品列表中不能使用是不是有的函数没有加载?可以把相关的函数移植过去啊。反正源代码是可以修改的,不像supe-site和x-space,麻烦的很。
[回复]
呵呵,受教,多谢了。
[回复]
补充下:这个代码 只能在goods.php 中使用,因为
要使用到 lib_goods.php 中的
get_goods_properties函数
而get_goods_properties函数带的参数是$goods_id
本人也想在商品列表中使用,但是怎么思考都想不出来,希望大家能帮帮忙。
[回复]
经过测试你的代码有时候会出现错误代码:
Invalid argument supplied for foreach()
我稍微改进了一下
/*
调用自定义属性
by catro
*/
$pros = array();
if (isset($properties) && is_array($properties))
{
foreach((array)$properties['pro'][$GLOBALS['_LANG']['goods_attr']] as $k=>$pro)
{
$pros[$pro['name']]['specId'] = $k;
$pros[$pro['name']]['value'] = $pro['value'];
}
$smarty->assign(’pros’, $pros); //End 调用演示: 净重:{$pros.净重.value}
}
[回复]
最新版本的ECshop已经把Smarty改了,要实现你的功能只有自己写函数了。
[回复]
请问一下,ecshop 2.5是不是不能用 {$xxx|replace:”":”"} 这样的方法了?如果是不行,怎么实现这个功能呢?多谢了……
[回复]