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


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 相关文章推荐
MYSQL数据库初学者使用指南
Nov 16 PHP
php 字符串函数收集
Mar 29 PHP
PHP随机数生成代码与使用实例分析
Apr 08 PHP
CodeIgniter图像处理类的深入解析
Jun 17 PHP
探讨:array2xml和xml2array以及xml与array的互相转化
Jun 24 PHP
PHP 5.5 创建和验证哈希最简单的方法详解
Nov 07 PHP
PHP5中实现多态的两种方法实例分享
Apr 21 PHP
php通过array_push()函数添加多个变量到数组末尾的方法
Mar 18 PHP
分享PHP函数实现数字与文字分页代码
Jul 28 PHP
php 利用array_slice函数获取随机数组或前几条数据
Sep 30 PHP
thinkPHP中验证码的简单使用方法
Dec 26 PHP
php array_map使用自定义的函数处理数组中的每个值
Oct 26 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
iis下php mail函数的sendmail配置方法(官方推荐)
2012/04/25 PHP
PHP的Yii框架中使用数据库的配置和SQL操作实例教程
2016/03/17 PHP
yii2 modal弹窗之ActiveForm ajax表单异步验证
2016/06/13 PHP
不间断滚动JS打包类,基本可以实现所有的滚动效果,太强了
2007/12/08 Javascript
js树形控件脚本代码
2008/07/24 Javascript
js 省地市级联选择
2010/02/07 Javascript
仅IE不支持setTimeout/setInterval函数的第三个以上参数
2011/05/25 Javascript
js 窗口抖动示例
2013/09/04 Javascript
javascript实现动态加载CSS
2015/01/26 Javascript
深入分析Cookie的安全性问题
2015/03/01 Javascript
关注jquery技巧提高jquery技能(前端开发必学)
2015/11/02 Javascript
javascript截图 jQuery插件imgAreaSelect使用详解
2016/05/04 Javascript
简单实现jQuery上传图片显示预览功能
2020/06/29 jQuery
vue和react等项目中更简单的实现展开收起更多等效果示例
2018/02/22 Javascript
原生JS实现逼真的图片3D旋转效果详解
2019/02/16 Javascript
[02:36]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Magma 选手采访
2021/03/11 DOTA
python插入排序算法的实现代码
2013/11/21 Python
python装饰器使用方法实例
2013/11/21 Python
使用PDB模式调试Python程序介绍
2015/04/05 Python
Python 处理数据的实例详解
2017/08/10 Python
Python 存储字符串时节省空间的方法
2019/04/23 Python
PyCharm中代码字体大小调整方法
2019/07/29 Python
浅谈python opencv对图像颜色通道进行加减操作溢出
2020/06/03 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
2020/09/01 Python
利用Python实现学生信息管理系统的完整实例
2020/12/30 Python
socket.io 和canvas 实现的共享画板功能
2019/05/22 HTML / CSS
中学校庆方案
2014/03/17 职场文书
中学生励志演讲稿
2014/04/26 职场文书
爱牙日宣传活动总结
2015/02/05 职场文书
2016教师节问候语
2015/11/10 职场文书
技术转让协议书
2016/03/19 职场文书
请学会珍惜眼前,因为人生没有下辈子!
2019/11/12 职场文书
将Python代码打包成.exe可执行文件的完整步骤
2021/05/12 Python
Navicat for MySQL的使用教程详解
2021/05/27 MySQL
MySQL REVOKE实现删除用户权限
2021/06/18 MySQL
vue-treeselect的基本用法以及解决点击无法出现拉下菜单
2022/04/30 Vue.js