一个更简单的无限级分类菜单代码


Posted in PHP onJanuary 16, 2007

首先要感谢terry39的指点,元旦闲来无事,我就把他所讲的原理简单实现一下,这个程序的关键就在于数据表的设计很有特色,不用递归,依靠个简单SQL语句就能列出菜单,看看这个数据表怎么设计的:
数据库字段大概如下:
-----------------------------------------------------------------------------------
id              编号
fid             父分类编号
name         分类名
path          分类路径,以 id 为节点,组成类似    ,1,2,3,4, 这样的字符串
----------------------------------------------------------------------------------

可以假设有如下的数据

id      fid          name             path
----------------------------------------------------
1       0           分类1             ,1,
2       0           分类2             ,2,
3       1           分类1-1          ,1,3,
4       1           分类1-2          ,1,4,
5       2           分类2-1          ,2,5,
6       4           分类1-2-1       ,1,4,6,
----------------------------------------------------
这次偷懒,我只用一个页面,好在代码不长,全部代码用类封装的(不是必要,而是自己也想熟悉一下OO,呵呵!),来看看页面代码:

<?php /************************************** 
  页面:menu.php 
  作者:辉老大 
  功能:定义数据库操作及生成菜单列表类 
**************************************/ 
class menu{ 
       //创建构造函数,作用:数据库连接并选择相应数据库 
       public function __construct(){ 
           $dbhost     = "localhost"; 
           $dbuser     = "root"; 
           $dbpassword = "7529639"; 
           $dbname     = "menu"; 
           mysql_connect($dbhost,$dbuser,$dbpassword) or die("error!"); 
           mysql_query("SET NAMES 'GBK'"); 
           mysql_select_db($dbname); 
       } 
       //执行SQL语句函数 
       private function query($sql){ 
           return mysql_query($sql); 
       } 
       //取得结果集数组函数 
       private function loop_query($result){ 
           return mysql_fetch_array($result); 
       } 
       //列出菜单列表函数 
       public function menulist(){ 
           $sql="select * from list order by path"; 
           $result=$this->query($sql); 
            while($rows=$this->loop_query($result)){ 
             if(substr_count($rows['path'],',')>2){ 
               for($i=0;$i<(substr_count($rows['path'],',')-2);$i++) 
               echo ' '; 
              } 
             echo $rows['name'].'<br>'; 
            } 
       } 
       //创建析构函数,作用:关闭数据库连接 
       public function __destruct(){ 
           return mysql_close(); 
       } 
   } 
  $db=new menu();//生成实例 
  $db->menulist();//调用方法生成菜单 
?> 

一个更简单的无限级分类菜单代码
PHP 相关文章推荐
基于PHP与XML的PDF文档生成技术
Oct 09 PHP
php REMOTE_ADDR之获取访客IP的代码
Apr 22 PHP
发款php蜘蛛统计插件只要有mysql就可用
Oct 12 PHP
php中通过curl smtp发送邮件
Jun 05 PHP
PHP统计二维数组元素个数的方法
Nov 12 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
Dec 24 PHP
CodeIgniter中使用cookie的三种方式详解
Jul 18 PHP
ThinkPHP中I(),U(),$this-&gt;post()等函数用法
Nov 22 PHP
php版微信公众平台实现预约提交后发送email的方法
Sep 26 PHP
详解EventDispatcher事件分发组件
Dec 25 PHP
PHP实现类似于C语言的文件读取及解析功能
Sep 01 PHP
PHP实现类似题库抽题效果
Aug 16 PHP
解决中英文字符串长度问题函数
Jan 16 #PHP
在数据量大(超过10万)的情况下
Jan 15 #PHP
php防注
Jan 15 #PHP
PHP 的 __FILE__ 常量
Jan 15 #PHP
MySQL相关说明
Jan 15 #PHP
mysql_fetch_assoc和mysql_fetch_row的功能加起来就是mysql_fetch_array
Jan 15 #PHP
关于mysql 字段的那个点为是定界符
Jan 15 #PHP
You might like
PHP中最容易忘记的一些知识点总结
2013/04/28 PHP
Zend Framework教程之Zend_Db_Table表关联实例详解
2016/03/23 PHP
php实现头像上传预览功能
2017/04/27 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
2018/04/08 PHP
javascript 写类方式之五
2009/07/05 Javascript
JQuery与iframe交互实现代码
2009/12/24 Javascript
Javascript中的window.event.keyCode使用介绍
2011/04/26 Javascript
学习从实践开始之jQuery插件开发 对话框插件开发
2012/04/26 Javascript
jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
2013/03/05 Javascript
js编码、解码函数介绍及其使用示例
2013/09/05 Javascript
js与C#进行时间戳转换
2014/11/14 Javascript
JavaScript中通过prototype属性共享属性和方法的技巧实例
2015/03/13 Javascript
js实现简单div拖拽功能实例
2015/05/12 Javascript
layer弹出层框架alert与msg详解
2017/03/14 Javascript
配置nodejs环境的方法
2017/05/13 NodeJs
微信小程序 跳转传递数据的实例
2017/07/06 Javascript
JavaScript动态添加数据到表单并提交的几种方式
2019/06/26 Javascript
vue实现鼠标经过动画
2019/10/16 Javascript
Pyhton中防止SQL注入的方法
2015/02/05 Python
python 调用HBase的简单实例
2016/12/18 Python
Python设计模式之门面模式简单示例
2018/01/09 Python
python 对txt中每行内容进行批量替换的方法
2018/07/11 Python
对PyTorch torch.stack的实例讲解
2018/07/30 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
python hook监听事件详解
2018/10/25 Python
django最快程序开发流程详解
2019/07/19 Python
将labelme格式数据转化为标准的coco数据集格式方式
2020/02/17 Python
如何在Python对Excel进行读取
2020/06/04 Python
css3实例教程 一款纯css3实现的环形导航菜单
2014/10/20 HTML / CSS
保密工作责任书
2014/04/16 职场文书
个人作风建设心得体会
2014/10/22 职场文书
不尊敬老师的检讨书
2014/12/21 职场文书
个人先进材料范文
2014/12/30 职场文书
试用期辞职信范文
2015/03/02 职场文书
家长意见和建议怎么写
2015/06/04 职场文书
使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)
2021/06/09 Vue.js