//分类下的商品列表
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="点击取消选择"> </span></a></dd>
{else/}
<dd><a spec_goods_id="{$val.id}" href="javascript:;">{$val.spec_value}<span title="点击取消选择"> </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>