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


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
实用函数5
Nov 08 PHP
按上下级层次关系输出内容的PHP代码
Jul 17 PHP
让你成为更出色的PHP开发者的10个技巧
Feb 25 PHP
使用php实现下载生成某链接快捷方式的解决方法
May 07 PHP
在Ubuntu 14.04上部署 PHP 环境及 WordPress
Sep 02 PHP
php使用cookie保存用户登录的用户名实例
Jan 26 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
Dec 17 PHP
php实现批量修改文件名称的方法
Jul 23 PHP
PHP设计模式之工厂模式与单例模式
Sep 28 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
Apr 08 PHP
Yii框架分页技术实例分析
Aug 30 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下读取文本文件的代码
2008/07/02 PHP
php实现面包屑导航例子分享
2015/12/19 PHP
js 限制input只能输入数字、字母和汉字等等
2013/12/18 Javascript
判断文件是否正在被使用的JS代码
2013/12/21 Javascript
js子页面获取父页面数据示例
2014/05/15 Javascript
javascript正则表达式基础知识入门
2015/04/20 Javascript
在JavaScript的AngularJS库中进行单元测试的方法
2015/06/23 Javascript
js调出上下文菜单的实例
2015/12/17 Javascript
jQuery EasyUI 入门必看
2016/06/03 Javascript
关于js二维数组和多维数组的定义声明(详解)
2016/10/02 Javascript
js记录点击某个按钮的次数-刷新次数为初始状态的实例
2017/02/15 Javascript
JS中使用media实现响应式布局
2017/08/04 Javascript
浅谈Webpack下多环境配置的思路
2018/06/27 Javascript
脚手架vue-cli工程webpack的基本用法详解
2018/09/29 Javascript
Angular请求防抖处理第一次请求失效问题
2019/05/17 Javascript
ElementUI Tag组件实现多标签生成的方法示例
2019/07/08 Javascript
JS模拟浏览器实现全局搜索功能
2019/09/11 Javascript
layui禁用侧边导航栏点击事件的解决方法
2019/09/25 Javascript
Node.js 深度调试方法解析
2020/07/28 Javascript
redis之django-redis的简单缓存使用
2018/06/07 Python
python常用数据重复项处理方法
2019/11/22 Python
Pytorch之保存读取模型实例
2019/12/30 Python
pyecharts动态轨迹图的实现示例
2020/04/17 Python
Python接口测试数据库封装实现原理
2020/05/09 Python
详解python程序中的多任务
2020/09/16 Python
Python+OpenCV图像处理——实现直线检测
2020/10/23 Python
CSS3 中的@keyframes介绍
2014/09/02 HTML / CSS
奢华时尚的独特视角:La Garçonne
2018/06/07 全球购物
荷兰在线钓鱼商店:Raven
2019/06/26 全球购物
校园环保标语
2014/06/13 职场文书
理财学专业自荐书
2014/06/28 职场文书
给女朋友道歉的话大全
2015/01/20 职场文书
工程催款通知书
2015/04/17 职场文书
2015年学校少先队工作总结
2015/07/20 职场文书
离婚协议书范文2016
2016/03/18 职场文书
Redis中有序集合的内部实现方式的详细介绍
2022/03/16 Redis