比较简单实用的PHP无限分类源码分享(思路不错)
2015-01-24信息快讯网
关于PHP的无限分类代码,网上已经有很多了,讲解的也很到位,在这里我分享一下我用着很顺手的一个
下面一段代码是创建相应数据库的sql代码:////////////// //////无限分类的数据库设计及样例 ////////////// mysql> create database db_kind; Query OK, 1 row affected mysql> use db_kind; Database changed mysql> create table tb_kind( -> id int not null auto_increment primary key, -> pid int, -> path varchar(200) -> ); Query OK, 0 rows affected mysql> insert into tb_kind values(null,"新闻",0,0); Query OK, 1 row affected mysql> insert into tb_kind values(null,"视频",0,0); Query OK, 1 row affected mysql> insert into tb_kind values(null,"图片",0,0); Query OK, 1 row affected mysql> insert into tb_kind values(null,"博客",0,0); Query OK, 1 row affected mysql> insert into tb_kind values(null,"体育新闻",1,"0-1"); Query OK, 1 row affected mysql> insert into tb_kind values(null,"娱乐新闻",1,"0-1"); Query OK, 1 row affected mysql> insert into tb_kind values(null,"财经新闻",1,"0-1"); Query OK, 1 row affected mysql> select * from db_kind; ERROR 1146 : Table 'db_kind.db_kind' doesnot exist mysql> select * from tb _kind; +----+----------+-----+------+ | id | pname | pid | path | +----+----------+-----+------+ | 1 | 新闻 | 0 | 0 | | 2 | 视频 | 0 | 0 | | 3 | 图片 | 0 | 0 | | 4 | 博客 | 0 | 0 | | 5 | 体育新闻 | 1 | 0-1 | | 6 | 娱乐新闻 | 1 | 0-1 | | 7 | 财经新闻 | 1 | 0-1 | +----+----------+-----+------+ 7 rows in set mysql> insert into tb_kind values(null,"篮球新闻",5,"0-1-5"); Query OK, 1 row affected mysql> insert into tb_kind values(null,"足球新闻",5,"0-1-5"); Query OK, 1 row affected mysql> select * from tb_kind; +----+----------+-----+-------+ | id | pname | pid | path | +----+----------+-----+-------+ | 1 | 新闻 | 0 | 0 | | 2 | 视频 | 0 | 0 | | 3 | 图片 | 0 | 0 | | 4 | 博客 | 0 | 0 | | 5 | 体育新闻 | 1 | 0-1 | | 6 | 娱乐新闻 | 1 | 0-1 | | 7 | 财经新闻 | 1 | 0-1 | | 8 | 篮球新闻 | 5 | 0-1-5 | | 9 | 足球新闻 | 5 | 0-1-5 | +----+----------+-----+-------+ 9 rows in set mysql> insert into tb_kind values(null,"NBA",8,"0-1-5-8"); Query OK, 1 row affected mysql> insert into tb_kind values(null,"CBA",8,"0-1-5-8"); Query OK, 1 row affected mysql> select * from tb_kind; +----+----------+-----+---------+ | id | pname | pid | path | +----+----------+-----+---------+ | 1 | 新闻 | 0 | 0 | | 2 | 视频 | 0 | 0 | | 3 | 图片 | 0 | 0 | | 4 | 博客 | 0 | 0 | | 5 | 体育新闻 | 1 | 0-1 | | 6 | 娱乐新闻 | 1 | 0-1 | | 7 | 财经新闻 | 1 | 0-1 | | 8 | 篮球新闻 | 5 | 0-1-5 | | 9 | 足球新闻 | 5 | 0-1-5 | | 10 | NBA | 8 | 0-1-5-8 | | 11 | CBA | 8 | 0-1-5-8 | +----+----------+-----+---------+ 11 rows in set mysql> select concat(path,"-",id) from tb_kind; +---------------------+ | concat(path,"-",id) | +---------------------+ | 0-1 | | 0-2 | | 0-3 | | 0-4 | | 0-1-5 | | 0-1-6 | | 0-1-7 | | 0-1-5-8 | | 0-1-5-9 | | 0-1-5-8-10 | | 0-1-5-8-11 | +---------------------+ 11 rows in set mysql> select concat(path,"-",id) from tb_kind; +---------------------+ | concat(path,"-",id) | +---------------------+ | 0-1 | | 0-2 | | 0-3 | | 0-4 | | 0-1-5 | | 0-1-6 | | 0-1-7 | | 0-1-5-8 | | 0-1-5-9 | | 0-1-5-8-10 | | 0-1-5-8-11 | +---------------------+ 11 rows in set mysql> select concat(path,"-",id) as abs from tb_kind order by abs.path; ERROR 1054 : Unknown column 'abs.path' in 'order clause' mysql> select concat(path,"-",id) as abs from tb_kind order by abs +------------+ | abs | +------------+ | 0-1 | | 0-1-5 | | 0-1-5-8 | | 0-1-5-8-10 | | 0-1-5-8-11 | | 0-1-5-9 | | 0-1-6 | | 0-1-7 | | 0-2 | | 0-3 | | 0-4 | +------------+ 11 rows in set mysql> select concat(path,"-",id) as,id,name,path abs from tb_kind order by abs; ERROR 1064 : You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'id,name,path abs from tb_kind order by abs' at line 1 mysql> select concat(path,"-",id) as abs, id,pname,path abs from tb_kind order by abs; +------------+----+----------+---------+ | abs | id | pname | abs | +------------+----+----------+---------+ | 0-1 | 1 | 新闻 | 0 | | 0-1-5 | 5 | 体育新闻 | 0-1 | | 0-1-5-8 | 8 | 篮球新闻 | 0-1-5 | | 0-1-5-8-10 | 10 | NBA | 0-1-5-8 | | 0-1-5-8-11 | 11 | CBA | 0-1-5-8 | | 0-1-5-9 | 9 | 足球新闻 | 0-1-5 | | 0-1-6 | 6 | 娱乐新闻 | 0-1 | | 0-1-7 | 7 | 财经新闻 | 0-1 | | 0-2 | 2 | 视频 | 0 | | 0-3 | 3 | 图片 | 0 | | 0-4 | 4 | 博客 | 0 | +------------+----+----------+---------+ 11 rows in set mysql>
下面是php源文件:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> </head> <body> <!--显示结果 新闻 体育新闻 篮球新闻 NBA CBA 足球新闻 娱乐新闻 财经新闻 视频 图片 博客 --> <? $conn=mysql_connect("localhost","root","root"); mysql_select_db("db_kind"); mysql_query("set names utf8"); $sql="select concat(path,'-',id) as abspath,id,pname,path from tb_kind order by abspath"; $rs=mysql_query($sql); while($result=mysql_fetch_assoc($rs)){ $num=count(explode("-",$result[path]))-1; $new_str=str_repeat("---",$num); echo $new_str.$result[pname]; echo "<br>"; } $str=str_repeat("=",10); echo $str; $num=count(explode("-","0-1-5-8"))-1; echo $num; ?> </body> </html>
上面的代码中其实中间有空格的输入效果还是非常不错的,请大家本地测试。因编辑器问题导致排版混乱。