静态商品专题页面+动态显示价格及库存信息
前两天工作中需要做一个商品的专题页面,需求:当商品下架或库存为0时提示'商品已售罄',没有此商品时提示'商品不存在',正常情况下显示商品价格[登陆后若是会员则显示会员价]
效果图:
html页面代码:
1 //因商品及价格摆放不规则故采用map标签 2 3 <ul class="list"> 4 <li> 5 <img src="themes/mall/default/images/event/star/baileng1.jpg" usemap="#text1" target="_blank" alt="白领气质范"/> 6 <map name="text1" id="text1"> 7 <area shape="rect" coords="36,20,165,263" href ="http://www.maynear.com/index.php?app=goods&id=8745" target="_blank" /> 8 <area shape="rect" coords="208,83,309,205" href ="http://www.maynear.com/index.php?app=goods&id=8746" target="_blank" /> 9 10 <area shape="rect" coords="380,30,536,185" href ="http://www.maynear.com/index.php?app=goods&id=8747" target="_blank" /> 11 <area shape="rect" coords="446,192,558,412" href ="http://www.maynear.com/index.php?app=goods&id=8748" target="_blank" /> 12 13 <area shape="rect" coords="722,34,872,175" href ="http://www.maynear.com/index.php?app=goods&id=8749" target="_blank" /> 14 <area shape="rect" coords="835,180,905,415" href ="http://www.maynear.com/index.php?app=goods&id=8750" target="_blank"/> 15 </map> 16 <span class="bl blsp1" goods_id="8745">loading...</span> 17 <span class="bl blsp2" goods_id="8746">loading...</span> 18 <span class="bl blsp3" goods_id="8747">loading...</span> 19 <span class="bl blsp4" goods_id="8748">loading...</span> 20 <span class="bl blsp5" goods_id="8749">loading...</span> 21 <span class="bl blsp6" goods_id="8750">loading...</span> 22 </li> 23 </ul>
php方法:getGoodsInfoByIDs()根据商品ID获取商品详细信息并以json格式返回,若传过去的商品ID不存在则不会返回此ID相关的信息
//根据ID列表获得商品信息 public function getGoodsInfoByIDs() { $ids = $_POST[ 'ids' ]; if( $ids ) { $sql = "SELECT goods_id, retail_price, wholesale_price ,(select sum( stock ) from shang_goods_spec as b where a.goods_id = b.goods_id ) as stock ,if_show FROM shang_goods as a WHERE goods_id IN ( $ids ) AND closed = 0 AND sale_type > 0"; $data = $this->getAll( $sql ); echo json_encode( $data ); } }
JS:
1 <script type="text/javascript"> 2 //获取专题页面中所有商品ID[获取span元素的goods_id属性值] 3 function getGoodsIDs() { 4 var ids = []; 5 $( 'span[goods_id]' ).each( function() { 6 ids.push( $( this ).attr( 'goods_id' ) ); 7 } ); 8 return ids; 9 } 10 11 //根据goodsID返回对应的span标签 12 function getPriceSpan( goodsID ) { 13 return $( 'span[goods_id="'+ goodsID +'"]' ); //返回属性goods_id是某个特定值的span元素 14 } 15 16 /** 17 * @superSet 所有参加活动的goodsID [既AJAX请求所传递参数] 18 * @subSet AJAX请求响应的goodsID 19 * @返回数组:不存在的goodsID 20 */ 21 function searchNotExistsID( superSet, subSet ) { 22 var hash = {}; 23 for( var i = 0; i < superSet.length; i++ ) { 24 hash[ superSet[ i ] ] = 'exists'; 25 } 26 for( var i = 0; i < subSet.length; i++ ) { 27 if( hash[ subSet[ i ] ] ) { 28 delete hash[ subSet[ i ] ]; //若存在则删除对象元素 29 } 30 } 31 var result = []; 32 for( var key in hash ) { 33 result.push( key ); 34 } 35 return result; 36 } 37 38 39 40 seajs.use( 'common', function( common ) { 41 var islogin = common.islogin(); //是否登陆 42 var ids = getGoodsIDs(); //所有goodsID 43 var ajaxOption = new Object; 44 ajaxOption.url = 'index.php?app=goods&act=getGoodsInfoByIDs'; 45 ajaxOption.dataType = 'JSON'; 46 ajaxOption.type = 'POST'; 47 ajaxOption.data = { ids: ids.join( ',' ) } //以,隔开的字符串 48 ajaxOption.success = function( response ) { 49 var subSet = []; 50 for( var i = 0; i < response.length; i++ ) { 51 subSet.push( response[ i ].goods_id ); //subSet AJAX返回的goodsID[一维数组] 52 53 var item = response[ i ]; 54 var spanEl = getPriceSpan( item.goods_id ); //根据goodsID返回对应的span元素 55 if( item.stock > 0 && item.if_show == 1) { 56 if( islogin ) { 57 spanEl.html( '¥' + item.wholesale_price ); //若登陆则显示会员价 58 } else { 59 spanEl.html( '¥' + item.retail_price ); 60 } 61 } else { 62 spanEl.html( '商品已售罄' ); 63 } 64 } 65 66 67 //处理未找到的商品 68 var notFound = searchNotExistsID( ids, subSet ); 69 for( var i = 0; i < notFound.length; i++ ) { 70 getPriceSpan( notFound[ i ] ).html( '商品不存在' ); 71 } 72 73 74 } //success function end 75 76 77 $.ajax( ajaxOption ); 78 } ); 79 80 81 </script>
posted on 2014-05-04 17:12 chengyanfen 阅读(1341) 评论(0) 编辑 收藏 举报