商品列表和详情

 //分类下的商品列表
    public function goodsList($id=0)
    {
        //接收参数
        $keywords = input('keywords');
        if(empty($keywords)){
            //获取指定分类下商品列表
            if(!preg_match('/^\d+$/', $id)){
                $this->error('参数错误');
            }
            //查询分类下的商品
            $list = \app\common\model\Goods::where('cate_id', $id)->order('id desc')->paginate(10);
            $arr['current_page'] = $list->currentPage();//当前页
            $arr['prev_page'] = $list->currentPage() -1 <= 1 ? 1 : $list->currentPage()-1;
            $arr['next_page'] = $list->currentPage() +1 >= $list->lastPage() ? $list->lastPage() : $list->currentPage()+1;
            $arr['last_page'] = $list->lastPage();
            $arr['data'] = $list->items();
            // dump($list);die();
            //查询分类名称
            $category_info = \app\common\model\Category::find($id);
            $cate_name = $category_info['cate_name'];
        }else{
            try{
                $page = input('page',1);//页码
                $size = 10;//每页显示条数
                $limit = ($page-1)*$size;//偏移量
                $client = ClientBuilder::create()->build();
                $params = [
                    'index' => 'goods',
                    //'type' => '_doc',
                    'body' => [
                        'query' => [
                            'match' => [
                                'goods_name' => $keywords
                            ]
                        ],
                        'highlight' => [
                            'pre_tags' => ["<span style='color: red'>"],
                            'post_tags' => ["</span>"],
                            'fields' => [
                                "goods_name" => new \stdClass()
                            ]
                        ]
                    ]
                ];
                $params["size"] = $size;
                $params["from"] = $limit;
                //搜索
                $results = $client->search($params);
                foreach ($results['hits']['hits'] as $k => $v){
                    $results['hits']['hits'][$k]['_source']['goods_name'] = $v['highlight']['goods_name'][0];
                }
                $list = array_column($results['hits']['hits'], '_source');
                $arr['current_page'] = $page;//当前页
                $last_page = ceil($results['hits']['total']['value']/$size);
                $arr['last_page'] = $last_page;
                $arr['prev_page'] = $page -1 <= 1 ? 1 : $page - 1;
                $arr['next_page'] = $page +1 >= $last_page ? $last_page : $page+1;
                $arr['data'] = $list;
                $cate_name = $keywords;
            }catch (\Exception $e){
                dump($e->getMessage());
            }
        }
        return view('goods/list', ['list' => $arr, 'cate_name' => $cate_name]);
    }
{foreach $list.data as  $k=>$v}  
<li class="yui3-u-1-5">     //根据查到的商品信息循环展示商品数据
   <div class="list-wrap">
      <div class="p-img">
         <a href="{:url('goods/goodsItem')}?id={$v.id}">
            <img src="{$v.goods_logo}" />
         </a>
      </div>
      <div class="price">
         <strong><em>¥</em><i>{$v.goods_price}</i></strong>
      </div>
      <div class="attr"><em >{$v.goods_name}</em></div>
      <div class="commit"><i class="command">已有{$v.comments_num}人评价</i></div>
      <div class="operate"><a href="success-cart.html" target="_blank" class="sui-btn btn-bordered btn-danger">加入购物车</a>
      </div></div>
</li>{/foreach}

	<div class="fr page">
				<div class="sui-pagination pagination-large">
					<a href=" ?page=1&keywords={$Request.get.keywords}">首页</a>
					<a href=" ?page={$list.prev_page}&keywords={$Request.get.keywords}">上一页</a>
					{for start="1" end="$list.last_page+1"}
					<a href=" ?page={$i}&keywords={$Request.get.keywords}">第{$i}页</a>
					{/for}
					<a href=" ?page={$list.next_page}&keywords={$Request.get.keywords}">下一页</a>
					<a href=" ?page={$list.last_page}&keywords={$Request.get.keywords}">尾页</a>
				</div>
			</div>
