ASP 无限级分类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP 无限级分类相关的知识,希望对你有一定的参考价值。
我要做一个ASP分类程序,无限级(程序中设定分类是否在前台显示)
每个分类下显示自己 下面的 5分类名子,以及每级分类的数量 还有是不是显示的信息
+一级栏目
+--二级栏目1
+--二级栏目2
+----三级栏目1
+----三级栏目2
+------四级栏目1
+--------五级栏目1
+--------五级栏目2
+------四级栏目2
+一级栏目2
+--二级栏目1-2
+一级栏目3
+--二级栏目1-3
+--二级栏目2-3
+----三级栏目1-2-3
怎么实现呢?
/*
'sel_Name 下拉菜单名称
'sel_selected 默认选中值
'iTableName 数据表名
'ifloor 初始层数 - 1
'iTID1 初始父级ID - 0
'sel_valField value值对应的字段名
'sel_TextField text 值对就的字段名
*/
function createSelect($sel_Name, $sel_selected , $iTableName , $ifloor=1, $iTID1=0, $sel_valField = "id",$sel_TextField="title")
if ($ifloor == 1)
$selectStr = $selectStr."<select name=\"".$sel_Name."\" id=\"".$sel_Name."\">\n";
$ifloorStr = "";
for ($i = 1; $i < $ifloor; $i++)
$ifloorStr = $ifloorStr." ";
$sql = "select * from `$iTableName` where TID1 = ".$iTID1." order by orderid";
$rs = mysql_query($sql);
while ($ary = mysql_fetch_array($rs))
$iChecked = "";
if($sel_selected == $ary[$sel_valField]) $iChecked = "selected";
$rs2 = mysql_query("select count(*) from `$iTableName` where TID1 = ".$ary["id"]);
$Vcount = @mysql_result($rs2, 0);
if ($Vcount != 0)
$selectStr = $selectStr."<optgroup label=\"".$ifloorStr."├".$ary[$sel_TextField]."--(".$ifloor."级)\"></optgroup>\n";
$selectStr = $selectStr.createSelect($sel_Name, $sel_selected, $iTableName, $ifloor + 1, $ary["id"],$sel_valField,$sel_TextField);
else
$selectStr = $selectStr."<option value='".$ary[$sel_valField]."' ".$iChecked.">".$ifloorStr."├".$ary[$sel_TextField]."--(".$ifloor."级)</option>\n";
@mysql_free_result($rs);
if ($ifloor == 1)
$selectStr = $selectStr."</select>\n";
return $selectStr;
参考技术A 你可以做选项,如果选择以及栏目的话 需要添加几次 二级栏目。
把这个次数,传值给for 里面 这样 在里面 循环添加就行了 参考技术B 自表调用,就可以达到
数据库
Forum表
id 栏目ID
forumName 栏目名称
forumParent 上级栏目
这个是最简单的自表调用无限级分类表
然后前台调用用递归的方法
如果是ASP的话,这么写
sub ListForums(parentID,str)
sql="select * from forum where forumParent="& id
dim rs,i
rs=conn.execute(sql)
if(rs.eof and rs.bof) then
else
i=1
while(not rs.eof)
%>+<%=str&rs("forum_name")&i%><br /><%
rs.movenext
i=i+1
call ListForum(rs(0),"-")
wend
end if
rs.close
set rs=nothing
end sub 参考技术C 我的百度空间里有源码,请参考(asp+access)
php无限级分类
使用递归方法,遍历子类,对数据进行重新排序,使用level进行无限级分类
/** * 功能:无限级分类 * 参数:$data 类别查询结果集 * 返回值:$arr 排序后的数组 */ public function getCateTree($data) { $arr = $this->cateSort($data); return $arr; } /** * 功能:无限级分类排序 * 参数:$data 类别查询结果集 * 返回值:$arr 递归查询排序后的数组 */ public function cateSort($data,$pid=0,$level=0) { static $arr = array(); foreach($data as $k => $v) { if($v[‘pid‘] == $pid) { $arr[$k] = $v; $arr[$k][‘level‘] = $level + 1; $this->cateSort($data,$v[‘id‘],$level+1); } } return $arr; }
以上是关于ASP 无限级分类的主要内容,如果未能解决你的问题,请参考以下文章