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


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基础学习笔记
Mar 18 PHP
PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍
Jul 03 PHP
php牛逼的面试题分享
Jan 18 PHP
探讨Hessian在PHP中的使用分析
Jun 13 PHP
探讨:如何通过stats命令分析Memcached的内部状态
Jun 14 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
Jun 19 PHP
ThinkPHP实现更新数据实例详解(demo)
Jun 29 PHP
详解PHP处理字符串类似indexof的方法函数
Jun 11 PHP
PHP PDOStatement::columnCount讲解
Jan 30 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
Jan 26 PHP
PHP中isset、empty的用法与区别示例详解
Nov 05 PHP
PHP实现简单注册登录系统
Dec 28 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 date()函数警告: It is not safe to rely on the system解决方法
2014/08/20 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
2016/04/15 PHP
php版微信支付api.mch.weixin.qq.com域名解析慢原因与解决方法
2016/10/12 PHP
php框架CodeIgniter使用redis的方法分析
2018/04/13 PHP
掌握PHP垃圾回收机制详解
2019/03/13 PHP
IE与firefox之jquery用法区别
2008/10/03 Javascript
ExtJS 2.0实用简明教程 之Ext类库简介
2009/04/29 Javascript
兼容IE和FF的js脚本代码小结(比较常用)
2010/12/06 Javascript
javascript判断iphone/android手机横竖屏模式的函数
2011/12/20 Javascript
多个表单中如何获得这个文件上传的网址实现js代码
2013/03/25 Javascript
jquery中get和post的简单实例
2014/02/04 Javascript
Flash图片上传组件 swfupload使用指南
2015/03/14 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
2017/12/20 jQuery
详解如何在vue项目中引入elementUI组件
2018/02/11 Javascript
JS实现前端页面的搜索功能
2018/06/12 Javascript
JS实现显示当前日期的实例代码
2018/07/03 Javascript
使用node-media-server搭建一个简易的流媒体服务器
2021/01/20 Javascript
[33:23]VG vs Pain 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[43:43]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第三场 11.29
2020/12/02 DOTA
python3访问sina首页中文的处理方法
2014/02/24 Python
Python线程中对join方法的运用的教程
2015/04/09 Python
Python文本相似性计算之编辑距离详解
2016/11/28 Python
pandas如何处理缺失值
2019/07/31 Python
Python装饰器原理与基本用法分析
2020/01/07 Python
python lambda函数及三个常用的高阶函数
2020/02/05 Python
Python post请求实现代码实例
2020/02/28 Python
PyQt5实现仿QQ贴边隐藏功能的实例代码
2020/05/24 Python
python如何运行js语句
2020/09/09 Python
canvas版人体时钟的实现示例
2021/01/29 HTML / CSS
一篇.NET面试题
2014/09/29 面试题
市场营销管理毕业生自荐信
2014/03/03 职场文书
职工代表大会主持词
2014/04/01 职场文书
作文批改评语大全
2014/04/23 职场文书
「约定的梦幻岛」作画发布诺曼生日新绘
2022/03/21 日漫
Java 超详细讲解十大排序算法面试无忧
2022/04/08 Java/Android
Win11 Beta 预览版 22621.575 和 22622.575更新补丁KB5016694发布(附更新内容大全)
2022/08/14 数码科技