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;} .catta{border:#7E7E7E1pxsolid;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;} .catta:hover{border:#ED00362pxsolid;margin:-1px;margin-left:4px;margin-top:5px;} .catta:focus{outline-style:none;} .catt.cattsel{border:#ED00362pxsolid;margin:-1px;background:url("images/test.gif")no-repeatbottomright;margin-left:4px;margin-top:5px;} .catt.cattsela:hover{border:#ED00362pxsolid;margin:-1px;background:url("images/test.gif")no-repeatbottomright;}
第三步:
打开goods.dwt文件 替换循环文件
查找:
<!--{foreachfrom=$spec.valuesitem=valuekey=key}--> <labelfor="spec_value_{$value.id}"> <inputtype="radio"name="spec_{$spec_key}"value="{$value.id}" id="spec_value_{$value.id}"{if$keyeq0}checked{/if}onclick="changePrice()"/> {$value.label}[{if$value.pricegt0}{$lang.plus}{elseif$value.pricelt0} {$lang.minus}{/if}{$value.format_price|abs}]</label><br/> <!--{/foreach}-->
替换为:
<!--{foreachfrom=$spec.valuesitem=valuekey=key}--> <a{if$keyeq0}class="cattsel"{/if}onclick="changeAtt(this,{$value.id},{$goods.goods_id})" href="javascript:;"name="{$value.id}"title="[{if$value.pricegt0}{$lang.plus}{elseif$value.price lt0}{$lang.minus}{/if}{$value.format_price|abs}]">{$value.label}<inputstyle="display:none" id="spec_value_{$value.id}"type="radio"name="spec_{$spec_key}"value="{$value.id}"{if$keyeq0} checked{/if}/></a> <!--{/foreach}-->
第四步:
同样在本文件中 head区添加以下JS代码:
<scripttype="text/javascript"> functionchangeAtt(t,a,goods_id){ t.lastChild.checked='checked'; for(vari=0;i<t.parentNode.childNodes.length;i++){ if(t.parentNode.childNodes[i].className=='cattsel'){ t.parentNode.childNodes[i].className=''; } } t.className="cattsel"; varformBuy=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(); } functionshows_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=newJSON; //$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){} } //默认就显示第一个属性库存 functionchangeKucun() { varfrm=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了。
本文收集于互联网,由 本站 整理编辑,不代表 本站 对观点赞同或支持。如果有侵权、不妥之处,请联系我们删除。敬请谅解!
© 版权声明
THE END