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


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中限制IP段访问、禁止IP提交表单的代码
Apr 23 PHP
php设计模式 Interpreter(解释器模式)
Jun 26 PHP
php遍历目录输出目录及其下的所有文件示例
Jan 27 PHP
PHP调用JAVA的WebService简单实例
Mar 11 PHP
Centos下升级php5.2到php5.4全记录(编译安装)
Apr 03 PHP
php获取文件类型和文件信息的方法
Jul 10 PHP
PHPCMS手机站伪静态设置详细教程
Feb 06 PHP
PHP读取CSV大文件导入数据库的实例
Jul 24 PHP
PHP使用PDO访问oracle数据库的步骤详解
Sep 29 PHP
php intval函数用法总结
Apr 14 PHP
php实现的顺序线性表示例
May 04 PHP
php设计模式之职责链模式定义与用法经典示例
Sep 19 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
ThinkPHP关于session的操作方法汇总
2014/07/18 PHP
详解laravel passport OAuth2.0的4种模式
2019/11/04 PHP
JavaScript 核心参考教程 内置对象
2009/10/13 Javascript
js 判断脚本加载完毕的代码
2011/07/13 Javascript
js中的前绑定和后绑定详解
2013/08/01 Javascript
JavaScript监听和禁用浏览器回车事件实例
2015/01/31 Javascript
javaScript中Math()函数注意事项
2015/06/18 Javascript
非常漂亮的相册集 使用jquery制作相册集
2016/04/28 Javascript
jQuery Ajax实现跨域请求
2017/01/21 Javascript
完美实现js焦点轮播效果(一)
2017/03/07 Javascript
在vue中使用v-bind:class的选项卡方法
2018/09/27 Javascript
JavaScript实现的九种排序算法
2019/03/04 Javascript
JavaScript实现公告栏上下滚动效果
2020/03/13 Javascript
JS Array.from()将伪数组转换成数组的方法示例
2020/03/23 Javascript
微信小程序换肤功能实现代码(思路详解)
2020/08/25 Javascript
Python最长公共子串算法实例
2015/03/07 Python
Python简单删除目录下文件以及文件夹的方法
2015/05/27 Python
Python实现统计英文单词个数及字符串分割代码
2015/05/28 Python
python中管道用法入门实例
2015/06/04 Python
Python爬虫实现百度图片自动下载
2018/02/04 Python
django配置连接数据库及原生sql语句的使用方法
2019/03/03 Python
Python求解正态分布置信区间教程
2019/11/20 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
2020/01/02 Python
Python Selenium参数配置方法解析
2020/01/19 Python
Python可变对象与不可变对象原理解析
2020/02/25 Python
HTML5基于flash实现播放RTMP协议视频的示例代码
2020/12/04 HTML / CSS
美国床垫连锁店:Mattress Firm
2021/02/13 全球购物
垃圾回收的优点和原理
2014/05/16 面试题
环保倡议书格式范文
2014/05/14 职场文书
体操比赛口号
2014/06/10 职场文书
工资收入证明
2014/10/07 职场文书
2014年质量工作总结
2014/11/22 职场文书
如何制定一份可行的计划!
2019/06/21 职场文书
虚拟机linux端mysql数据库无法远程访问的解决办法
2021/05/26 MySQL
Mysql数据库表中为什么有索引却没有提高查询速度
2022/02/24 MySQL
Vue中Object.assign清空数据报错的解决方案
2022/03/03 Vue.js