我们做面包屑导航的原理其实也是很简单的,我们的思路是:

首先找到该分类的id ,我们可以通过大 I来进行获取得到:

然后通过 大 D 方法让数据进入model层里面进行循环迭代查询,

当然,测试时候发现了一个效果是出来了,不过是反转了的,,所以我们通过array_reverse的函数让他反过来。。

废话不多说,直接开干,,,

先来创建一个CategoryModel.class.php的模型:

  1. <?php
  2. namespace Home\Model;
  3. use Think\Model;
  4. class CategoryModel extends Model{
  5. public function getparent($cateid){
  6. $res = array();
  7. //循环找出当前栏目的信息,如果为0退出循环
  8. while($cateid){
  9. $cates = $this -> where("cate_id=$cateid") -> find();
  10. $res[] = array(
  11. 'cate_id' => $cates['cate_id'],
  12. 'cate_name' => $cates['cate_name']
  13. );
  14. //将他上级栏目赋值给他
  15. $cateid = $cates['cate_pid'];
  16. }
  17. //array_reverse 相反顺序的新数组
  18. return array_reverse($res);
  19. }
  20. }

然后在控制器里面让我们接收到的cate_id 传进我们的model层里面让他进行迭代查询:

  1. <?php
  2. namespace Home\Controller;
  3. use Think\Controller;
  4. class ListsController extends CommonController {
  5. public function lists(){
  6. $cateid = I('cate_id');
  7. $mod = D('Category');
  8. $res = $mod -> getparent($cateid);
  9. $this -> assign('res',$res);
  10. //dump($res);
  11. $this->display();
  12. }
  13. }

然后让我们的数据分配到视图里面:

这样文字即可实现了,效果如下所示:

效果是出来了,但是后面这里还有一个  >  分割符,那么原理也很简单,我们直接加他一个判断问题即可解决:

这里用到的 $i 是tp 给我们预留的一个框架变量。。

然后测试下后果:

效果虽然完成了,但是面包屑导航是经常用得上的,为了防止代码冗余我们老规矩将他放到CommonController.class.php里面,尽量让他少点重复:

  1. <?php
  2. namespace Home\Controller;
  3. use Think\Controller;
  4. class CommonController extends Controller {
  5. function __construct(){
  6. //继承父类的构造方法,所以网站在执行的时候会先执行他
  7. parent::__construct();
  8. //头部二级分类的显示 开始
  9. $mod = M("Category");
  10. $where['cate_pid'] = '0';
  11. //这样写可以达到一种防SQL注入的效果
  12. $cate = $mod -> where($where) -> select(); //获取顶级栏目为0的结果集
  13. $this -> assign('cate',$cate);
  14. //dump($cate);
  15. //头部二级分类的显示 结束
  16.  
  17. //列表页和产品页的面包屑导航 开始
  18. $cateid = I('cate_id');
  19. $mod = D('Category');
  20. $res = $mod -> getparent($cateid);
  21. $this -> assign('res',$res);
  22. //列表页和产品页的面包屑导航 结束
  23.  
  24. }
  25. }

然后删除掉列表页面里的这些代码,如下所示:

删除掉后再来测试下,结果发现一切正常显示:

然后我们的单页也用这方法去弄即可实现。。。。。。。

