织梦5.7生成栏目树

最近用织梦做了两个网站,发现生成栏目树的需求很多,而网上的解决方案都用cattree,但是这个玩意不好用,所以自己写了一个,给大家做参考:

一、在织梦数据里增加一个自定函数:

CREATE DEFINER=`root`@`localhost` FUNCTION `getChildLst2table`(rootId varchar(50)) RETURNS varchar(1000) CHARSET latin1
BEGIN
       DECLARE sTemp VARCHAR(1000);
       DECLARE sTempChd VARCHAR(1000);    
       SET sTemp = '$';
       SET sTempChd =rootId;    
       WHILE sTempChd is not null DO         
         SET sTemp = concat(sTemp,',',sTempChd);                     
         SELECT group_concat(id) INTO sTempChd FROM dede_arctype where reid<>id and FIND_IN_SET(reid,sTempChd)>0;
       END WHILE;
       set sTemp=replace(sTemp,concat('$,',rootId,','),'');
       set sTemp=concat('|',replace(sTemp,',','|,|'),'|');
       set sTemp=replace(sTemp,concat('|$|,|',rootId,'|'),'');
       RETURN sTemp;
     END

 

二、使用如下查询查询某点下的所有子节点:

select id,reid,topid,sortrank,typename,typedir,concat('/plus/list.php?tid=',id)as url,defaultname,char_length(typedir)-char_length(replace(typedir,'/','')) as layer
 from  dede_arctype where instr(getChildLst2table('3'),trim(concat('|',id,'|')))>0 order by sortrank;

注意:

一定在要织梦后台对你的栏目按层次设好排序和存储目录,这里通过存储目录中的/个数来确定层级,用排序号来确定归属。

三、在/plus/增加一个PHP程序来调用这个查询:如下:

<?php
require_once("wangsirDAO.php");
header("Content-type: text/html; charset=gb2312");
$rootid=$_REQUEST["rootid"];
if (!isset($rootid))
{
   echo "没有父节点";
   return;    
}
$dao=new wangsirDAO();
$sql="select id,reid,topid,sortrank,typename,typedir,concat('/plus/list.php?tid=',id)as url,defaultname,char_length(typedir)-char_length(replace(typedir,'/','')) as layer "." from  dede_arctype where instr(getChildLst2table('$rootid'),trim(concat('|',id,'|')))>0 order by sortrank;";
$res=$dao->query($sql);
echo "<ul class='treecotainer'>";
$left=0;
foreach($res as $v)
{
 $tname=$v["typename"];
 $tid=$v["reid"];
 $cid=$v["id"];
 $layer=$v["layer"];
 $s="";
 for($i=0;$i<$layer;$i++)
 {
  $s=$s."&nbsp;";
 }
 echo  "<li class='submenuitem'><h4>".
       $s."<img src='./images/box_icon1.png' border=0><a href='/plus/list.php?tid=".$tid."' style='color:#000;font-weight:bold'>".$tname."</a></h4>";

 echo "</li>";
}
echo "</ul>";

?>

四、在页面模板中通过ajax来调用这个PHP页面来生成层次显示在该显示的地方。

 

你可能感兴趣的:(生成)