灰小子与ecshop学习日记

2016-07-07 15:05 来源:www.chinab4c.com 作者:ecshop专家

2009年4月23日11时18分30秒
今天要把商品属性功能拿下。。
BBS找了这么多。。一个都看不懂。。
==================
本人第一次给出的代码未经测试,结果不能实现功能,在此表示抱歉。
以下代码已通过测试,可以使用。不过在循环数组的时候效率可能不高,期待高手完善下。
1.在category.php文件中约425行
$arr[$row['goods_id']]['url'] = build_uri('goods', array('gid'=>$row['goods_id']), $row['goods_name']);
后加入代码:
$arr[$row['goods_id']]['spec']= get_goods_attr($row['goods_id']);

2.在goods_list.lbi模板库文件中相应位置加入代码:
<!--{foreach from=$goods.spec item=spec}-->
<p>{$spec.attr_name}:<!--{foreach from=$spec.goods_attr_list item=spec_list}-->
{$spec_list}/<!--{/foreach}--></p>
<!--{/foreach}-->

这样就可以实现了!本人也是菜鸟,高手漂过!

=====================================
除了加上 g.goods_attr 之外;还要FROM table('goods_attr')!
看看下面这个代码你应该知道怎么修改了: /* 获得商品的规格 */
$sql = 'SELECT a.attr_id, a.attr_name, a.is_linked, a.attr_type, g.goods_attr_id, g.attr_value, g.attr_price ' .
'FROM ' . $GLOBALS['ecs']->table('goods_attr') . ' AS g ' .
'LEFT JOIN ' . $GLOBALS['ecs']->table('attribute') . ' AS a ON a.attr_id = g.attr_id ' .
"WHERE g.goods_id = '$goods_id' " .
'ORDER BY a.sort_order, g.attr_price, g.goods_attr_id';
复制代码
原帖由 menkz 于 2007-9-12 10:36 发表
我在goods_list.lbi添加了如下代码:{$lang.goods_attr}{$goods.goods_attr}



=============================================

方法:在category.php的 function category_get_goods 函数的while ($row = $GLOBALS['db']->fetchRow($res))
{
复制代码下面加入:/*----------------Jet加的取得商品属性-------------------*/
$properties = get_goods_properties($row['goods_id']);
$arr[$row['goods_id']]['propertie'] = $properties['pro'];
复制代码属性调用和数组赋值,取pro属性;
前台显示:
在category.dwt和goods_list.lbi的{$goods.goods_name}下面加入:<!-- {foreach from=$goods.propertie item=propertys key=key}
-->

<!-- {foreach from=$propertys item=property} -->

{$property.name|escape:html}{$property.value|escape:html}

<!-- {/foreach}-->
<!-- {/foreach}-->
复制代码如此,前台列表文件即显示相对应产品的属性了。
{$key|escape} 可加亦可不加,是显示属性的类别名的。


===============================================
<table width="98%" border="0" align="center">
<!-- {foreach from=$properties item=property_group key=key} -->
<tr>
<td colspan="2"><strong>{$key|escape}</strong></td>
</tr>
<!-- {foreach from=$property_group item=property} -->
<tr>
<td nowrap="true">{$property.name|escape:html}</td>
<td>{$property.value|escape:html}</td>
</tr>
<!-- {/foreach}-->
<!-- {/foreach}-->
</table>

回答:
都是在列表页调用商品属性。。
我想要的效果是在商品详情页显示:
尺寸:a1*a2*a3
其中长=a1宽= a2高= a3

不知说的什么!!!!!

ECSHOP 葵花宝典
找到这个。。看来得研究一下这些文件。

在数据库搜索color

ecs_article
是文章内容表
ecs_payment
是支付内容表
ecs_shop_config
好像是放首页公告内容表

ecs_topic
优惠内容表。。
找到了
ecs_goods 是放商品的表

到底哪个列是对应商品属性的呢?
不管了。先在后台加一个商品。颜色填红红色。。
数据库搜索一下。。
出来这个。

看来ecs_goods_attr是放自定义属性的。。
进去看看。
goods_attr_idgoods_idattr_idattr_valueattr_price
869 541 217 红红色 0
attr_value 对应 红红色
应该是这个。。搜索一下。

数据库里:
商品ID
goodsID=541
包包颜色
attr_id =217
类别
attr_id =215
风格
attr_id =216

goods_attr_id 是递增的。。
数据表弄懂了。。
那他们是如何调用的呢?继续。。



admin/goods.php找到这段。应该是重点。
// 商品属性
$sql = "DELETE FROM " . $ecs->table('goods_attr') . " WHERE goods_id = 0";
$db->query($sql);

$sql = "SELECT 0 AS goods_id, attr_id, attr_value, attr_price " .
"FROM " . $ecs->table('goods_attr') .
" WHERE goods_id = '$_REQUEST[goods_id]' ";
$res = $db->query($sql);
while ($row = $db->fetchRow($res))
{
$db->autoExecute($ecs->table('goods_attr'), addslashes_deep($row), 'INSERT');
}
}

$sql = "DELETE FROM " . $ecs->table('goods_attr') . " WHERE goods_id = 0";
删除 goods_id = 0的数据..