PHP.37-TP框架商城应用实例-后台13-商品管理-扩展分类的添加、显示【数据分组】、搜索分类【多对多】
商品扩展分类
需求:一件商品能有多个扩展分类,搜索任何一个分类都能搜出该商品
建表【扩展分类表】
drop table if exists p39_goods_cat;
create table p39_goods_cat
(
cat_id mediumint unsigned not null comment '分类Id',
goods_id mediumint unsigned not null comment '商品Id',
key goods_id(goods_id),
key cat_id(cat_id)
)engine=InnoDB default charset=utf8 comment '扩展分类';
goods_cat
添加扩展分类
1、在add.html页面中增加扩展分类下拉框,利用JS代码实现多个扩展分类的增加
JS:点击一次克隆一个扩展分类的下拉框

2、在模型类GoodsModel.class.php/_before_insert()中处理扩展分类数据【以下是扩展分类的数据】


显示扩展分类【在lst.html】
1、修改模型类GoodsModel.class.php中search方法【多表查询{goods(商品表)、goods_cat(扩展分类表)、category(分类表)}】

扩展:group():结合合计函数,根据一个或多个列对结果集进行分组
group_concat():数据库函数,能把相同分组的不同行合并起来,在同一行显示
2、在lst.html页面中显示

搜索分类时,无论商品的主分类或扩展分类属于搜索的分类或其子分类,都属于搜索范围
思路:选择搜索分类时,得到搜索分类的id($catId),根据$catId,把其子分类的id也找出来($children),把$catId放到$children[]中。则所有的分类id已找到=>$children。根据$children,搜索所有主分类属于$children的商品;搜索所有扩展分类属于$children的商品;交并这两个结果数组,得搜索结果。

1、定义一个函数getGoodsIdByCatId,取出一个搜索分类搜索出来的所有商品ID
/**
* 取出一个分类下所有商品的ID【既考虑主分类也考虑扩展分类】
**/
public function getGoodsIdByCatId($catId)
{
//先取出所有子分类的ID 【$catId=>传入是搜索的分类ID】
$catModel = D('category');
$children = $catModel->getChildren($catId);
//和子分类放一起 【子分类为扩展分类,也应该被搜索出来】
$children[] = $catId;
/********************取出主分类或者扩展分类在这下分类中的商品*******/
//取出主分类下的商品Id
$gids = $this->field('id')->where(array(
'cat_id' => array('in', $children), //主分类下的商品
))->select();
//取出扩展分类下的商品ID
$gcModel = M('goods_cat');
$gids1 = $gcModel->field('DISTINCT goods_id id')->where(array(
'cat_id' => array('IN', $children)
))->select();
//把主分类的ID和扩展分类下的商品ID合并成二维数据【两个都不为空】
if($gids && $gids1)
$gids = array_merge($gids, $gids1); //合并数组
elseif ($gids1)
$gids = $gids1;
//二维转一维
$id = array();
foreach ($gids as $k => $v)
{
if(!in_array($v['id'], $id))
$id[] = $v['id'];
}
return $id;
}
2、根据商品id,搜索商品表

