电商----货品组合(详情页展示)

数据处理成为一下格式:

Array
(
    [goods_id] => 1
    [goods_name] => 三星(SAMSUNG) W2016双卡双待 4G手机 尊贵金 4G标配版
    [attr] => Array
        (
            [70] => Array
                (
                    [attr_name] => 颜色
                    [attr_value] => Array
                        (
                            [0] => Array
                                (
                                    [attr_value] => 土豪金
                                    [goods_attr_id] => 3
                                )

                            [3] => Array
                                (
                                    [attr_value] => 金属黑
                                    [goods_attr_id] => 6
                                )

                        )

                )

            [72] => Array
                (
                    [attr_name] => 选择版本
                    [attr_value] => Array
                        (
                            [1] => Array
                                (
                                    [attr_value] => 双网通
                                    [goods_attr_id] => 4
                                )

                            [2] => Array
                                (
                                    [attr_value] => 全网通
                                    [goods_attr_id] => 5
                                )

                        )

                )

        )

)

控制器层处理

public function product()
    {
    	header('content-type:text/html;charset=utf-8');
    	$id= Request::instance()->get('id');
    	$pro = Db::table('goods')
    	->alias('a')
    	->where(['a.goods_id'=>$id])
    	->join('goods_attr b','a.goods_id = b.goods_id')
    	->join('attribute c','b.attr_id = c.attr_id')
    	->select();
    	
    	$arr=[];
    	foreach($pro as $key => $val)
    	{
    		static $i=0;
    		$arr['goods_id'] 		= $val['goods_id'];
    		$arr['goods_name']		= $val['goods_name'];
    		$arr['attr'][$val['attr_id']]['attr_name'] = $val['attr_name'];
    		$arr['attr'][$val['attr_id']]['attr_value'][$i]['attr_value']	= $val['attr_value'];
    		$arr['attr'][$val['attr_id']]['attr_value'][$i]['goods_attr_id']	= $val['goods_attr_id'];
    		$i++;
    	}
    	print_r($arr);die;
    	$this->assign('arr',$arr);
    	return view('product');
    }

视图层处理

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Document</title>
</head>
<style>
	.out{
		border: 1px dashed #d6d6d8;
	    color: #cdcdcd;
	    cursor: not-allowed;
	    margin: 0;
	}
	.che{
		border: 2px solid #be0106;
    	margin: -1px;
	}
</style>
<body>
	<table>
		<tr>
			<td>商品名称</td>
			<td>{$arr['goods_name']}</td>
		</tr>
		<tr>
			<td>商品价格</td>
			<td>520</td>
		</tr>
		{volist name="arr['attr']" id="arr"}
		<tr class="len">
			<td>{$arr['attr_name']}</td>
			<td>
				{volist name="arr['attr_value']" id="val"}
					<span class="r" spec="{$val['goods_attr_id']}">{$val['goods_attr_id']}{$val['attr_value']}</span>
				{/volist}
			</td>
		</tr>
		{/volist}
	</table>
</body>
</html>
<script src="__PUBLIC__jquery.1.12.min.js"></script>
<script>
$(function(){
	var exist_arr =[]; //存在组合的货品,把不存在的框变为不可选
	var tmp_arr;//值变数组,判断是否有类型
	var now_checked = [];//同级元素
	var check_group = ['3,4','5,6','3,6','6,4'];//本商品的全部单品
	// var check_group = ['41,40','41,38']
	var all_spec = $('.r');
	check_no_spec(all_spec,check_group)
	$(".r").click(function(){
		
		var _this = $(this);
		var id = _this.attr('spec');

		//判断是否是不可点的属性
		if(_this.hasClass("out"))
		{
			return false;
		}else{
			add_red(_this)
			now_checked = checked_group_spec(_this);
			exit_spec = check_spec(id,check_group);
			console.log(now_checked)
			console.log(exit_spec)
	        for(var j=0;j<all_spec.length;j++){
				if($.inArray($(all_spec[j]).attr('spec'),now_checked)>=0){

				}else if($.inArray($(all_spec[j]).attr('spec'),exit_spec)>=0){
					$(all_spec[j]).hasClass('out')?$(all_spec[j]).removeClass('out'):'';
				}else{
					
					$(all_spec[j]).hasClass('out')?$(all_spec[j]).removeClass('out'):$(all_spec[j]).addClass('out');
				}
			}				
		}
	})
	//本商品全部属性
	function goods_spec()
	{
		var r = $(".r");
		var tmp_arr = [];
		for(var i=0;i<r.length;i++)
		{
			tmp_arr.push(r.eq(i).attr('spec'));
		}
		return tmp_arr;
	}

	//页面加载检测是否有不存在的数据
	function check_no_spec(all_arr,yet_spec)
	{
		//将组合属性拆分
		var tmp_yet_spec = [];
		for(var i=0;i<yet_spec.length;i++)
		{
			//临时数组
			
			var tmp_arr = [];
			tmp_arr = yet_spec[i].split(',');
			for(var b=0;b<tmp_arr.length;b++)
			{
				tmp_yet_spec.push(tmp_arr[b])
			}
		}
		
		//循环所有货品属性,查看是否存在本商品已有属性中
		for(var i=0;i<all_arr.length;i++)
		{
			if($.inArray($(all_arr[i]).attr('spec'),tmp_yet_spec)<0)
			{
				$(all_arr[i]).addClass('out')
			}
		}
	}
	//add  red
	function add_red(_this)
	{
		if(_this.siblings().hasClass("che"))
		{
			_this.siblings().removeClass("che")
			cancel(_this)
		}else{
			cancel(_this)
		}
	}

	//选中&取消选中
	function cancel(_this)
	{
		if(_this.hasClass('che'))
		{
			_this.removeClass('che')
		}else{
			_this.addClass("che")
		}
	}

	//存在组合的货品,把不存在的框变为不可选
	function remove_class()
	{
		var _this = $(".r");
		for(var i=0;i<_this.length;i++)
		{
			// alert(exist_arr)
			// 对象_this.eq(i)   数组_this.[i]
			if($.inArray(_this.eq(i).attr('spec'),exist_arr)<0)
			{
				_this.eq(i).addClass("out");
			}
		}
	}

	//存在的组合货品
	function check_spec(id,check_group)
	{
		var tmp_exist = [];
		//循环所有货品
		for(var i=0;i<check_group.length;i++)
		{
			//将单个货品分割成数组
			tmp_arr = check_group[i].split(',');
			
			if($.inArray(id,tmp_arr)>=0)
			{
				for(var b=0;b<tmp_arr.length;b++)
				{
					if(id!=tmp_arr[b])
					{
						tmp_exist.push(tmp_arr[b])
					}
				}
			}
		}
		return tmp_exist;
	}

	//已选择的规格
	function checked_group_spec($val)
	{
		var temp_spec = [];
		$data = $val.parent().children();
		
		for(var i=0;i<$data.length;i++){
			temp_spec.push($($data[i]).attr('spec'))
		}
		return temp_spec;
	}
})
</script>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值