ECSHOP有个货品功能,就是可以单独给商品的尺码、颜色设置库存。但是商品详情页却只能显示部库存。如果有个属性无货了,也不知道。本ECSHOP教程即可实现直接显示属性库存。是目前最完整最完美的。
网上流传的免费教程有两个问题。
1、网上提供的教程无出现库存显示无效的情况,这是因为与jquery不兼容。
2、打开商品页面时,默认是选 中第一个颜色的,但却显示总库存,造成误以为是第一个颜色的库存。如果能打开页面就显示第一个颜色库存就好了。
ECSHOP教程网提供本ECSHOP教程完美解决这两个问题。
第一步:
下载选中小图标 test.gif ,保存路径:themes/default/images/test.gif 本教程最后面有下载。
第二步:
在模板样式中添加如下代码:如 themes/default/style.css
catt{
width
:
100%
;
height
:
auto
;
overflow
:
hidden
;
padding-bottom
:
5px
;}
.catt a{
border
:
#7E7E7E
1px
solid
;
text-align
:
center
;
background-color
:
#fff
;
margin-left
:
5px
;
margin-top
:
6px
;
padding-left
:
10px
;
padding-right
:
10px
;
display
:
block
;
white-space
:
nowrap
;
color
:
#000
;
text-decoration
:
none
;
float
:
left
;}
.catt a:hover {
border
:
#ED0036
2px
solid
;
margin
:
-1px
;
margin-left
:
4px
;
margin-top
:
5px
;}
.catt a:focus {
outline-style
:
none
;}
.catt .cattsel {
border
:
#ED0036
2px
solid
;
margin
:
-1px
;
background
:
url
(
"images/test.gif"
)
no-repeat
bottom
right
;
margin-left
:
4px
;
margin-top
:
5px
;}
.catt .cattsel a:hover {
border
:
#ED0036
2px
solid
;
margin
:
-1px
;
background
:
url
(
"images/test.gif"
)
no-repeat
bottom
right
;}
第三步:
打开goods.dwt文件 替换循环文件
查找:
<!-- {
foreach
from=
$spec
.values item=value key=key} -->
<label
for
=
"spec_value_{$value.id}"
>
<input type=
"radio"
name=
"spec_{$spec_key}"
value=
"{$value.id}"
id=
"spec_value_{$value.id}"
{
if
$key
eq 0}checked{/
if
} onclick=
"changePrice()"
/>
{
$value
.label} [{
if
$value
.price gt 0}{
$lang
.plus}{
elseif
$value
.price lt 0}
{
$lang
.minus}{/
if
} {
$value
.format_price|
abs
}] </label><br />
<!-- {/
foreach
} -->
替换为:
<!-- {
foreach
from=
$spec
.values item=value key=key} -->
<a {
if
$key
eq 0}
class
=
"cattsel"
{/
if
} onclick=
"changeAtt(this,{$value.id},{$goods.goods_id})"
href=
"javascript:;"
name=
"{$value.id}"
title="[{
if
$value
.price gt 0}{
$lang
.plus}{
elseif
$value
.price
lt 0}{
$lang
.minus}{/
if
} {
$value
.format_price|
abs
}]
">{$value.label}<input style="
display:none"
id=
"spec_value_{$value.id}"
type=
"radio"
name=
"spec_{$spec_key}"
value=
"{$value.id}"
{
if
$key
eq 0}
checked{/
if
} /></a>
<!-- {/
foreach
} -->
第四步:
同样在本文件中 head区添加以下JS代码:
<script type=
"text/javascript"
>
function
changeAtt(t,a,goods_id) {
t.lastChild.checked=
'checked'
;
for
(
var
i = 0; i<t.parentNode.childNodes.length;i++) {
if
(t.parentNode.childNodes[i].className ==
'cattsel'
) {
t.parentNode.childNodes[i].className =
''
;
}
}
t.className =
"cattsel"
;
var
formBuy = document.forms[
'ECS_FORMBUY'
];
spec_arr = getSelectedAttributes(formBuy);
Ajax.call(
'goods.php?act=get_products_info'
,
'id='
+ spec_arr+
'&goods_id='
+ goods_id, shows_number,
'GET'
,
'JSON'
);
changePrice();
}
function
shows_number(result){
if
(result.product_number !=undefined){
//这里我把$换成了document.getElementById,因为ecshop有时候不兼容jquery
//$('shows_number').innerHTML = result.product_number+'件';
document.getElementById(
'shows_number'
).innerHTML = result.product_number+
'件'
;
}
else
{
document.getElementById(
'shows_number'
).innerHTML =
'未设置'
;
//$('shows_number').innerHTML = '未设置';
}
}
</script>
第五步:
打开goods.php ,大约在70行下添加一下代码:
if
(!
empty
(
$_REQUEST
[
'act'
]) &&
$_REQUEST
[
'act'
] ==
'get_products_info'
){
include
(
'includes/cls_json.php'
);
$json
=
new
JSON;
// $res = array('err_msg' => '', 'result' => '', 'qty' => 1);
$spce_id
=
$_GET
[
'id'
];
$goods_id
=
$_GET
[
'goods_id'
];
$row
= get_products_info(
$goods_id
,
explode
(
","
,
$spce_id
));
//$res = array('err_msg'=>$goods_id,'id'=>$spce_id);
die
(
$json
->encode(
$row
));
}
至此,已经可以显示属性库存了,下面解决打开页面默认显示总库存的问题。
仍然在 goods.dwt 文件中查找:
onload =
function
(){
changePrice();
fixpng();
try
{ onload_leftTime(); }
catch
(e) {}
}
修改为:
onload =
function
(){
changePrice();
changeKucun();
//这里是添加的
fixpng();
try
{ onload_leftTime(); }
catch
(e) {}
}
//默认就显示第一个属性库存
function
changeKucun()
{
var
frm=document.forms[
'ECS_FORMBUY'
];
spec_arr = getSelectedAttributes(frm);
Ajax.call(
'goods.php?act=get_products_info'
,
'id='
+ spec_arr+
'&goods_id='
+ goods_id, shows_number,
'GET'
,
'JSON'
);
}
OK了。
选中小图标下载: