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

 

 

 

posted on 2017-07-09 09:30  子轩非鱼  阅读(306)  评论(0编辑  收藏  举报

导航