商品管理需求分析

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),
);

  

  注:当找到一个分类的所有子分类时,要清空静态变量$_ret,防止再次调用该递归函数时,变量中有值【即限制其只调用一次】

<?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

暂时导入category表数据,做列表测试

INSERT INTO `p39_category` (`id`, `cat_name`, `parent_id`) VALUES
(1, '家用电器', 0),
(2, '手机、数码、京东通信', 0),
(3, '电脑、办公', 0),
(4, '家居、家具、家装、厨具', 0),
(5, '男装、女装、内衣、珠宝', 0),
(6, '个护化妆', 0),
(21, 'iphone', 2),
(8, '运动户外', 0),
(9, '汽车、汽车用品', 0),
(10, '母婴、玩具乐器', 0),
(11, '食品、酒类、生鲜、特产', 0),
(12, '营养保健', 0),
(13, '图书、音像、电子书', 0),
(14, '彩票、旅行、充值、票务', 0),
(15, '理财、众筹、白条、保险', 0),
(16, '大家电', 1),
(17, '生活电器', 1),
(18, '厨房电器', 1),
(19, '个护健康', 1),
(20, '五金家装', 1),
(22, '冰箱', 16);

insert into category

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

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

    添加商品功能 1.创建商品控制器[C] /www.test.com/shop/Admin/Controller/GoodsController.class.php <?php namespace ...

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

    权限验证 1.登录控制器 2.通过tp验证码类生成验证码图片 3.在管理员模型增加登录验证规则 4.后台中所有的控制器必须先登录才能访问 思路:在访问任何一个控制器之前都判断一个session即可,= ...

  3. PHP.28-TP框架商城应用实例-后台5-多表操作-商品表与品牌表

    表与表之间的关系:1:1 1:多 多:多 功能需求决定表关系 此处的表关系为:品牌表:商品表=1:多 1.首先在表结构上关联,在多的表(商品表)添加一个字段,关联一的表(品牌表)的ID(主键) 添加字 ...

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

    Gii安装[GII适用于商城项目] 将Gii文件夹复到application 是,访问http://xx.com/index.php/gii Gii规则[Gii使用规则与建表规则密切相关] 1.建表字 ...

  5. PHP.44-TP框架商城应用实例-后台19-权限管理-RBAC需求分析

    RBAC:Role Based Access Control:基于角色的访问控制 需求分析:[类似效果如下图] 1.权限,角色,管理员 2.权限管理[无限级] 注意:权限会被分配给角色,而不是给管理员 ...

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

    库存量管理 思想:为商品的每个多选属性设置库存量!!要把多选属性排列组合分别指定库存量!! 效果如下:[由商品已经添加的属性决定] 1.建表goods_number{goods_id,goods_nu ...

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

     添加商品属性 思路:根据[后台15]类型表{id,type_name}与属性表{id,attr_name,attr_type,attr_option_values,type_id} 1.建表商品属性 ...

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

    商品分类删除 1.删除商品时,根据商品id删除扩展分类表数据 商品扩展分类修改 1.在控制器GoodsController.class.php/edit()中根据商品id取出对应的所有扩展分类 2.在 ...

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

    商品相册图片删除 当商品删除时,把相册中的图片一并从硬盘和数据库中删除,根据商品id[因为每一张商品相片都会生成三张缩略图,所以删除时要将其缩略图一并删除] //钩子方法_before_delete: ...

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

    商品表修改功能 1.页面优化,类似添加页面 <layout name="layout" /> <div class="tab-div"> ...

随机推荐

  1. Excel 解析 (大文件读取)BingExcel

    最近在整理一个excel读取与写出的orm框架.使用的saxreader方式,支持百万级别的excel读取. 并且在通常使用中提供了监听的读取方式.如感兴趣的朋友可以稍微了解下 ,项目地址https: ...

  2. python 输出奇偶数并排序

    random_numbers = [] for i in range(40): random_numbers.append(random.randint(1, 100)) num1 = [] num2 ...

  3. K星异客

    http://baike.baidu.com/view/222058.htm 这部改编自基恩·布汝尔1995年出版的同名小说的电影在当年的十月档票房榜上称冠.本来这部电影的外星人主人公属意于威尔.史密 ...

  4. linux上传、下载文件rz、sz命令

    1.介绍 sz命令是利用ZModem协议来从linux服务器传送文件到本地,一次可以传送一个或多个文件.相对应的从本地上传文件到Linux服务器,可以使用rz命令. 2.参数说明 -a,以文本方式传输 ...

  5. 检测浏览器中是否有Flash插件

    由于IE和非IE浏览器检测方式不同,所以代码如下 function hasPlugin(name){ debugger; name = name.toLowerCase(); for(var i=0; ...

  6. hdu-2852 KiKi's K-Number---二分+树状数组

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2852 题目大意: 题意:    给出三种操作,    0 在容器中插入一个数.    1 在容器中删 ...

  7. Git配置和常用命令

    Git配置 git config --global user.name "hunng" git config --global user.email "huangthin ...

  8. Spring初始化Bean或销毁Bean前执行操作的方式

    如果想在Spring初始化后,或者销毁前做某些操作,常用的设定方式有三种: 第一种:通过 在xml中定义init-method 和 destory-method方法 推荐使用,缺陷是只能在XML中使用 ...

  9. C#中类的声明

    一.C#中类的声明 在C#中必须先声明类,然后才能在程序中使用. 类的声明格式如下: [类的属性] [访问修饰符] class 类名称 [: 父类名]{    [成员修饰符] 类的成员变量或者成员函数 ...

  10. Java Web入门经典扫描版

    全书共分4篇19章,其中,第一篇为“起步篇”,主要包括开启JavaWeb之门.不可不知的客户端应用技术.驾驭JavaWeb开发环境.JavaWeb开发必修课之JSP语法等内容:第二篇为“核心篇”,主要 ...