属性值的添加和展示
也就是货品列表
点击货品列表进入下图展示
规格属性值的展示代码如下(展示页面)
<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属性添加失败');
}
}
要添加是有价格、库存等等。。。他们的键值都一样所以循环一样就行了
代码思路:接受所有的值 打印之后如下
接受数组里的数据,进行循环处理成(方便入库,进行添加)