首页 > 代码库 > PHP.32-TP框架商城应用实例-后台10-商品分类-需求分析、创建无限级商品分类,递归

PHP.32-TP框架商城应用实例-后台10-商品分类-需求分析、创建无限级商品分类,递归

商品管理需求分析

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-商品分类-需求分析、创建无限级商品分类,递归