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