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


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 高手之路(二)
Oct 09 PHP
PHP产生随机字符串函数
Dec 06 PHP
PHP高级对象构建 工厂模式的使用
Feb 05 PHP
php+highchats生成动态统计图
May 21 PHP
PHP实现显示照片exif信息的方法
Jul 11 PHP
php数组转成json格式的方法
Mar 09 PHP
PHP面试题之文件目录操作
Oct 15 PHP
PHP读取PPT文件的方法
Dec 10 PHP
eclipse php wamp配置教程
Jun 30 PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
Dec 05 PHP
Laravel基础-关于引入公共文件的两种方式
Oct 18 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中的四舍五入函数代码(floor函数、ceil函数、round与intval)
2014/07/14 PHP
php计算税后工资的方法
2015/07/28 PHP
thinkPHP5.0框架自动加载机制分析
2017/03/18 PHP
彻底搞懂JS无缝滚动代码
2007/01/03 Javascript
javascript+dom树型菜单类,希望朋友们一起进步
2007/05/03 Javascript
js 完美图片新闻轮转效果,腾讯大粤网首页图片轮转改造而来
2011/11/21 Javascript
Jquery上传插件 uploadify v3.1使用说明
2012/06/18 Javascript
jquery事件与函数的使用介绍
2013/09/29 Javascript
jquery操作angularjs对象
2015/06/26 Javascript
JavaScript中数组的合并以及排序实现示例
2015/10/24 Javascript
用jQuery向div中添加Html文本内容的简单实现
2016/07/13 Javascript
使用json来定义函数,在里面可以定义多个函数的实现方法
2016/10/28 Javascript
angular分页指令操作
2017/01/09 Javascript
jQuery编写设置和获取颜色的插件
2017/01/09 Javascript
jquery根据name取得select选中的值实例(超简单)
2018/01/25 jQuery
nodejs使用async模块同步执行的方法
2019/03/02 NodeJs
Python写的服务监控程序实例
2015/01/31 Python
详解Python中contextlib上下文管理模块的用法
2016/06/28 Python
浅谈python中列表、字符串、字典的常用操作
2017/09/19 Python
使用python读取csv文件快速插入数据库的实例
2018/06/21 Python
Python使用tkinter模块实现推箱子游戏
2019/10/08 Python
python3 动态模块导入与全局变量使用实例
2019/12/22 Python
Python面向对象之多态原理与用法案例分析
2019/12/30 Python
python pandas dataframe 去重函数的具体使用
2020/07/20 Python
Django如何使用asyncio协程和ThreadPoolExecutor多线程
2020/10/12 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
联想美国官方商城:Lenovo美国
2017/06/19 全球购物
求职推荐信范文
2013/12/01 职场文书
自我评价范文
2013/12/22 职场文书
记账会计岗位职责
2014/06/16 职场文书
幸福家庭标语
2014/06/27 职场文书
出生公证书
2015/01/23 职场文书
企业员工辞职信范文
2015/05/12 职场文书
重阳节活动主持词
2015/07/04 职场文书
golang 实现Location跳转方式
2021/05/02 Golang
SpringCloud之@FeignClient()注解的使用方式
2021/09/25 Java/Android