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

时间: 06-11

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

PHP.25-TP框架商城应用实例-后台1-添加商品功能、钩子函数、在线编辑器、过滤XSS、上传图片并生成缩略图

添加商品功能 1.创建商品控制器[C] /www.test.com/shop/Admin/Controller/GoodsController.class.php <?php namespace Admin\Controller; use Think\Controller; //后台添加商品功能控制器 class GoodsController extends Controller { //显示和处理表单 public function add() { //判断用户是否提交了表单(如果提交了,就

PHP.48-TP框架商城应用实例-后台23-权限管理-权限验证

权限验证 1.登录控制器 2.通过tp验证码类生成验证码图片 3.在管理员模型增加登录验证规则 4.后台中所有的控制器必须先登录才能访问 思路:在访问任何一个控制器之前都判断一个session即可,=>增加一个父控制器验证Session 让所有后台的控制器[除了Login控制器之外的]都继承自这个控制器 5.在管理员访问后台的任何一个页面之前先到数据库中查看当前管理员所在的角色是否有权限访问这个页面 在权限模型中增加此检查方法,在父类登录控制器中调用 6.后台左侧只显示当前管理员有权限访问的按钮

PHP.28-TP框架商城应用实例-后台4-使用Gii生成品牌表的代码

Gii安装[GII适用于商城项目] 将Gii文件夹复到application 是,访问http://xx.com/index.php/gii Gii规则[Gii使用规则与建表规则密切相关] 1.建表字段必须有中文名,则Gii在生成代码时才能识别某字段的中文名是什么: 2.某字段验证规则不能为空:设置该建表字段为not null:一般所有字段都为not null,若不希望生成验证规则,则加上默认值default(默认值可为空): 3.生成上传图片代码:字段名中需包含logo|image|pic|f

PHP.29-TP框架商城应用实例-后台7-商品会员修改-页面优化,多表数据更新

商品表修改功能 1.页面优化,类似添加页面 1 <layout name="layout" /> 2 3 <div class="tab-div"> 4 <div id="tabbar-div"> 5 <p> 6 <span class="tab-front" >通用信息</span> 7 <span class="tab-back&quo

PHP.39-TP框架商城应用实例-后台16-商品属性2-AJAX添加、删除

 添加商品属性 思路:根据[后台15]类型表{id,type_name}与属性表{id,attr_name,attr_type,attr_option_values,type_id} 1.建表商品属性表p39_goods_attr{id,attr_value,attr_id,goods_id} /********商品属性表[多对多:一个属性可以有多个值,一个商品可以有多个属性,一个属性可以对应多个商品]*******/ drop if exists p39_goods_attr; create

PHP.31-TP框架商城应用实例-后台9-商品相册-修改、删除(AJAX)

商品相册图片删除 当商品删除时,把相册中的图片一并从硬盘和数据库中删除,根据商品id[因为每一张商品相片都会生成三张缩略图,所以删除时要将其缩略图一并删除] //钩子方法_before_delete:删除前的操作 protected function _before_delete($option) { $id = $option['where']['id']; //要删除的商品的ID /***********删除商品相片********/ //先查询出原商品相册的路径 $gpModel = M(

PHP.36-TP框架商城应用实例-后台14-商品管理-商品扩展分类的删除、修改

商品分类删除 1.删除商品时,根据商品id删除扩展分类表数据 商品扩展分类修改 1.在控制器GoodsController.class.php/edit()中根据商品id取出对应的所有扩展分类 2.在修改页面edit.html中显示对应扩展分类foreach,类似添加页面 注:考虑当没有扩展分类时的显示,使用if($gcData) 3.在模型类GoodsModel.class.php/_before_update()中处理扩展分类,先删除原数据,再插入新数据[多对多时,通常的用法] <?php

PHP.43-TP框架商城应用实例-后台16-商品属性3-库存量管理

库存量管理 思想:为商品的每个多选属性设置库存量!!要把多选属性排列组合分别指定库存量!! 效果如下:[由商品已经添加的属性决定] 1.建表goods_number{goods_id,goods_number,goods_str_id[商品属性id]} drop if exists p39_goods_number; create table p39_goods_number ( goods_id mediumint unsigned not null comment '商品Id', goods

PHP.26-TP框架商城应用实例-后台2-商品列表页-搜索、翻页、排序

商品列表页 1.翻页 控制器GoodsController.class.php添加方法lst(),显示列表页 在商品模型GoodsModel.class.php类中添加search方法 /** *实现翻页.搜索.排序 * */ public function search($perPage = 5) //$perPage控制显示条数 { /***********翻页***********/ //取出总的记录数 $count = $this->count(); //生成翻页类的对象 $pageOb

PHP.27-TP框架商城应用实例-后台3-商品修改、删除

商品修改{修改页一般与添加页有百分之九十的相似度} create($_POST,Model::MODEL_UPDATE):系统内置的数据操作包括Model::MODEL_INSERT(或者1)和Model::MODEL_UPDATE(或者2),当没有指定的时候,系统根据数据源是否包含主键数据来自动判断,如果存在主键数据,就当成Model::MODEL_UPDATE操作. save():用于更新数据库信息:如果失败返回false,如果成功返回受影响条数 1.控制器GoodsController.c