public function goodsItem2($id){
        $goodsItem = \app\common\model\Goods::with('goods_images,spec_goods')->find($id);
        $goodsItem['goods_attr'] = json_decode($goodsItem['goods_attr'],true);
        $value_ids = array_unique(explode('_',implode('_',array_column($goodsItem['spec_goods']->toArray(),'value_ids'))));
        $spec_value = SpecValue::with('spec')->where('id','in',$value_ids)->select();
        $res = [];
        foreach ($spec_value as $K=>$v){
            $res[$v['spec_id']] = [
              'spec_id' => $v['spec_id'],
                'spec_name' => $v['spec_name'],
                'spec_values' => [],
            ];
        }
        foreach ($spec_value as $k=>$v){
            $res[$v['spec_id']]['spec_values'][] = $v;
        }
        $value_ids_map = [];
        foreach ($goodsItem['spec_goods'] as $k=>$v){
            $row = [
              'id'=>$v['id'],
                'price'=>$v['price'],
            ];
            $value_ids_map[$v['value_ids']] = $row;
        }
        $value_ids_map = json_encode($value_ids_map);
        $goodsItem['spec_goods'] = $res;
        $Cookie = Cookie::get("record"); //获取浏览历史
        if (!isset($Cookie)){ //判断浏览历史是否存在或设置
            $arr[0] = $id;
            Cookie::set("record",$arr,["expire"=>315360000]);
        }else{
            $arr = $Cookie;
            $newData = $id;
            if ( count($arr) >= 5){ //是否大于五条浏览记录
                unset($arr[0]); //删除第一条数据
                $arr = array_values($arr); //重新排序数组下标
            }
            foreach ($arr as $key => $value){ //判断重复就删除
                if ($value == $newData){
                    unset($arr[$key]);
                }
                $arr = array_values($arr);
            }
            $arr[] = $newData;
            Cookie::set("record",$arr,["expire"=>315360000]);
        }
        return  view('Goods/item',['goodsItem'=>$goodsItem,'specs'=>$res,'value_ids_map'=>$value_ids_map]);
    }
 
//商品详情页商品加一减一JQ
$('.plus').click(function () {
          var c_num=Number($(this).next().val())
   c_num++
   $(this).next().val(c_num);
})
$('.mins').click(function () {
   var c_num=Number($(this).prev().val())
   var num=c_num-1<=1 ? 1 : c_num-1
   $(this).prev().val(num);
})
//规格选择
<div id="specification" class="summary-wrap clearfix">
   <!-- 规格信息 -->
   {foreach $specs as $k=>$v}
   <dl>
      <dt><div class="fl title"><i>{$v.spec_name}</i></div></dt>
      {foreach $v['spec_values'] as $key=>$val}
      {if ($key==0)}
      <dd><a spec_goods_id="{$val.id}" href="javascript:;" class="selected">{$val.spec_value}<span title="点击取消选择">&nbsp;</span></a></dd>
      {else/}
      <dd><a spec_goods_id="{$val.id}" href="javascript:;">{$val.spec_value}<span title="点击取消选择">&nbsp;</span></a></dd>
      {/if}
      {/foreach}
   </dl>
   {/foreach}
</div>
$(function(){
   var value_ids_map = {$value_ids_map};
   $('#specification').find('a').click(function () {
         $(this).closest('dl').find('a').removeClass('selected');
         $(this).addClass('selected');
         var value_ids='';
         $('.selected').each(function (i,v) {
             value_ids+=$(v).attr('spec_goods_id')+'_';
     })
      value_ids=value_ids.slice(0,-1);
         var spec_goods_price = value_ids_map[value_ids].price;
      console.log(spec_goods_price);
         $('#goods_price').html(spec_goods_price);
   })

添加商品进购物车

$('#addshopcar').click(function(){
   var value_ids = '';
   $('.selected').each(function(i,v){
      value_ids += $(v).attr('spec_goods_id') + '_';
   });
   value_ids = value_ids.slice(0, -1);
   var spec_goods_id = value_ids_map[value_ids] ? value_ids_map[value_ids].id : '';
   $('input[name=spec_goods_id]').val(spec_goods_id);
   var number = $('#number').val();
   $('input[name=number]').val(number);
   $('form').submit();
});
})
隐藏表单传递数据到购物车
<form action="{:url('Cart/addCart')}" method="POST" style="display: none">
   <input type="hidden" name="goods_id" value="{$goodsItem->id}">
   <input type="hidden" name="spec_goods_id">
   <input type="hidden" name="number">
</form>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值