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


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调用三种数据库的方法(3)
Oct 09 PHP
php桌面中心(三) 修改数据库
Mar 11 PHP
php的access操作类
Apr 09 PHP
php 获得汉字拼音首字母的函数
Aug 01 PHP
php懒人函数 自动添加数据
Jun 28 PHP
php max_execution_time执行时间问题
Jul 17 PHP
php中使用sftp教程
Mar 30 PHP
php和editplus正则表达式去除空白行
Apr 17 PHP
分享3个php获取日历的函数
Sep 25 PHP
学习php设计模式 php实现访问者模式(Visitor)
Dec 07 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
Jan 12 PHP
PHP defined()函数的使用图文详解
Jul 20 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中register_globals参数为OFF和ON的区别(register_globals 使用详解)
2012/02/05 PHP
PHP基于数组实现的分页函数实例
2014/08/20 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
2015/05/27 PHP
PHP 500报错的快速解决方法
2016/12/14 PHP
学习YUI.Ext 第七天--关于View&amp;JSONView
2007/03/10 Javascript
基于jQuery的倒计时实现代码
2012/05/30 Javascript
IE下使用cloneNode注意事项分享
2012/11/22 Javascript
利用ajaxfileupload插件实现文件上传无刷新的具体方法
2013/06/08 Javascript
前台js调用后台方法示例
2013/12/02 Javascript
一个可以增加和删除行的table并可编辑表格中内容
2014/06/16 Javascript
JQuery遍历json数组的3种方法
2014/11/08 Javascript
jQuery-1.9.1源码分析系列(十)事件系统之事件体系结构
2015/11/19 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
2016/09/23 Javascript
BootStrap Table 后台数据绑定、特殊列处理、排序功能
2017/05/27 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
2017/07/02 Javascript
javascript中神奇的 Date对象小结
2017/10/12 Javascript
详解Vue.js项目API、Router配置拆分实践
2018/03/16 Javascript
解决vue 单文件组件中样式加载问题
2019/04/24 Javascript
JavaScript模块管理的简单实现方式详解
2019/06/15 Javascript
java和js实现的洗牌小程序
2019/09/30 Javascript
[38:21]2014 DOTA2国际邀请赛中国区预选赛5.21 TongFu VS LGD-CDEC
2014/05/22 DOTA
[16:27]DOTA2 HEROS教学视频教你分分钟做大人-艾欧
2014/06/11 DOTA
[02:57]DOTA2亚洲邀请赛小组赛第四日 赛事回顾
2015/02/02 DOTA
[48:21]Mski vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
基于python 处理中文路径的终极解决方法
2018/04/12 Python
python获取程序执行文件路径的方法(推荐)
2018/04/26 Python
Python日期时间Time模块实例详解
2019/04/15 Python
Python爬虫学习之翻译小程序
2019/07/30 Python
Windows 下python3.8环境安装教程图文详解
2020/03/11 Python
matplotlib 对坐标的控制,加图例注释的操作
2020/04/17 Python
python利用faker库批量生成测试数据
2020/10/15 Python
如何使用Python自动生成报表并以邮件发送
2020/10/15 Python
澳大利亚体育和露营装备在线/实体零售商:Find Sports
2020/06/03 全球购物
分公司总经理岗位职责
2014/08/03 职场文书
2015年公民道德宣传日活动总结
2015/03/23 职场文书
python实现MD5进行文件去重的示例代码
2021/07/09 Python