面包屑导航

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

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. 039条件变量同步(Condition)

    也是锁,这个锁多加了wait(),notify()唤醒一个进程,notifyall()唤醒全部进程方法,创建的时候默认是Rlock类型的锁,可以设置为lock类型的,默认就ok from random ...

  2. xwork-2.1.2.jar与xwork-core-2.1.6.jar的区别是什么? 在线等待 先谢谢了

    两个包是一样,都是struts2的核心包.不过有时下在的struts2的jar包中只有xwordk-core-2.1.6.jar包.做项目的时候最好两个都导入.

  3. 阿里巴巴连接池Druid简单使用

    Druid参考:https://github.com/alibaba/druid 偶尔的机会解释Druid连接池,后起之秀,但是评价不错,另外由于是阿里淘宝使用过的所以还是蛮看好的. Druid集连接 ...

  4. BZOJ2118:墨墨的等式(最短路)

    Description 墨墨突然对等式很感兴趣,他正在研究a1x1+a2y2+…+anxn=B存在非负整数解的条件,他要求你编写一个程序,给定N.{an}.以及B的取值范围,求出有多少B可以使等式存在 ...

  5. Java中线程同步的理解

    我们可以在计算机上运行各种计算机软件程序.每一个运行的程序可能包括多个独立运行的线程(Thread). 线程(Thread)是一份独立运行的程序,有自己专用的运行栈.线程有可能和其他线程共享一些资源, ...

  6. Cesium.js点击事件

    创建viewer var viewer = new Cesium.Viewer('cesiumContainer'); 鼠标事件 var handler = new Cesium.ScreenSpac ...

  7. 【Node.js】新建一个NodeJS 4.X项目

    前提工作 1.安装Node.js 各种下一步就好 2.安装NPM(node package manager) 安装好Node.js之后,打开cmd,输入npm install npm -g,程序会自动 ...

  8. NHibernate学习过程笔记

    NHbernate自动生成数据库的方法: using NHibernate; using NHibernate.Tool.hbm2ddl; namespace Test { public class ...

  9. 一致性模型(consistency model)

    比如下面的例子: 一行X值在节点M和节点N上有副本 客户端A在节点M上写入行X的值 一段时间后,客户端B在节点N上读取行X的值 一致性模型所要做的就是决定客户端B能否看到客户端A写的值.一致性模型分为 ...

  10. Spring知识点小结(二)

    一.配置非自定义的Bean(数据源DataSource模型) DBCP数据源:        导入dbcp的jar包:dbcp+pool+connector                代码实现:  ...