免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1788 | 回复: 0
打印 上一主题 下一主题

简单实用的PHP无限分类源码分享 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-27 19:34 |只看该作者 |倒序浏览
简单实用的PHP无限分类源码分享
关于PHP的无限分类代码,网上已经有很多了,讲解的也很到位,在这里我分享一下我用着很顺手的一个。
下面一段代码是创建相应数据库的sql代码:
  1 //////////////
  1.   2 //////无限分类的数据库设计及样例
  2.   3 //////////////
  3.   4 mysql> create database db_kind;
  4.   5 Query OK, 1 row affected
  5.   6  
  6.   7 mysql> use db_kind;
  7.   8 Database changed
  8.   9 mysql> create table tb_kind(
  9. 10     -> id int not null auto_increment primary key,
  10. 11     -> pid int,
  11. 12     -> path varchar(200)
  12. 13     -> );
  13. 14 Query OK, 0 rows affected
  14. 15  
  15. 16 mysql> insert into tb_kind values(null,"新闻",0,0);
  16. 17 Query OK, 1 row affected
  17. 18  
  18. 19 mysql> insert into tb_kind values(null,"视频",0,0);
  19. 20 Query OK, 1 row affected
  20. 21  
  21. 22 mysql> insert into tb_kind values(null,"图片",0,0);
  22. 23 Query OK, 1 row affected
  23. 24  
  24. 25 mysql> insert into tb_kind values(null,"博客",0,0);
  25. 26 Query OK, 1 row affected
  26. 27  
  27. 28 mysql> insert into tb_kind values(null,"体育新闻",1,"0-1");
  28. 29 Query OK, 1 row affected
  29. 30  
  30. 31 mysql> insert into tb_kind values(null,"娱乐新闻",1,"0-1");
  31. 32 Query OK, 1 row affected
  32. 33  
  33. 34 mysql> insert into tb_kind values(null,"财经新闻",1,"0-1");
  34. 35 Query OK, 1 row affected
  35. 36  
  36. 37 mysql> select * from db_kind;
  37. 38 ERROR 1146 : Table 'db_kind.db_kind' doesnot exist
  38. 39 mysql> select * from tb
  39. 40 _kind;
  40. 41 +----+----------+-----+------+
  41. 42 | id | pname    | pid | path |
  42. 43 +----+----------+-----+------+
  43. 44 |  1 | 新闻     |   0 | 0    |
  44. 45 |  2 | 视频     |   0 | 0    |
  45. 46 |  3 | 图片     |   0 | 0    |
  46. 47 |  4 | 博客     |   0 | 0    |
  47. 48 |  5 | 体育新闻 |   1 | 0-1  |
  48. 49 |  6 | 娱乐新闻 |   1 | 0-1  |
  49. 50 |  7 | 财经新闻 |   1 | 0-1  |
  50. 51 +----+----------+-----+------+
  51. 52 7 rows in set
  52. 53 mysql> insert into tb_kind values(null,"篮球新闻",5,"0-1-5");
  53. 54 Query OK, 1 row affected
  54. 55  
  55. 56 mysql> insert into tb_kind values(null,"足球新闻",5,"0-1-5");
  56. 57 Query OK, 1 row affected
  57. 58  
  58. 59 mysql> select * from tb_kind;
  59. 60 +----+----------+-----+-------+
  60. 61 | id | pname    | pid | path  |
  61. 62 +----+----------+-----+-------+
  62. 63 |  1 | 新闻     |   0 | 0     |
  63. 64 |  2 | 视频     |   0 | 0     |
  64. 65 |  3 | 图片     |   0 | 0     |
  65. 66 |  4 | 博客     |   0 | 0     |
  66. 67 |  5 | 体育新闻 |   1 | 0-1   |
  67. 68 |  6 | 娱乐新闻 |   1 | 0-1   |
  68. 69 |  7 | 财经新闻 |   1 | 0-1   |
  69. 70 |  8 | 篮球新闻 |   5 | 0-1-5 |
  70. 71 |  9 | 足球新闻 |   5 | 0-1-5 |
  71. 72 +----+----------+-----+-------+
  72. 73 9 rows in set
  73. 74  
  74. 75 mysql> insert into tb_kind values(null,"NBA",8,"0-1-5-8");
  75. 76 Query OK, 1 row affected
  76. 77  
  77. 78 mysql> insert into tb_kind values(null,"CBA",8,"0-1-5-8");
  78. 79 Query OK, 1 row affected
  79. 80  
  80. 81 mysql> select * from tb_kind;
  81. 82 +----+----------+-----+---------+
  82. 83 | id | pname    | pid | path    |
  83. 84 +----+----------+-----+---------+
  84. 85 |  1 | 新闻     |   0 | 0       |
  85. 86 |  2 | 视频     |   0 | 0       |
  86. 87 |  3 | 图片     |   0 | 0       |
  87. 88 |  4 | 博客     |   0 | 0       |
  88. 89 |  5 | 体育新闻 |   1 | 0-1     |
  89. 90 |  6 | 娱乐新闻 |   1 | 0-1     |
  90. 91 |  7 | 财经新闻 |   1 | 0-1     |
  91. 92 |  8 | 篮球新闻 |   5 | 0-1-5   |
  92. 93 |  9 | 足球新闻 |   5 | 0-1-5   |
  93. 94 | 10 | NBA      |   8 | 0-1-5-8 |
  94. 95 | 11 | CBA      |   8 | 0-1-5-8 |
  95. 96 +----+----------+-----+---------+
  96. 97 11 rows in set
  97. 98  
  98. 99 mysql> select concat(path,"-",id) from tb_kind;
  99. 100 +---------------------+
  100. 101 | concat(path,"-",id) |
  101. 102 +---------------------+
  102. 103 | 0-1                 |
  103. 104 | 0-2                 |
  104. 105 | 0-3                 |
  105. 106 | 0-4                 |
  106. 107 | 0-1-5               |
  107. 108 | 0-1-6               |
  108. 109 | 0-1-7               |
  109. 110 | 0-1-5-8             |
  110. 111 | 0-1-5-9             |
  111. 112 | 0-1-5-8-10          |
  112. 113 | 0-1-5-8-11          |
  113. 114 +---------------------+
  114. 115 11 rows in set
  115. 116  
  116. 117 mysql> select concat(path,"-",id) from tb_kind;
  117. 118 +---------------------+
  118. 119 | concat(path,"-",id) |
  119. 120 +---------------------+
  120. 121 | 0-1                 |
  121. 122 | 0-2                 |
  122. 123 | 0-3                 |
  123. 124 | 0-4                 |
  124. 125 | 0-1-5               |
  125. 126 | 0-1-6               |
  126. 127 | 0-1-7               |
  127. 128 | 0-1-5-8             |
  128. 129 | 0-1-5-9             |
  129. 130 | 0-1-5-8-10          |
  130. 131 | 0-1-5-8-11          |
  131. 132 +---------------------+
  132. 133 11 rows in set
  133. 134  
  134. 135 mysql> select concat(path,"-",id) as abs from tb_kind order by abs.path;
  135. 136 ERROR 1054 : Unknown column 'abs.path' in 'order clause'
  136. 137 mysql> select concat(path,"-",id) as abs from tb_kind order by abs
  137. 138 ;
  138. 139 +------------+
  139. 140 | abs        |
  140. 141 +------------+
  141. 142 | 0-1        |
  142. 143 | 0-1-5      |
  143. 144 | 0-1-5-8    |
  144. 145 | 0-1-5-8-10 |
  145. 146 | 0-1-5-8-11 |
  146. 147 | 0-1-5-9    |
  147. 148 | 0-1-6      |
  148. 149 | 0-1-7      |
  149. 150 | 0-2        |
  150. 151 | 0-3        |
  151. 152 | 0-4        |
  152. 153 +------------+
  153. 154 11 rows in set
  154. 155 mysql> select concat(path,"-",id) as,id,name,path abs from tb_kind order by abs;
  155. 156 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
  156. 157 mysql> select concat(path,"-",id) as abs,
  157. 158 id,pname,path abs from tb_kind order by abs;
  158. 159 +------------+----+----------+---------+
  159. 160 | abs        | id | pname    | abs     |
  160. 161 +------------+----+----------+---------+
  161. 162 | 0-1        |  1 | 新闻     | 0       |
  162. 163 | 0-1-5      |  5 | 体育新闻 | 0-1     |
  163. 164 | 0-1-5-8    |  8 | 篮球新闻 | 0-1-5   |
  164. 165 | 0-1-5-8-10 | 10 | NBA      | 0-1-5-8 |
  165. 166 | 0-1-5-8-11 | 11 | CBA      | 0-1-5-8 |
  166. 167 | 0-1-5-9    |  9 | 足球新闻 | 0-1-5   |
  167. 168 | 0-1-6      |  6 | 娱乐新闻 | 0-1     |
  168. 169 | 0-1-7      |  7 | 财经新闻 | 0-1     |
  169. 170 | 0-2        |  2 | 视频     | 0       |
  170. 171 | 0-3        |  3 | 图片     | 0       |
  171. 172 | 0-4        |  4 | 博客     | 0       |
  172. 173 +------------+----+----------+---------+
  173. 174 11 rows in set
  174. 175 mysql>
  175. 下面是php源文件:
  176. 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  177. 2 <html xmlns="http://www.w3.org/1999/xhtml">
  178. 3 <head>
  179. 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  180. 5 <title>无标题文档</title>
  181. 6 </head>
  182. 7  
  183. 8 <body>
  184. 9 <!--显示结果
  185. 10 新闻
  186. 11     体育新闻
  187. 12         篮球新闻
  188. 13             NBA
  189. 14             CBA
  190. 15         足球新闻
  191. 16     娱乐新闻
  192. 17     财经新闻
  193. 18 视频
  194. 19 图片
  195. 20 博客
  196. 21 -->
  197. 22 <?
  198. 23 $conn=mysql_connect("localhost","root","root");
  199. 24 mysql_select_db("db_kind");
  200. 25 mysql_query("set names utf8");
  201. 26 $sql="select concat(path,'-',id) as abspath,id,pname,path from tb_kind order by abspath";
  202. 27 $rs=mysql_query($sql);
  203. 28 while($result=mysql_fetch_assoc($rs)){
  204. 29     $num=count(explode("-",$result[path]))-1;
  205. 30     $new_str=str_repeat("---",$num);
  206. 31     echo $new_str.$result[pname];
  207. 32     echo "<br>";
  208. 33 }
  209. 34 $str=str_repeat("=",10);
  210. 35 echo $str;
  211. 36 $num=count(explode("-","0-1-5-8"))-1;
  212. 37 echo $num;
  213. 38  
  214. 39  
  215. 40 ?>
  216. 41 </body>
  217. 42 </html>
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP