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


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输出控制功能在简繁体转换中的应用
Oct 09 PHP
PHP 开发环境配置(Zend Studio)
Apr 28 PHP
php运行出现Call to undefined function curl_init()的解决方法
Nov 02 PHP
PHP stripos()函数及注意事项的分析
Jun 08 PHP
destoon供应信息title调用出公司名称的方法
Aug 22 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
Mar 02 PHP
深入剖析浏览器退出之后php还会继续执行么
May 17 PHP
PHP正则删除HTML代码中宽高样式的方法
Jun 12 PHP
Yii2.0多文件上传实例说明
Jul 24 PHP
PHP使用ActiveMQ实例
Feb 05 PHP
搜索附近的人PHP实现代码
Feb 11 PHP
PHP超全局变量实现原理及代码解析
Sep 01 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 spl_autoload_register实现自动加载研究
2011/12/06 PHP
基于linnux+phantomjs实现生成图片格式的网页快照
2015/04/15 PHP
PHP实现图片自动清理的方法
2015/07/08 PHP
PHP实现自动发送邮件功能代码(qq 邮箱)
2017/08/18 PHP
javascript模拟订火车票和退票示例
2014/04/24 Javascript
js实现jquery的offset()方法实例
2015/01/10 Javascript
jQuery判断元素上是否绑定了指定事件的方法
2015/03/17 Javascript
jQuery实现对无序列表的排序功能(附demo源码下载)
2016/06/25 Javascript
jQuery实现页面下拉100像素出现悬浮窗口的方法
2016/09/05 Javascript
Bootstrap Table表格一直加载(load)不了数据的快速解决方法
2016/09/17 Javascript
Bootstrap Table使用整理(二)
2017/06/09 Javascript
js中的事件委托或是事件代理使用详解
2017/06/23 Javascript
Vue项目中引入外部文件的方法(css、js、less)
2017/07/24 Javascript
详解JavaScript中关于this指向的4种情况
2019/04/18 Javascript
运用js实现图层拖拽的功能
2019/05/24 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
微信小程序实现加入购物车滑动轨迹
2020/11/18 Javascript
详解Vue 的异常处理机制
2020/11/30 Vue.js
jQuery实现穿梭框效果
2021/01/19 jQuery
python下调用pytesseract识别某网站验证码的实现方法
2016/06/06 Python
python清理子进程机制剖析
2017/11/23 Python
Selenium元素的常用操作方法分析
2018/08/10 Python
对Python3 pyc 文件的使用详解
2019/02/16 Python
Python pandas.DataFrame 找出有空值的行
2019/09/09 Python
使用Pycharm分段执行代码
2020/04/15 Python
laravel使用redis队列实例讲解
2021/03/23 PHP
校园达人秀策划书
2014/01/12 职场文书
《夕阳真美》教学反思
2014/04/27 职场文书
入职担保书范文
2014/05/21 职场文书
党员理论学习心得体会
2016/01/21 职场文书
来探秘“德国中小企业”的成功之道
2019/07/26 职场文书
React列表栏及购物车组件使用详解
2021/06/28 Javascript
MySQL令人大跌眼镜的隐式转换
2021/08/23 MySQL
CSS+HTML 实现顶部导航栏功能
2021/08/30 HTML / CSS
CSS使用伪类控制边框长度的方法
2022/01/18 HTML / CSS
Redis批量生成数据的实现
2022/06/05 Redis