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


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&amp;&amp;mysql)一
Oct 09 PHP
php桌面中心(一) 创建数据库
Mar 11 PHP
php htmlspecialchars()与shtmlspecialchars()函数的深入分析
Jun 05 PHP
PHP代码优化之成员变量获取速度对比
Feb 28 PHP
php获取客户端电脑屏幕参数的方法
Jan 09 PHP
Cygwin中安装PHP方法步骤
Jul 04 PHP
dvwa+xampp搭建显示乱码的问题及解决方案
Aug 23 PHP
PHPExcel简单读取excel文件示例
May 26 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
Aug 17 PHP
PHP大文件分片上传的实现方法
Oct 28 PHP
PHP使用PDO实现mysql防注入功能详解
Dec 20 PHP
PHP 构造函数和析构函数原理与用法分析
Apr 21 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常用技巧汇总
2016/03/04 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
2016/05/11 PHP
关于PHP中字符串与多进制转换函数的实例代码
2016/11/03 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
PHP实现微信退款功能
2018/10/02 PHP
初学JavaScript_03(ExtJs Grid的简单使用)
2008/10/02 Javascript
MC Dialog js弹出层 完美兼容多浏览器(5.6更新)
2010/05/06 Javascript
js获取IP和PcName(IE)在vs中可用
2013/08/02 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
js控制输入框获得和失去焦点时状态显示的方法
2015/01/30 Javascript
javascript中的3种继承实现方法
2016/01/27 Javascript
Vue2.0 slot分发内容与props验证的方法
2017/12/12 Javascript
vue.js配合$.post从后台获取数据简单demo分享
2018/08/11 Javascript
详解在vue-cli项目下简单使用mockjs模拟数据
2018/10/19 Javascript
js实现网页同时进行多个倒计时功能
2019/02/25 Javascript
vue 自动化路由实现代码
2019/09/03 Javascript
vue 对axios get pust put delete封装的实例代码
2020/01/05 Javascript
解决Vue的项目使用Element ui 走马灯无法实现的问题
2020/08/03 Javascript
[02:25]专访DOTA2负责人Erik 国际邀请赛暂不会离开西雅
2014/07/21 DOTA
[36:20]KG vs SECRET 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python实现提取谷歌音乐搜索结果的方法
2015/07/10 Python
实例详解Python模块decimal
2019/06/26 Python
pandas取出重复数据的方法
2019/07/04 Python
Python数据处理篇之Sympy系列(五)---解方程
2019/10/12 Python
基于Python绘制个人足迹地图
2020/06/01 Python
美国最大的宠物药店:1-800-PetMeds
2016/10/02 全球购物
澳大利亚连衣裙和女装在线:Esther
2017/11/11 全球购物
Vilebrequin欧洲官网:法国豪华泳装品牌(男士沙滩裤)
2018/04/14 全球购物
英国复古和经典球衣网站:Vintage Football Shirts
2018/10/05 全球购物
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
毕业生护理专业个人求职信范文
2014/01/04 职场文书
党员个人剖析材料2014
2014/10/08 职场文书
地道战观后感
2015/06/04 职场文书
大学开学典礼新闻稿
2015/07/17 职场文书
解决python3安装pandas出错的问题
2021/05/20 Python
JavaScript canvas实现流星特效
2021/05/20 Javascript