PHP.51-TP框架商城应用实例-前台3-楼层推荐、TP框架雪崩问题
楼层推荐
效果图

1、增加表字段
商品表

分类表

2、修改商品模型和分类模型接收字段is_floor
3、修改商品和分类相关的表单
4、后台制作推荐方法
4.1在分类模型中增加获取前台楼层数据的方法
/****** 获取前台首页楼层中的数据 ***********/
public function floorData()
{
$floorData = S('floorData');
if($floorData)
return $floorData;
else
{
// 先取出推荐到楼层的顶级分类
$ret = $this->where(array(
'parent_id' => array('eq', 0),
'is_floor' => array('eq', '是')
))->select();
//var_dump($ret);die;
$goodsModel = D('Admin/Goods');
// 循环每个楼层取出楼层中的数据
foreach ($ret as $k => $v)
{
/*********** 这个楼层中的品牌数据 *************/
// 先取出这个楼层下所有的商品ID
$goodsId = $goodsModel->getGoodsIdByCatId($v['id']); // 再取出这些商品所用到的品牌
$ret[$k]['brand'] = $goodsModel->alias('a')
->join('LEFT JOIN __BRAND__ b ON a.brand_id=b.id')
->field('DISTINCT brand_id,b.brand_name,b.logo')
->where(array(
'a.id' => array('in', $goodsId),
'a.brand_id' => array('neq', 0),
))->limit(9)->select();
//var_dump($ret[0]['brand']);die; /**** 取出未推荐的二级分类并保存到这个顶级分类的subCat字段中 ****/
$ret[$k]['subCat'] = $this->where(array(
'parent_id' => array('eq', $v['id']),
'is_floor' => array('eq', '否'),
))->select();
//var_dump($ret[0]['subCat']);die;
/****** 取出推荐的二级分类并保存到这个顶级分类的subCat字段中 *******/
$ret[$k]['recSubCat'] = $this->where(array(
'parent_id' => array('eq', $v['id']),
'is_floor' => array('eq', '是'),
))->select();
//var_dump($ret[0]['recSubCat']);die;
/***** 循环每个推荐的二级分类取出分类下的8件被推荐到楼层的商品 ****/
foreach ($ret[$k]['recSubCat'] as $k1 => &$v1)
{
//取出这个分类下所有商品的ID并返回一维数组
$gid = $goodsModel->getGoodsIdByCatId($v1['id']);
$gids = implode(",", $gid);
//var_dump($gids);die;
// 再根据商品ID取出商品的详细信息
$v1['goods'] = $goodsModel->field('id,mid_logo,goods_name,shop_price')
->where(array(
'is_on_sale' => array('eq', '1'),
'is_floor' => array('eq', '是'),
'id' => array('in', $gids),
))->order('sort_num ASC')->limit(8)->select();
//var_dump($v1['goods']);die;
}
}
S('floorData', $ret, 5);
return $ret;
}
}
4.2在IndexController.class.php控制器中取出数据
4.3在首页中循环输出 ==> 包括品牌信息
5、为前台页面生成缓存

扩展:解决TP框架雪崩问题
生成静态缓存的雪崩问题:如果网站的并发量在100【每秒有100个刷新】,在缓存页面失效的一瞬间,100个并发同时进入到后端数据库有可能让数据库崩溃。
解决方法:修改TP底层源码,在生成静态缓存页时加锁,在缓存失效时只让一个客户端进入控制器 ==>PHP文件锁

