屬性規格表(展示和新增) sku
阿新 • • 發佈:2019-02-06
屬性值的新增和展示
也就是貨品列表
點選貨品列表進入下圖展示
規格屬性值的展示程式碼如下(展示頁面)
<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屬性新增失敗');
}
}
要新增是有價格、庫存等等。。。他們的鍵值都一樣所以迴圈一樣就行了
程式碼思路:接受所有的值 列印之後如下
接受數組裡的資料,進行迴圈處理成(方便入庫,進行新增)