以上的程序便完成了无限分类的基本创建,存储和显示,接着就是完善分类创建功能的各个部分了。
4.路径跟踪
前面已经介绍过了分类的创建实现方法,在分类表里记载了 rout_id 和 rout_char 这两个存储分类路径的信息,在不做任何处理的情况下,程序只能够顺序下到最底层的分类而无法倒退(当然可利用浏览器的 back 键倒退,但这对程序来说是不完整的),因此必须将 rout_id 和 rout_char 的信息分解出来完成实在的路径指示.
具体的做法,假如数据库记载了这么一条分类信息:
id:4 
uid:2 
type:开发工具 
rout_id:0:1:2:4 
rout_char:系统:linux:开发工具 
当程序走到分类'开发工具'上时,除了要求显示路径信息外还要求能够去到路径上的任一分类中,该怎么做能?这里就需要用到 explode() 函数了.因为 rout_id 和 rout_char 是对应关系的,所以可将它们分解:
path=explode(":",rout_id); 
path_gb=explode(":",rout_char); 
这时所有分类信息都被分解了,现在要做的就是以链接的方式还原路径信息:
for (i=0;;i++) { 
a=i+1; 
echo "href=php_self?func=showtype&uid=",path[a],">",path_gb[i],":"; 
if (empty(path_gb[i])) { 
break; 
} 
} 
上面这段代码就实现了加链接还原路径的功能,因为实现的是无限分类,因此是没有上限的,所以在 for(i=0;;i++) 里没有范围限制,而设置循环退出的条件是 path_gb[i] 中的值为空,将这段代码插入类别显示版面的程序块内就行了:
 
..... 
..... 
//显示分类************************************************ 
if (func=='showtype'): 
echo ""; 
//判断分类的状态 
if (uid!=0) { 
result=mysql_query("select * from type where id=uid"); 
type=mysql_result(result,0,"type"); 
//******** 新加入的代码 *************** 
rout_id=mysql_result(result,0,"rout_id"); 
rout_char=mysql_result(result,0,"rout_char"); 
path=explode(":",rout_id); 
path_gb=explode(":",rout_char); 
echo ""; 
for (i=0;;i++) { 
a=i+1; 
echo "href=php_self?func=showtype&uid=",path[a],">",path_gb[i],":"; 
if (empty(path_gb[i])) { 
break; 
} 
} 
echo ""; 
//******** end *********************** 
} else { 
type='父分类'; 
} 
echo "创建分类"; 
echo "type"; 
result=mysql_query("select * from type where uid=uid"); 
num=mysql_numrows(result); 
if (!empty(num)) { 
for (i=0;i
type=mysql_result(result,i,"type"); 
echo ""; 
echo "type"; 
echo ""; 
} 
} 
echo ""; 
endif; /* end showtype */ 
..... 
..... 
?> 
完成这个功能块后,就可继续分类信息的显示实现了... 

