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


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 相关文章推荐
如何将一个表单同时提交到两个地方处理
Oct 09 PHP
php中的实现trim函数代码
Mar 19 PHP
怎样去阅读一份php源代码
Aug 21 PHP
php zip文件解压类代码
Dec 02 PHP
php记录日志的实现代码
Aug 08 PHP
WordPress中调试缩略图的相关PHP函数使用解析
Jan 07 PHP
ThinkPHP表单令牌错误的相关解决方法分析
May 20 PHP
通过php动态传数据到highcharts
Apr 05 PHP
PHP cURL获取微信公众号access_token的实例
Apr 28 PHP
php成功操作redis cluster集群的实例教程
Jan 13 PHP
PHP的mysqli_thread_id()函数讲解
Jan 24 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
Jan 22 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的call_user_func传reference引发的思考
2010/07/23 PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
PHP常用的文件操作函数经典收藏
2013/04/02 PHP
PHP字符串的连接的简单实例
2013/12/30 PHP
php检查字符串中是否包含7位GSM字符的方法
2015/03/17 PHP
jQuery ajax cache缓存问题
2010/07/01 Javascript
js综合应用实例简单的表格统计
2013/09/03 Javascript
js的匿名函数使用介绍
2013/12/11 Javascript
Jquery.Form 异步提交表单的简单实例
2014/03/03 Javascript
jquery向上向下取整适合分页查询
2014/09/06 Javascript
jQuery+Ajax实现无刷新分页
2015/10/30 Javascript
深入理解JavaScript 函数
2016/06/06 Javascript
概述jQuery中的ajax方法
2016/12/16 Javascript
使用canvas及js简单生成验证码方法
2017/04/02 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
2017/05/19 Javascript
vue之数据交互实例代码
2017/06/20 Javascript
react router 4.0以上的路由应用详解
2017/09/21 Javascript
Angular angular-file-upload文件上传的示例代码
2018/08/23 Javascript
vue template中slot-scope/scope的使用方法
2018/09/06 Javascript
详解Vue项目部署遇到的问题及解决方案
2019/01/11 Javascript
ES6知识点整理之Proxy的应用实例详解
2019/04/16 Javascript
js实现登录时记住密码的方法分析
2020/04/05 Javascript
gearman的安装启动及python API使用实例
2014/07/08 Python
进一步探究Python的装饰器的运用
2015/05/05 Python
听歌识曲--用python实现一个音乐检索器的功能
2016/11/15 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
2020/06/17 Python
使用npy转image图像并保存的实例
2020/07/01 Python
纯CSS改变webkit内核浏览器的滚动条样式
2014/04/17 HTML / CSS
详解CSS3阴影 box-shadow的使用和技巧总结
2016/12/03 HTML / CSS
翻新二手苹果产品的网络领导者:Mac of all Trades
2017/12/19 全球购物
2014县委书记四风对照检查材料思想汇报
2014/09/21 职场文书
战略性融资合作协议书范本
2014/10/17 职场文书
语文复习计划
2015/01/19 职场文书
2015年人民调解工作总结
2015/05/18 职场文书
初中数学教学随笔
2015/08/15 职场文书
Redis+AOP+自定义注解实现限流
2022/06/28 Redis