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(主键) 添加字 ...
随机推荐
- Orchard Core 文档翻译 (三) Orchard Core Modules
原文连接:https://www.cnblogs.com/Qbit/p/9746442.html 转载请注明出处 介绍 Orchard Core Modules库提供了一种机制,可以拥有一个独立的模块 ...
- 找出OData service出错根源的小技巧
SAP的Fiori应用是通过OData和后台交互的.在使用Fiori应用时您可能会遇到这样的错误消息: 这个错误消息没有包含有助于partner或者客户定位问题根源的线索. 下面是如何在后台找出问题根 ...
- 【CF1009F】Dominant Indices(长链剖分优化DP)
点此看题面 大致题意: 设\(d(x,y)\)表示\(x\)子树内到\(x\)距离为\(y\)的点的个数,对于每个\(x\),求满足\(d(x,y)\)最大的最小的\(y\). 暴力\(DP\) 首先 ...
- [19/03/13-星期三] 数组_二维数组&冒泡排序&二分查找
一.二维数组 多维数组可以看成以数组为元素的数组.可以有二维.三维.甚至更多维数组,但是实际开发中用的非常少.最多到二维数组(我们一般使用容器代替,二维数组用的都很少). [代码示例] import ...
- markdown的常用高级操作。
符号 说明 对应编码(使用时去掉空格) 英文怎么说 & AND 符号 & amp; ampersand < 小于 & lt; little 大于 & gt; gr ...
- 优雅的QSignleton (二) MonoSingleton单例实现
MonoSingleton.cs namespace QFramework.Example { using System.Collections; using UnityEngine; class C ...
- HTML表格和表单
<table>格式: 注意:1. 合并单元格:COLSPAN(跨列)ROWSPAN(跨行) 2.cellspacing属性定义单元格之间的间距(以像素为单位). cellpadding属性 ...
- 关于SQLNET.AUTHENTICATION_SERVICES= (NTS) 的解释
原文转自:http://www.360doc.com/content/12/0207/12/3446769_184740592.shtml 标题所代表的意思为 使用操作系统本地验证,一般不 ...
- seajs简单使用
背景:在做一个功能时需要用到一个JS库,但是这个库比较大,想要在只有用到这个功能时再去加载这个库. <script src="~/Scripts/jquery-1.10.2.min.j ...
- chromium之non_thread_safe
先看看介绍 // A helper class used to help verify that methods of a class are // called from the same thre ...