PHP.32-TP框架商城應用實例-後臺10-商品分類-需求分析、創建無限級商品分類,遞歸
阿新 • • 發佈:2017-06-13
創建 efault inno use creat -a his ati ida
商品管理需求分析
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(category30) 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‘);CategoryModel.class.phpprotected $_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-商品分類-需求分析、創建無限級商品分類,遞歸