您的位置:首页 > 其它

商品分类管理模块基本完成

2017-04-27 17:25 363 查看

无限分类

1.表的变化

所谓无限分类,就是用一张表来实现所有分类,在原来简单分类表的基础上,加了个pid字段,这就是数据表方面的变化。




2.控制器,模型的变化

我们原先的分类是一级的,就是分类下不能再添加分类了,我们现在开始改进,我们首先把想要的无限分类层级数据手动添加到数据库中:pid为0就是顶级分类,然后pid为某值就是某分类下,参考上图理解。
现在我们还按以前的方法,在控制器中像输出所有管理员那样,来获得分类列表,这时候我们会发现,得到的结果不是我们想要的,我们要的是按分类有序排列的列表。
这时候,我们发现控制器这样不够用了,此刻,我终于开始感觉到模型的用处了,(原来的模型啥都不用写,就能完成增删改查,我一直很好奇模型还有什么拓展作用),涉及到数据处理,就用模型来完成。
思路是模型中新增得到树桩分类的方法,然后在控制器中调用模型的那个方法来获得有序的二维数组,不再是我们那个按数据表依次读下来的二维数组了。然后传到视图中,代码如下
犯的几个错误:1.模型里写的方法,在控制器访问,要实例化模型后再访问(除非写的是静态方法) 2.不要用getdata作为模型里的函数名,估计是关键字,会出问题 3.到视图中,怎么把杠杠显示出来,我一开始用的是很low的原始伎俩,就是各个元素用level做class,然后写段js放在页面中,遇到class为啥的就加几个杠杠,蠢哭。查阅资料,发现神技`{$cate['level']|str_repeat="——丨",###}{$cate.cName}`,当然这一切都是建立在模型中level的存在基础上!


模型中
<?php

namespace app\admin\model;

use think\Model;

class Cate extends Model
{
public function gettree(){
$arr=$this->all();
return $this->tree($arr);
}

//定义一个方法,对给定的数组,递归形成树
public function tree($arr,$pid=0,$level=0){
static $tree = array();
foreach($arr as $v){
if($v['pid']==$pid){
//说明找到,保存
$v['level'] = $level;
$tree[] = $v;
//继续找
$this -> tree($arr,$v['id'],$level+1);
}
}
return $tree;
}
}
控制器中
public function categorylist(){
$cate=new Cate;
$cate=$cate->gettree();
return view('categorylist',['cate'=>$cate]);
}
视图中
<tbody>
{volist name="cate" id="cate"}
<tr>
<!--这里的id和for里面的c1 需要循环出来-->
<td><input type="checkbox" id="c1" class="check"><label for="c1" class="label">{$cate.id}</label></td>
<td>{$cate['level']|str_repeat="——丨",###}{$cate.cName}</td>
<td align="center">
<input type="button" value="修改" class="edit2 btn" info="{:url('admin/category/edit')}"><!--info好像没用上-->
<input type="button" value="删除" class="del btn" info="{:url('admin/category/del')}"><!--info好像没用上,用上咯-->
</td>
</tr>
{/volist}
<tr><td colspan="4"></td></tr>
</tbody>


添加分类

主要就是在添加分类的视图中,增加一个上级分类,然后就是把分类列表传到下拉菜单中


public function add(){
if(request()->isPost()){
$catename=input('catename');
$upcateid=input('upcateid');
$cate=new Cate;
$cate->cName=$catename;
$cate->pid=$upcateid;
if($cate->save()){
return '分类:'.$catename.'新增成功!'.'<br>'
4000
.
'<a class="ajax" info="'.url('admin/category/add').'">继续新增</a>'.'|'.'<a class="ajax" info="'.url('admin/category/categorylist').'">返回分类列表</a>';
}else{
return $cate->getError();
}
}else{
$cate=new Cate;
$cate=$cate->gettree();
return view('add',['cate'=>$cate]);
}
}


然后点击提交的时候,要把select中选定的option中的id传去作为新增分类的pid

视图中
<td>
<select id="downlist" style="width:200px;">
<option>顶级分类 </option>
{volist name="cate" id="cate"}
<option value="{$cate.id}">{$cate['level']|str_repeat="——丨",###}{$cate.cName}</option>
{/volist}
</select>
</td>
jquery中
//新增分类提交
$(document).on('click','.submit3',function(){
var catename=$('#catename').val();
var upcateid=$('#downlist').val();
$.post("/lolnews/public/admin/category/add.html",
{'catename':catename,'upcateid':upcateid},
function(data){
$('#ajaxshow').html(data);
})
return false;
});


无限分类基本完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  无限分类