1. 程式人生 > >PHP.32-TP框架商城應用實例-後臺10-商品分類-需求分析、創建無限級商品分類,遞歸

PHP.32-TP框架商城應用實例-後臺10-商品分類-需求分析、創建無限級商品分類,遞歸

創建 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(
30) not null comment ‘分類名稱‘, parent_id mediumint unsigned not null default ‘0‘ comment ‘上級分類id,0:頂級分類‘, primary key(id) )engine=InnoDB default charset=utf8 comment ‘分類‘;
category

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; } } ?>
CategoryModel.class.php

3、創建控制器CategoryController.class.php

利用getTree函數創建分類列表

技術分享

添加一個商品分類頁面lst.html

技術分享

PHP.32-TP框架商城應用實例-後臺10-商品分類-需求分析、創建無限級商品分類,遞歸