当前位置: 首页 > 图文教程 > 网络编程 > PHP > 一个更简单的无限级分类菜单代码

PHP
PHP新手总结的PHP基础知识
php实现gb2312和unicode间编码转换
用php语言实现数据库连接详细代码介绍
详细解析 PHP 向 MySQL 发送数据过程
利用PHP V5开发多任务应用程序
详细讲解PHP中缓存技术的应用
php escapeshellcmd多字节编码漏洞
《PHP设计模式介绍》导言
《PHP设计模式介绍》第一章 编程惯用法
《PHP设计模式介绍》第二章 值对象模式
《PHP设计模式介绍》第三章 工厂模式
《PHP设计模式介绍》第四章 单件模式
《PHP设计模式介绍》第五章 注册模式
《PHP设计模式介绍》第六章 伪对象模式
《PHP设计模式介绍》第七章 策略模式
《PHP设计模式介绍》第八章 迭代器模式
《PHP设计模式介绍》第九章 观测模式
《PHP设计模式介绍》第十章 规范模式
《PHP设计模式介绍》第十一章 代理模式
《PHP设计模式介绍》第十二章 装饰器模式

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-13   浏览: 245 ::
收藏到网摘: n/a

首先要感谢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();//调用方法生成菜单
?>