夺命雷公狗ThinkPHP项目之----企业网站24之网站前台列表页面包屑导航的显示的更多相关文章

  1. 夺命雷公狗ThinkPHP项目之----企业网站28之网站前台左侧导航的实现

    我们基于刚才在model层的找顶级分类的代码在进行修改即可: <?php namespace Home\Controller; use Think\Controller; class Commo ...

  2. 夺命雷公狗ThinkPHP项目之----企业网站25之网站前台面包屑导航URL的完善

    如果想取出面包屑导航的url那么就必须在model层里面进行多取一个了: <?php namespace Home\Model; use Think\Model; class CategoryM ...

  3. 夺命雷公狗ThinkPHP项目之----企业网站24之网站前台获取当前栏目和顶级栏目

    我们现在要实现的是取出网站当前栏目名称和顶级分类名称,如下所示: 列表页的和单页的不能总是写死的吧?? 我能就要想办法去让他变活的才可以解决问题噢,我们已经有了他的cate_id ,然后我们就可以通过 ...

  4. 夺命雷公狗ThinkPHP项目之----企业网站1之快速搭建后台

    我们还是老规矩照老方法,将框架里面多余的东西都干掉,然后在index.php里面将框架搭建起来 <?php //定义项目目录 define('APP_PATH','./WEB/'); //开启调 ...

  5. 夺命雷公狗ThinkPHP项目之----企业网站26之网站前台列表页的显示和完成分页功能

    我们用大I接收到我们get过来的栏目页的id然后通过文章的ar_cateid 来判断是不是属于该栏目下的,如果文章表ar_cateid = 栏目表的cate_id 那么就可以选出我们要查找的信息, 然 ...

  6. 夺命雷公狗ThinkPHP项目之----企业网站18之网站配置列表页的完成

    我们点击下配置列表即可查看我们列表页的配置信息了: 其实这个最简单了,首先我们先来完成他控制器的代码: public function lists(){ $mod = M('Conf')->se ...

  7. 夺命雷公狗ThinkPHP项目之----企业网站27之网站前台单页的完成(从百度编辑器里面取出文章数据)

    我们的单页面里主要是为了可以取出文章分类表的栏目内容,废话先不说, 我们的实现要点: 1...获取get过来的栏目cate_id 2...然后用条件查询栏目表 <?php namespace H ...

  8. 夺命雷公狗ThinkPHP项目之----企业网站22之网站前台中间层(解决代码冗余)

    我们如果这样写代码虽然可以实现头部二级分类的显示,但是如果再别的控制器下那么会出现显示不了.. 如果再加多一段一样的代码也可以实现出一样的效果: 但是这样会导致代码冗余现象,所以我们为了解决这个问题, ...

  9. 夺命雷公狗ThinkPHP项目之----企业网站21之网站前台二级分类显示名称(TP自定义函数展示无限极分类)

    我们实现网站二级分类的显示的时候,先要考虑的是直接取出顶级栏目,控制器代码如下所示: <?php namespace Home\Controller; use Think\Controller; ...

随机推荐

  1. C++ 安全字符串拼接

    #include <stdio.h> #include <stdint.h> #include <stdarg.h> #if defined(__GNUC__) # ...

  2. oracle变量的定义和使用【转】

    在程序中定义变量.常量和参数时,则必须要为它们指定PL/SQL数据类型.在编写PL/SQL程序时,可以使用标量(Scalar)类型.复合(Composite)类型.参照(Reference)类型和LO ...

  3. Delphi FindowWindow,FindowWindowEx

    unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...

  4. 设计模式:观察者模式(Observer)

    定  义:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象.这个主题对象在状态发生 变化时,会通知所有观察者对象,使他们能够自动更新自己. 结构图: 抽象主题类: abstract c ...

  5. IAdaptable和IAdaptableFactory(转)

    先记在这里,回头研究下. 原文:http://blog.csdn.net/mini_snow/article/details/3877379 1. 简介和简单的实现 IAdapteable实际上在Ec ...

  6. iOS开发教程之:iPhone开发环境搭建

    安装条件: 硬件:一台拥有支持虚拟技术的64位双核处理器和2GB以上内存的PC. 注意:运行MAC OS,需要电脑支持虚拟技术(VT),安装时,需要将VT启动,在BIOS中开启. 软件: Window ...

  7. asp.net中session的原理及应用

    Session简介丶特性 1.Session是一种Web会话中的常用状态之一. 2.Session提供了一种把信息保存在服务器内存中的方式.他能储存任何数据类型,包含自定义对象. 3.每个客户端的Se ...

  8. jQuery判断某个元素是否存在某个样式

    <input type="button" class="new"/> $("input[name=new]").hasClass ...

  9. JavaScript:JavaScript事件的处理

    JavaScript事件处理 —————事件的处理流程: —————动态事件绑定: —————常用的事件处理. 1.事件的概念 在页面之中,会针对用户的每一个操作进行记录.在页面中的事件可以简单的理解 ...

  10. 如何查看自己的linux是32位还是64位

    查看linux是多少位的几位方法:查看linux机器是32位还是64位的方法:方法一:file /sbin/init 或者 file /bin/ls结果如下:/sbin/init: ELF 64-bi ...