PHP.52-TP框架商城应用实例-前台4-商品详情页-面包屑导航、AJAX浏览历史

思路:根据商品的主分类向上取出所有上级分类即可
1、在分类模型中增加取出所有上级分类的方法
/********** 【面包屑导航】取出一个分类所有上级分类 **********/
public function parentPath($catId)
{
static $ret = array();
$info = $this->field('id, cat_name,parent_id')->find($catId);
$ret[] = $info;
// 递归取上级信息
if($info['parent_id'] > 0)
$this->parentPath($info['parent_id']);
return $ret;
}
2、在控制器中调用

3、页面中循环输出【1、倒着输出;2、先数组反转再输出】

4、为每件商品生成一个静态缓存

浏览历史 ==> AJAX做,实现局部不缓存!
原理: 浏览一件商品就存起来
解决方法
未登录时
SESSION:关闭浏览器再打开浏览历史没了
COOKIE:关闭浏览器再用同一个浏览器打开还有【配置过期时间】 ==> 只存ID
登录之后
数据库:必须会员先登录了获取得member_id之后才能存数据库中
1、页面中增加js代码
<script type="text/javascript">
<?php $config = C('IMAGE_CONFIG'); ?>
var viewPath = '<?php echo $config['viewPath']; ?>';
// 记录浏览历史
$.ajax({
type : "GET",
url : "<?php echo U('Index/displayHistory?id='.$info['id']); ?>",
dataType : "json",
success : function(data)
{
// 循环服务器返回的浏览历史数据放到页面中
// 先拼HTML字符串
var html = "";
$(data).each(function(k,v){
html += '<dl><dt><a href="<?php echo U('goods', '', FALSE); ?>/id/'+v.id+'"><img src="'+viewPath+v.mid_logo+'" /></a></dt><dd><a href="<?php echo U('goods', '', FALSE); ?>/id/'+v.id+'">'+v.goods_name+'</a></dd></dl>';
});
// 放到 页面中
$("#display_history").html(html);
}
});
</script>
2、修改浏览历史的HTML添加一个ID
3、控制器中添加方法处理AJAX
public function displayHistory()
{
$id = I('get.id');
// 先从COOKIE中取出浏览历史的ID数组
$data = isset($_COOKIE['display_history']) ? unserialize($_COOKIE['display_history']) : array();
// 把最新浏览的这件商品放到数组中的第一个位置上
array_unshift($data, $id);
// 去重
$data = array_unique($data);
// 只取数组中前6个
if(count($data) > 6)
$data = array_slice($data, 0, 6);
// 从数组存回COOKIE
$cookie = setcookie('display_history', seriallize($data), time() + 30 * 86400, '/'); // 再根据商品的ID取出商品的详细信息
$goodsModel = M('Admin/Goods');
$data = implode(',', $data);
$gData = $goodsModel->field('id.mid_logo,goods_name')->where(array(
'id' => array('in', $data),
'is_on_sale' => array('eq', '是'),
))->order("FIELD(id, $data)")->select();
echo json_encode($gData);
}
PHP.52-TP框架商城应用实例-前台4-商品详情页-面包屑导航、AJAX浏览历史的更多相关文章
- 夺命雷公狗ThinkPHP项目之----企业网站24之网站前台列表页面包屑导航的显示
我们做面包屑导航的原理其实也是很简单的,我们的思路是: 首先找到该分类的id ,我们可以通过大 I来进行获取得到: 然后通过 大 D 方法让数据进入model层里面进行循环迭代查询, 当然,测试时候发 ...
- PHP.51-TP框架商城应用实例-前台3-楼层推荐、TP框架雪崩问题
楼层推荐 效果图 1.增加表字段 商品表 分类表 2.修改商品模型和分类模型接收字段is_floor 3.修改商品和分类相关的表单 4.后台制作推荐方法 4.1在分类模型中增加获取前台楼层数据的方 ...
- PHP.25-TP框架商城应用实例-后台2-商品列表页-搜索、翻页、排序
商品列表页 1.翻页 控制器GoodsController.class.php添加方法lst(),显示列表页 在商品模型GoodsModel.class.php类中添加search方法 /** *实现 ...
- PHP.49-TP框架商城应用实例-前台1-公共布局、制作首页
公共布局包括 1.页头.页脚{layout} 正文:{__COMMENT__} 导入:<layout name="layout"> 2.商品导航{nav.html} = ...
- PHP.50-TP框架商城应用实例-前台2-商品推荐
商品推荐 {抢购,新品,精品,热卖}效果如下 1.在商品表增加促销价格与促销起始时间和结束时间三个字段,字段推荐楼层与排序在后面用到 注意:在增加datetime类型字段时,要添加默认值{datet ...
- PHP.24-TP框架商城应用实例-后台1-添加商品功能、钩子函数、在线编辑器、过滤XSS、上传图片并生成缩略图
添加商品功能 1.创建商品控制器[C] /www.test.com/shop/Admin/Controller/GoodsController.class.php <?php namespace ...
- 已有模板与tp框架的结合 (前台)
已有模板与tp框架的结合 具体步骤 A.复制模板文件到view指定目录 B. 复合css .js.img.静态资源文件到系统指定目录 C. 把静态资源(css,js,img)文件的路径设置为“常量 ...
- 从零开始,搭建博客系统MVC5+EF6搭建框架(5),博客详情页、留言、轮播图管理、右侧统计博文
一.博客系统进度回顾 上一遍博客介绍到,系统已经实现到了发布以及前台布局展示,接下来就是实现一些,详情页,留言.轮播图管理.右侧博文统计信息实现. 二.博客系统详情页实现 2.1先来看看详情页展示的效 ...
- 第六章 “我要点爆”微信小程序云开发实例之爆文详情页制作
爆文详情页制作 从首页中数据列表打开相应详情页面的方法: 给数据列表中每个数据项加一个点击事件,同时将当前数据项的id暂时记录在本地,然后跳转到详情页面detail goopen: function ...
随机推荐
- WSGI、flup、fastcgi、web.py、uwsgi
================== 网上别人的理解 =================== http://www.douban.com/note/13508388/ 1.Apache/ ...
- 关于使用eclipse maven UpdateProject时报错,无法更新本地仓库的问题解决方案
在做项目中,需要从同事电脑中把Maven项目copy过来,但是copy的过程中只copy了代码,setting.xml文件和pom.xml,使用eclipse把项目导入,有红色的感叹号提示,由于我没有 ...
- 谈谈Ajax(二)
昨天还没有谈完,今天做一个了解. 首先还是以错误,来讲述. 一.AJax常见错误 Ajax常见的错误,除了昨天列举的之外.还有就是如下状态码: 405,请求类型错误,比如请求是POST,你却用GET, ...
- Linux下安装Qt5.6.1
我的环境:CentOS 6.7 64位. 1.下载Qt: Qt版本有很多,自己比较菜,希望安装的过程越简单越好,感觉比较新的版本会好安装一些,5.4版本还要更新 /usr/lib64/libstdc ...
- HDU 2030 汉字统计(汉字Asics码为负,占两个char)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2030 汉字统计 Time Limit: 2000/1000 MS (Java/Others) M ...
- 使用Storyboard拖线容易出错的地方
使用Storyboard拖线容易出错的地方: 在Storyboard中,选中某个控件,按住ctrl键进行拖线,建立Outlet和Action后,不能手动再去修改自动生成的代码,然后再次进行连线,这样会 ...
- java 编写小工具 尝试 学习(六)
1.java 布局管理器-布局管理器之null布局(空布局) 的 学习,参考大神教程:http://www.cnblogs.com/liaoliao/p/5009445.html import jav ...
- 第23章 I2C—读写EEPR
本章参考资料:<STM32F76xxx参考手册>.<STM32F7xx规格书>.库帮助文档<STM32F779xx_User_Manual.chm>及<I2C ...
- Gradle Goodness: Adding Tasks to a Predefined Group
In Gradle we can group related tasks using the group property of a task. We provide the name of our ...
- 【Javascript-ECMA6-Fetch详解】
Fetch 由于Fetch API是基于Promise设计,因此旧的浏览器并不支持该API,需要引用时引用es6-promise. 基本知识 fetch请求返回response格式 body Fetc ...