属性规格表(展示和添加) sku

 属性值的添加和展示

也就是货品列表

属性规格表(展示和添加) sku_第1张图片

点击货品列表进入下图展示

属性规格表(展示和添加) sku_第2张图片

 规格属性值的展示代码如下(展示页面)

{volist name="arr" id="v"} {/volist}
规格组合 货号: 市场价: 本店价: 库存数量:
{$v.name}

 控制器(展示的方法)

 

value表是属性值的表

属性规格表(展示和添加) sku_第3张图片

 //属性值的列表
    public function attr_list()
    {
        //要查询的那一条的商品ID
        $id=input('get.id');
        $user=new Value();
        //查询属性值表 里面的商品id和传值接过来的值一样的id 的数据
        $res=$user::where('goods_id',$id)->select();
        //对规格值进行处理
        $result=[];
        foreach($res as $k=>$v){
            $result[$v['attr_id']][]=$v['value_id'];
            //属性id与对应的属性值
            $value[$v['value_id']]=$v['value_name'];
        }
        //print_r($result);die;

        //进行递归遍历
        $result=$this->digui($result);
       // print_r($result);die;
        //将排序好的值进行id与值的匹配
        $rs=[];
        foreach($result as $k=>$v){
            //取出id
            $arr['ids']=$v;
            $name=[];
            //将id拼接成数组
            $idarr=explode(',',$v);
            foreach($idarr as $kk => $vv){
                $name[]= $value[$vv];
            }
            $arr['name']=implode(',',$name);
            //货号
            $arr['number']=time()+$k;
            $rs[]=$arr;
        }
        return view('goods/attr_list',['arr'=>$rs,'id'=>$id]);
    }

    //递归
    private function digui($arr){
        if(count($arr)>=2){
            $a=array_shift($arr);
            $b=array_shift($arr);
            foreach($a as $k=>$v){
                foreach($b as $kk=>$vv){
                    $list[]=$v.','.$vv;
                }
            }
            if(!$arr){
                return $list;
            }
            array_unshift($arr,$list);
            $arr = $this->digui($arr);
        }
        return $arr;
    }

代码的思路:

结果商品的id 

print_r($result)的结果是:
5,6是属性值的属性(颜色,大小)  5,6里面的数组是该属性的属性值  
(9,10)黄色,红色       
(11,12)13寸,14寸

属性规格表(展示和添加) sku_第4张图片()

 print_r($value)的结果是:查询出该属性的属性值名称

属性规格表(展示和添加) sku_第5张图片

 然后调用递归,将数组分组成(排列组合)打印的是递归返回的数据print_r($result)结果如下

将(9,10)和(11,12)进行排列组合,结果如下如所示

属性规格表(展示和添加) sku_第6张图片

 在循环递归放回值$result,也就是上面的数组进行循环,在截取下逗号(变量为$idarrr),

再循环$idarr,进行循环赋值,循环完拼接成属性值的名称就是$arr[]'name=implode(',',$name)

得到属性值的名称,在随机一个货物的编号,然后返回渲染

 

属性值添加:点击确定实现添加功能代码如下(表单的展示还是上面HTML的代码)

属性规格表(展示和添加) sku_第7张图片

 添加功能(方法)

  /**
     * 规格属性表的添加 (sku)
     */
    public function sku()
    {
        //接受数组
        $data=input('post.');
        //取出数组里对应的值
        //商品id
        $goods_id=$data['goods_id'];
        //规格名称
        $value_name=$data['value_name'];
        //货号
        $goods_number=$data['goods_number'];
        //市场价
        $goods_price=$data['goods_price'];
        //本店价
        $goods_self=$data['goods_self'];
        //库存
        $goods_num=$data['goods_num'];
        //规格id的组合
        $group_id=$data['group_id'];

        //定义一个空数组
        $list=[];
        foreach($value_name as $k=>$v){
            $list[$k]['goods_id']=$goods_id;
            $list[$k]['group_id']=$group_id[$k];
            $list[$k]['value_name']=$value_name[$k];
            $list[$k]['goods_number']=$goods_number[$k];
            $list[$k]['goods_self']=$goods_self[$k];
            $list[$k]['goods_num']=$goods_num[$k];
            $list[$k]['goods_price']=$goods_price[$k];
        }

        $user=new Sku();
        //商品已有的sku
        $user->where('goods_id',$goods_id)->delete();
        $res=$user->saveAll($list);
        if($res){
            $this->success('sku属性添加成功','goods/goods_list');
        }else{
            $this->error('sku属性添加失败');
        }
    }

要添加是有价格、库存等等。。。他们的键值都一样所以循环一样就行了

代码思路:接受所有的值  打印之后如下

属性规格表(展示和添加) sku_第8张图片

 接受数组里的数据,进行循环处理成(方便入库,进行添加)

属性规格表(展示和添加) sku_第9张图片

你可能感兴趣的:(属性规格表(展示和添加) sku)