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


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
不用数据库的多用户文件自由上传投票系统(1)
Oct 09 PHP
PHP在线生成二维码代码(google api)
Jun 03 PHP
php四种基础算法代码实例
Oct 29 PHP
php防止网站被刷新的方法汇总
Dec 01 PHP
CodeIgniter配置之autoload.php自动加载用法分析
Jan 20 PHP
PHP的Yii框架中Model模型的学习教程
Mar 29 PHP
CI框架整合smarty步骤详解
May 19 PHP
php编译安装php-amq扩展简明教程
Jun 25 PHP
详解在YII2框架中使用UEditor编辑器发布文章
Nov 02 PHP
laravel框架 laravel-admin上传图片到oss的方法
Oct 13 PHP
YII2 全局异常处理深入讲解
Mar 24 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 Ubb代码编辑器函数代码
2012/07/05 PHP
PHP数组无限分级数据的层级化处理代码
2012/12/29 PHP
通过table标签,PHP输出EXCEL的实现方法
2013/07/24 PHP
解决js正则匹配换行问题实现代码
2012/12/10 Javascript
Web程序员必备的7个JavaScript函数
2016/06/14 Javascript
js基础之DOM中元素对象的属性方法详解
2016/10/28 Javascript
Web前端框架Angular4.0.0 正式版发布
2017/03/28 Javascript
详解ElementUI之表单验证、数据绑定、路由跳转
2017/06/21 Javascript
关于使用js算总价的问题
2017/06/23 Javascript
JS沙箱模式实例分析
2017/09/04 Javascript
js 提取某()特殊字符串长度的实例
2017/12/06 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
使用JSON格式提交数据到服务端的实例代码
2018/04/01 Javascript
vue webpack打包后图片路径错误的完美解决方法
2018/12/07 Javascript
非常漂亮的js烟花效果
2020/03/10 Javascript
vue实现点击出现操作弹出框的示例
2020/11/05 Javascript
使用PYTHON创建XML文档
2012/03/01 Python
python中WSGI是什么,Python应用WSGI详解
2017/11/24 Python
python+django加载静态网页模板解析
2017/12/12 Python
python 在屏幕上逐字显示一行字的实例
2018/12/24 Python
python实现ip地址查询经纬度定位详解
2019/08/30 Python
python 函数的缺省参数使用注意事项分析
2019/09/17 Python
基于YUV 数据格式详解及python实现方式
2019/12/09 Python
Pyqt5自适应布局实例
2019/12/13 Python
pycharm实现在子类中添加一个父类没有的属性
2020/03/12 Python
在Django中自定义filter并在template中的使用详解
2020/05/19 Python
ASOS比利时:英国线上零售商及自有品牌
2018/07/29 全球购物
改作风抓落实促发展心得体会
2014/09/10 职场文书
大专生自我鉴定怎么写
2014/09/16 职场文书
群众路线个人剖析材料及整改措施
2014/11/04 职场文书
安全承诺书
2015/01/19 职场文书
2015年综治宣传月活动总结
2015/03/25 职场文书
2016教师国培研修感言
2015/12/08 职场文书
会计手工模拟做账心得体会
2016/01/22 职场文书
Java字符串逆序方法详情
2022/03/21 Java/Android
Nginx报404错误的详细解决方法
2022/07/23 Servers