面包屑导航

 思路:根据商品的主分类向上取出所有上级分类即可

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

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

  1. 夺命雷公狗ThinkPHP项目之----企业网站24之网站前台列表页面包屑导航的显示

    我们做面包屑导航的原理其实也是很简单的,我们的思路是: 首先找到该分类的id ,我们可以通过大 I来进行获取得到: 然后通过 大 D 方法让数据进入model层里面进行循环迭代查询, 当然,测试时候发 ...

  2. PHP.51-TP框架商城应用实例-前台3-楼层推荐、TP框架雪崩问题

    楼层推荐 效果图 1.增加表字段 商品表   分类表 2.修改商品模型和分类模型接收字段is_floor 3.修改商品和分类相关的表单 4.后台制作推荐方法 4.1在分类模型中增加获取前台楼层数据的方 ...

  3. PHP.25-TP框架商城应用实例-后台2-商品列表页-搜索、翻页、排序

    商品列表页 1.翻页 控制器GoodsController.class.php添加方法lst(),显示列表页 在商品模型GoodsModel.class.php类中添加search方法 /** *实现 ...

  4. PHP.49-TP框架商城应用实例-前台1-公共布局、制作首页

    公共布局包括 1.页头.页脚{layout} 正文:{__COMMENT__} 导入:<layout name="layout"> 2.商品导航{nav.html} = ...

  5. PHP.50-TP框架商城应用实例-前台2-商品推荐

    商品推荐 {抢购,新品,精品,热卖}效果如下 1.在商品表增加促销价格与促销起始时间和结束时间三个字段,字段推荐楼层与排序在后面用到  注意:在增加datetime类型字段时,要添加默认值{datet ...

  6. PHP.24-TP框架商城应用实例-后台1-添加商品功能、钩子函数、在线编辑器、过滤XSS、上传图片并生成缩略图

    添加商品功能 1.创建商品控制器[C] /www.test.com/shop/Admin/Controller/GoodsController.class.php <?php namespace ...

  7. 已有模板与tp框架的结合 (前台)

    已有模板与tp框架的结合 具体步骤   A.复制模板文件到view指定目录 B. 复合css .js.img.静态资源文件到系统指定目录 C. 把静态资源(css,js,img)文件的路径设置为“常量 ...

  8. 从零开始,搭建博客系统MVC5+EF6搭建框架(5),博客详情页、留言、轮播图管理、右侧统计博文

    一.博客系统进度回顾 上一遍博客介绍到,系统已经实现到了发布以及前台布局展示,接下来就是实现一些,详情页,留言.轮播图管理.右侧博文统计信息实现. 二.博客系统详情页实现 2.1先来看看详情页展示的效 ...

  9. 第六章 “我要点爆”微信小程序云开发实例之爆文详情页制作

    爆文详情页制作 从首页中数据列表打开相应详情页面的方法: 给数据列表中每个数据项加一个点击事件,同时将当前数据项的id暂时记录在本地,然后跳转到详情页面detail goopen: function ...

随机推荐

  1. (原)使用 memcache 使用过程中可能遇到的问题

    在项目优化中,使用到了memcache,刚开始不能用,后来期间总会偶尔抛出异常,刚开始怀疑动态库版本问题,后来尝试了各种替换依旧误解,搞得我日思夜想的,天天惦记着他..=_= 下午拿出半天时间,进行错 ...

  2. C# 之 Request

    Request.QueryString(取得地址栏参数值)获取地址栏中的参数,意思就是取得”?"号后面的参数值.如果是多个是用这”&”符号连接起来的.Request.form取得表单 ...

  3. Android Studio 独立引入(非友盟)微博分享和回调时问题

    最近同事在做一个小项目时,由于产品的要求,Wap页面的分享规定不能使用友盟的社会化组件.他则不得不手动一个一个渠道的引入分享,好在渠道不多就三个,但是第一微博分享引入的时候问题就出现了. 问题一:li ...

  4. 360网站卫士SQL注入绕过案例一个

    不要以为用了360就可以高枕无忧,直接在netcraft的site_report中找到源站服务器IP,直接SQL脱裤,甚至可获取服务器权限. 存在漏洞的网站: 手工测试存在注入点: 但是网站有360保 ...

  5. 转化ico标志

    emmm,谨此纪念我这七秒钟的记忆. ico最简单的转化方法,上网搜索ico图标转换即可

  6. Vue收藏资料

    组件库的全局引用和按需引用:http://www.cnblogs.com/zhuanzhuanfe/p/7516745.html

  7. Ajax三级联动操作的js代码

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  8. 解决hash冲突方法

    转自:https://www.cnblogs.com/wuchaodzxx/p/7396599.html 目录 开放定址法 线性探测再散列 二次探测再散列 伪随机探测再散列 再哈希法 链地址法 建立公 ...

  9. cin,get,getline

    一.cin 1.cin使用空白(空格.制表符和换行符)来确定字符串结束的位置,并且对于换行符,cin会把换行符留在输入队列.cin读取字符串放到数组中,并自动在结尾添加空字符. 例如: ]; cin& ...

  10. 在linux命令行中调试在OJ上的c++代码

    gcc & g++现在是gnu中最主要和最流行的c & c++编译器 .g++是c++的命令,以.cpp为主,对于c语言后缀名一般为.c.这时候命令换做gcc即可. 编译器是根据gcc ...