PHP.51-TP框架商城应用实例-前台3-楼层推荐、TP框架雪崩问题的更多相关文章
- PHP.50-TP框架商城应用实例-前台2-商品推荐
商品推荐 {抢购,新品,精品,热卖}效果如下 1.在商品表增加促销价格与促销起始时间和结束时间三个字段,字段推荐楼层与排序在后面用到 注意:在增加datetime类型字段时,要添加默认值{datet ...
- PHP.49-TP框架商城应用实例-前台1-公共布局、制作首页
公共布局包括 1.页头.页脚{layout} 正文:{__COMMENT__} 导入:<layout name="layout"> 2.商品导航{nav.html} = ...
- PHP.52-TP框架商城应用实例-前台4-商品详情页-面包屑导航、AJAX浏览历史
面包屑导航 思路:根据商品的主分类向上取出所有上级分类即可 1.在分类模型中增加取出所有上级分类的方法 /********** [面包屑导航]取出一个分类所有上级分类 **********/ pub ...
- 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(主键) 添加字 ...
- PHP.27-TP框架商城应用实例-后台4-使用Gii生成品牌表的代码
Gii安装[GII适用于商城项目] 将Gii文件夹复到application 是,访问http://xx.com/index.php/gii Gii规则[Gii使用规则与建表规则密切相关] 1.建表字 ...
- PHP.48-TP框架商城应用实例-后台23-权限管理-权限验证
权限验证 1.登录控制器 2.通过tp验证码类生成验证码图片 3.在管理员模型增加登录验证规则 4.后台中所有的控制器必须先登录才能访问 思路:在访问任何一个控制器之前都判断一个session即可,= ...
- PHP.43-TP框架商城应用实例-后台18-商品属性3-库存量管理
库存量管理 思想:为商品的每个多选属性设置库存量!!要把多选属性排列组合分别指定库存量!! 效果如下:[由商品已经添加的属性决定] 1.建表goods_number{goods_id,goods_nu ...
- PHP.38-TP框架商城应用实例-后台14-商品管理-商品扩展分类的删除、修改
商品分类删除 1.删除商品时,根据商品id删除扩展分类表数据 商品扩展分类修改 1.在控制器GoodsController.class.php/edit()中根据商品id取出对应的所有扩展分类 2.在 ...
随机推荐
- Event Driven Architecture
在微服务中使用领域事件 稍微回想一下计算机硬件的工作原理我们便不难发现,整个计算机的工作过程其实就是一个对事件的处理过程.当你点击鼠标.敲击键盘或者插上U盘时,计算机便以中断的形式处理各种外部事件 ...
- std::string,std::vector,std::accumulate注意事项
在用string做字符串拼接时,会发现随着string的增大越来越慢,原因主要是string(和vector)是基于现行内存的数据结构,在海量数据时,经常会申请新的一块内存,把原有的数据拷贝过去然后再 ...
- dom4j.jar有什么作用?
om4j是一个Java的XML API,类似于jdom,用来读写XML文件的.dom4j是一个非常非常优秀的Java XML API,具有性能优异.功能强大和极端易用使用的特点,同时它也是一个开放源代 ...
- 在一个jsp页面中引用另一个jsp文件的路径的问题
为了提高代码的重用性,经常需要在一个jsp页面中引用另一个jsp文件的代码.关于引用时的路径的问题.下面只介绍动态引用的,我觉得静态引用的应该也一样. 相对路径: 一.在同一个文件夹下,a.jsp中引 ...
- (一)自定义ViewGroup绘制出菜单
从网上学习了hyman大神的卫星菜单实现,自己特意亲自又写了一编代码,对自定义ViewGroup的理解又深入了一点.我坚信只有自己写出来的知识才会有更加好的的掌握.因此也在自己的博客中将这个卫星菜单的 ...
- 汇编试验十四:访问CMOS RAM
CMOS RAM 芯片的特征: 包含一个时钟和一个有128个存储单元的RAM存储器. 该芯片靠电池供电.所以,关机后其内部的时钟仍可正常工作,RAM中的信息不丢失. 128个字节的RAM中,内部时钟占 ...
- 可决系数R^2和MSE,MAE,SMSE
波士顿房价预测 首先这个问题非常好其实要完整的回答这个问题很有难度,我也没有找到一个完整叙述这个东西的资料,所以下面主要是结合我自己的理解和一些资料谈一下r^2,mean square error 和 ...
- 十五、详述 IntelliJ IDEA 插件的安装及使用方法
正文 首先,进入插件安装界面: Mac:IntelliJ IDEA -> Preferences -> Plugins; Windows:File -> Settings -> ...
- 单独调用kindeditor的多图上传组件实现多图上传
本例是单独调用kindeditor多图上传的组件来进行多图上传,兼容性你懂得! 官方示例地址:http://kindeditor.net/ke4/examples/multi-image-dialog ...
- Java 编码规范(转)
本文转自:http://www.javaranger.com/archives/390 文章总结出了java编码过程中的一些规范,以便参考. 1.合理组织代码层次,分层清晰:controller.lo ...