用php实现下面的功能,方法:数据库表的合理设计+递归
1.业务逻辑
(1)表结构
分类表
字段:cat_id、cat_name、cat_desc、、、parent_id(ps:每个分类的上一级分类)
(2)商品分类功能具体分析
分类控制器:CategoryController.class.php
分类模型: CategoryModel.class.php
curd(具体增、删、改、查):
添加分类:1.显示分类表单 2.接收数据插入数据库
修改分类表单:1.显示修改表单 2.接收更新数据插入数据库
删除:一步操作,直接删除
关键代码实现如下:
分类模型
<pre>
<?php
//商品分类模型
class CategoryModel extends Model{
//获取所有分类
public function getCats(){
$sql="select * from {$this->table}";
$cats=$this->db->getAll($sql);
return $this->tree($cats);
}
//对所有获取的分类重新排序
function tree($arr,$pid=0,$level=0)
{
static $res=array();
foreach ($arr as $v)
{
if($v['parent_id']==$pid)
{
$v['level']=$level;
$res[]=$v;
$this->tree($arr,$v['cat_id'],$level+1);
}
}
return $res;
}
}
?>
</pre>
分类控制器模型
<pre>
<?php
后台商品分类管理
class CategoryController extends Controller{
//显示分类
public function indexAction(){
include CUR_VIEW_PATH.'cat_list.html';
}
//添加分类,1.显示添加表单 2.接收数据插入到数据库
public function addAction(){
//获取所有分类
$CategoryModel=new CategoryModel('category');
$cats=$this->getCats();
include CUR_VIEW_PATH.'cat_add.html';
}
public function insertAction(){
//1.接收数据 ?以什么形式收集
$date['cat_name']=trim($_POST['cat_name']);
$date['parent_id']=$_POST['parent_id'];
$date['unit']=$_POST['unit'];
$date['sort_order']=$_POST['sort_order'];
$date['cat_des']=trim($_POST['cat_des']);
$date['is_show']=$_POST['is_show'];
//2.验证接收到的数据和处理
if($date['cat_name']===''){
$this->jump('index.php?p=admin&c=category&a=add','分类名称不能为空');
}
//调用模型插入数据库并给出提示
$categoryModel=new CategoryModel('category');
if($categoryModel->insert($date)){
$this->jump('index.php?p=admin&c=category&a=index','success');
}else{
$this->jump('index.php?p=admin&c=category&a=add','fail');
}
}
}
?>
</pre>
视图
<pre>
<tr>
<td class="label">上级分类:</td>
<td>
<select name="parent_id">
<option value="0">顶级分类</option>
<?php foreach ($cats as $cat) :?>
<option value="<?php echo $cat['cat_id'];?>">
<?php echo str_repeat(" ", $cat['level']);?>
<?php echo $cat['cat_name'];?>
</option>
<?php endforeach;?>
</select>
</td>
</tr>
</pre>
积累函数:trim() 去掉空白 str_repeat(' ',n) 重复前面的内容n次
积累快捷键:ctrl+shift+D 快速复制一行,ctrl+D 选中相同的,相同东西同时修改
2333第一次用简书写东西,代码框,插图搞了半天、、、
代码框:pre
插图:七牛很好用哦!img标签引入即可
近期打算,尽快用git,把源码托管到上面
网友评论