간단한 무한레벨 카테고리 메뉴 코드
우선 설날에 할 일이 없어서 terry39님께 감사의 말씀을 전하고 싶습니다. 그가 말한 원리를 구현하면 됩니다. 이 프로그램의 핵심은 데이터 테이블의 디자인이 매우 독특하다는 것입니다. 재귀 없이 간단한 SQL 문으로 메뉴를 나열할 수 있습니다.
데이터베이스 필드는 대략 다음과 같습니다.
--- --------------------- ---------------- ----------------------------------
id 번호
fid 상위 카테고리 번호
name 카테고리 이름
path는 id를 노드로 하는 분류 경로이며,1,2,3,4,
와 유사한 문자열을 형성합니다. --------- --------------- --------- ----------
다음과 같은 데이터가 있다고 추측할 수 있습니다
id fid 이름 경로
--------------- ----------- -------------
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 classmenu{ //创建构造函数,作用:数据库连接并选择相应数据库 publicfunction__construct(){ $dbhost="localhost"; $dbuser="root"; $dbpassword="7529639"; $dbname="menu"; mysql_connect($dbhost,$dbuser,$dbpassword)ordie("error!"); mysql_query("SETNAMES'GBK'"); mysql_select_db($dbname); } //执行SQL语句函数 privatefunctionquery($sql){ returnmysql_query($sql); } //取得结果集数组函数 privatefunctionloop_query($result){ returnmysql_fetch_array($result); } //列出菜单列表函数 publicfunctionmenulist(){ $sql="select*fromlistorderbypath"; $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>'; } } //创建析构函数,作用:关闭数据库连接 publicfunction__destruct(){ returnmysql_close(); } } $db=newmenu();//生成实例 $db->menulist();//调用方法生成菜单 ?>