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

时间:2023-03-09 04:32:10
PHP.52-TP框架商城应用实例-前台4-商品详情页-面包屑导航、AJAX浏览历史

面包屑导航

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、在控制器中调用

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

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

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

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

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

浏览历史      ==> 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);
}