zoukankan      html  css  js  c++  java
  • 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);
        }

     

     

  • 相关阅读:
    linux内核中创建线程方法
    高等数学所有符号的写法与读法
    Git学习笔记03--git reset
    git status message
    [小技巧] git: Your branch and 'origin/master' have diverged
    phalcon: 资源文件管 理 引入css,js
    phalcon: model 验证数据完整性
    phalcon:model 事件与事件管理器
    phalcon: 查找记录(Finding Records)可用的查询设置如下:
    phalcon count统计
  • 原文地址:https://www.cnblogs.com/zixuanfy/p/7140549.html
Copyright © 2011-2022 走看看