PHP.37-TP框架商城应用实例-后台13-商品管理-扩展分类的添加、显示【数据分组】、搜索分类【多对多】的更多相关文章
- PHP.38-TP框架商城应用实例-后台14-商品管理-商品扩展分类的删除、修改
商品分类删除 1.删除商品时,根据商品id删除扩展分类表数据 商品扩展分类修改 1.在控制器GoodsController.class.php/edit()中根据商品id取出对应的所有扩展分类 2.在 ...
- PHP.48-TP框架商城应用实例-后台23-权限管理-权限验证
权限验证 1.登录控制器 2.通过tp验证码类生成验证码图片 3.在管理员模型增加登录验证规则 4.后台中所有的控制器必须先登录才能访问 思路:在访问任何一个控制器之前都判断一个session即可,= ...
- PHP.44-TP框架商城应用实例-后台19-权限管理-RBAC需求分析
RBAC:Role Based Access Control:基于角色的访问控制 需求分析:[类似效果如下图] 1.权限,角色,管理员 2.权限管理[无限级] 注意:权限会被分配给角色,而不是给管理员 ...
- PHP.47-TP框架商城应用实例-后台22-权限管理-角色和管理员的关系
角色和管理员的关系 角色功能 管理员功能 角色与管理的关联要通过管理-角色表进行{多对多} /********* 管理-角色表 *********/ drop if exists p39_admin_ ...
- PHP.46-TP框架商城应用实例-后台21-权限管理-权限和角色的关系
权限和角色的关系 权限功能 角色功能 权限与角色的关联要通过权限-角色表进行{多对多} /********* 角色-权限表 *********/ drop if exists p39_role_pri ...
- PHP.45-TP框架商城应用实例-后台20-权限管理-RBAC表构造与代码生成
权限管理 三张主表{p39_privilege(权限).p39_role(角色).p39_admin(管理)} 两张中间表{p39_role_pri(角色-权限).p39_admin_role(管理- ...
- PHP.36-TP框架商城应用实例-后台12-商品管理-主分类添加、修改、搜索(连表查询)
需求:一个商品必须有一个主分类,一个主分类可以有多个商品 [一对多] 修改表p39_goods,增加外键约束,增加索引 主分类添加[控制器->页面] 1.在控制器GoodsController. ...
- PHP.24-TP框架商城应用实例-后台1-添加商品功能、钩子函数、在线编辑器、过滤XSS、上传图片并生成缩略图
添加商品功能 1.创建商品控制器[C] /www.test.com/shop/Admin/Controller/GoodsController.class.php <?php namespace ...
- PHP.28-TP框架商城应用实例-后台5-多表操作-商品表与品牌表
表与表之间的关系:1:1 1:多 多:多 功能需求决定表关系 此处的表关系为:品牌表:商品表=1:多 1.首先在表结构上关联,在多的表(商品表)添加一个字段,关联一的表(品牌表)的ID(主键) 添加字 ...
随机推荐
- 2017软件测试_HW1_最近遇到的编程问题
最近遇到的错误:我对着网页源代码编写了一段爬虫语句,运行没有提示有错误,而且 可以抓取到全部的数据,但是不能按照要求将这些数据分到制定的位置. 发现问题原因:我把抓取到的字段对着网页源码看了一下,发 ...
- Windows 系统 Unicode 文件名操作(新建、重命名、枚举、复制)全攻略
常见的那些文件操作函数都不支持,于是为了达到目的,需要各种方法配合,应该是不如其他语言方便.我只是想看看Perl到底是否适合做这件事,于是折腾了一回. 文件的建立: 模块:Win32 Code: [全 ...
- 【[SCOI2010]生成字符串】
\(n=m\)时候经典的卡特兰 那\(n!=m\)呢,还是按照卡特兰的方式来推 首先总情况数就是\(\binom{n+m}{n}\),在\(n+m\)个里选择\(n\)个\(1\) 显然有不合法的情况 ...
- Swift学习——格式控制符和元组流程控制(二)
Swift中的格式控制符和元祖 (1)首先介绍一下元祖,元祖是关系型数据库中 比如学生表中的姓名,年龄,电话等 定义例如以下 var studentinfo = ("jhon", ...
- 机器学习基础(HGL的机器学习笔记1)
统计学习:统计学习是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科,统计学习也成为统计机器人学习[1]. 统计学习分类:有监督学习与无监督学习[2]. 统计学习三要素:模型 ...
- 使用cmd命令进行运行java(cmd命令输出Hello word)
使用cmd命令输出Hello word 条件,按照好jdk和jre的环境下,如果没有安装,请安装,简单安装教程链接:https://www.cnblogs.com/weibanggang/p/9392 ...
- Android学习笔记_26_多媒体之拍照
一.配置文件: 需要引入摄像头权限,sdcard读写权限. <?xml version="1.0" encoding="utf-8"?> <m ...
- PAT1067. Sort with Swap(0, *) (25) 并查集
PAT1067. Sort with Swap(0, *) (25) 并查集 题目大意 给定一个序列, 只能进行一种操作: 任一元素与 0 交换位置, 问最少需要多少次交换. 思路 最优解就是每次 0 ...
- 安装 centos7
一.安装 省略前面安装操作,直接进入设置界面: 日期.键盘等设置按默认即可,主要是系统安装位置需要设置,点击 系统安装位置,进入设置 最终完成分区: 点击左上角完成按钮 接受更改 开始安装 设置roo ...
- 前端DOM知识点
DOM即文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式.DOM把网页和脚本 ...