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

     

     

  • 相关阅读:
    参加“51testing第70期深圳技术沙龙”感想
    软件测试的实质
    JMeter使用技巧
    一个软件测试员的工作与学习(二)
    JMeter基础之元件的作用域与执行顺序
    测试之美测试员的心思你不懂
    博客搬家的原因与文章被转的看法
    ubuntu下配置java环境
    敏捷软件测试初见
    软件测试人员分工
  • 原文地址:https://www.cnblogs.com/zixuanfy/p/7140549.html
Copyright © 2020-2023  润新知