标签:extend inno model foreach table cti php array auto
商品管理需求分析
1、实现商品无限级分类管理【类似京东三级分类】
2、添加商品时要指定商品属于一个主分类和多个扩展分类【扩展分类可以是其他主分类】
3、商品列表中可以根据分类搜索商品
a) 搜索一个分类小的商品时,这个分类所有子分类下的商品也应该被搜索出来
b) 搜索时要考虑商品的主分类和扩展分类
无限级的商品分类
思路:递归打印树形结构;递归查找分类所有子分类【以便删除时使用】
1、建表
drop table if exists p39_category; create table p39_category( id mediumint unsigned not null auto_increment comment ‘Id‘, cat_name varchar(30) not null comment ‘分类名称‘, parent_id mediumint unsigned not null default ‘0‘ comment ‘上级分类id,0:顶级分类‘, primary key(id) )engine=InnoDB default charset=utf8 comment ‘分类‘;
2、创建模型CategoryModel.class.php,会用到两种递归函数
注:模型类中要设置添加/修改时允许接收的的字段,和验证字段
//添加调用create方法允许接收的字段 protected $insertFields = array(‘cate_name‘, ‘parent_id‘); //修改调用create方法允许接收的字段 protected $updateFields = array(‘id‘, ‘cate_name‘, ‘parent_id‘); protected $_validate = array( array(‘cat_name‘, ‘require‘, ‘分类名称不能为空!‘, 1, ‘regex‘, 3), );
<?php namespace Admin\Model; use Think\Model; class CategoryModel extends Model { //添加调用create方法允许接收的字段 protected $insertFields = array(‘cate_name‘, ‘parent_id‘); //修改调用create方法允许接收的字段 protected $updateFields = array(‘id‘, ‘cate_name‘, ‘parent_id‘); protected $_validate = array( array(‘cat_name‘, ‘require‘, ‘分类名称不能为空!‘, 1, ‘regex‘, 3), ); //递归函数一:找一个分类所有子分类的ID【用于给出某id号,获取其子分类】 public function getChildren($catId) { //取出所有的分类 $data = $this->select(); //递归从所有的分类中挑选出子分类的ID return $this->_getChildren($data, $catId, TRUE); } /*****递归从数据中找子分类*****/ private function _getChildren($data, $catId, $isClear = FALSE) { static $_ret = array(); //保存找到的子分类的ID if($isClear) //设标记清零,防止静态变量存储有数据 $_ret = array(); //循环所有分类找子分类 foreach ($data as $k => $v) { if($v[‘parent_id‘] == $catId) { $_ret[] = $v[‘id‘]; //再找这个$v的子分类 $this->_getChildren($data, $v[‘id‘]); } } return $_ret; } //递归函数二:重新排序数据打印树形数据 public function getTree() { $data = $this->select(); var_dump($data);die(); return $this->_getTree($data); } /*****递归从数据中找子分类*****/ private function _getTree($data, $parent_id=0, $level=0) { static $_ret = array(); foreach ($data as $k => $v) { if($v[‘parent_id‘] == $parent_id) { $v[‘level‘] = $level; //用来标记这个分类是第几级 $_ret[] = $v; //找子分类 $this->_getTree($data, $v[‘id‘], $level+1); } } return $_ret; } } ?>
3、创建控制器CategoryController.class.php
利用getTree函数创建分类列表
添加一个商品分类页面lst.html
PHP.32-TP框架商城应用实例-后台10-商品分类-需求分析、创建无限级商品分类,递归
标签:extend inno model foreach table cti php array auto
原文地址:http://www.cnblogs.com/zixuanfy/p/7003686.html