1. 程式人生 > >屬性規格表(展示和新增) sku

屬性規格表(展示和新增) sku

 屬性值的新增和展示

也就是貨品列表

點選貨品列表進入下圖展示

 規格屬性值的展示程式碼如下(展示頁面)

<form enctype="multipart/form-data" action="{:url('goods/sku')}" method="post" name="theForm">
            <!-- 通用資訊 -->
            <table width="90%" id="general-table" align="center" style="display: table;">
                <tbody>
                <tr>
                    <input type="hidden" name="goods_id" value="{$id}">
                    <td>規格組合</td>
                    <td>貨號:</td>
                    <td>市場價:</td>
                    <td>本店價:</td>
                    <td>庫存數量:</td>
                </tr>
                {volist name="arr" id="v"}
                <tr>
                    <td>{$v.name}</td>
                    <input type="hidden" name="group_id[]" value="{$v.ids}">
                    <input type="hidden" name="value_name[]" value="{$v.name}">
                    <td><input type="text" name="goods_number[]" value="{$v.number}"></td>
                    <td><input type="text" name="goods_price[]" value="1314"></td>
                    <td><input type="text" name="goods_self[]" value="520"></td>
                    <td><input type="text" name="goods_num[]" value="99"></td>
                </tr>
                {/volist}
                </tbody></table>
            <div class="button-div">
                <input type="submit" value=" 確定 " class="button">
                <input type="reset" value=" 重置 " class="button">
            </div>
        </form>

 控制器(展示的方法)

value表是屬性值的表

 //屬性值的列表
    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寸

()

 print_r($value)的結果是:查詢出該屬性的屬性值名稱

 然後呼叫遞迴,將陣列分組成(排列組合)列印的是遞迴返回的資料print_r($result)結果如下

將(9,10)和(11,12)進行排列組合,結果如下如所示

 在迴圈遞迴放回值$result,也就是上面的陣列進行迴圈,在擷取下逗號(變數為$idarrr),

再迴圈$idarr,進行迴圈賦值,迴圈完拼接成屬性值的名稱就是$arr[]'name=implode(',',$name)

得到屬性值的名稱,在隨機一個貨物的編號,然後返回渲染

屬性值新增:點選確定實現新增功能程式碼如下(表單的展示還是上面HTML的程式碼)

 新增功能(方法)

  /**
     * 規格屬性表的新增 (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屬性新增失敗');
        }
    }

要新增是有價格、庫存等等。。。他們的鍵值都一樣所以迴圈一樣就行了

程式碼思路:接受所有的值  列印之後如下

 接受數組裡的資料,進行迴圈處理成(方便入庫,進行新增)