系统城装机大师 - 固镇县祥瑞电脑科技销售部宣传站!

当前位置:首页 > CMS教程 > 详细页面

详解织梦dedecms5.7 无限级多级栏目菜单调用方法

时间:2019-12-26来源:系统城作者:电脑系统城

以前在用到5.7无限级栏目列表菜单时下载了网上的资料都未成功,因此我参考网上及dedecms本身的channel.lib.php及cattree.lib.php制作了调用标签。

1、在include\taglib建立randomartlist.lib.php

内容如下:


 
  1. <?php
  2. if(!defined('DEDEINC')) exit('Request Error!');
  3.  
  4. function lib_randomartlist(&$ctag, &$refObj)
  5. {
  6. global $dsql;
  7. //属性处理
  8. //topid 指定顶级树 id ,指定后,前一个属性将无效
  9. $attlist="typeid|0,showall|,currentstyle|,cacheid|";
  10. FillAttsDefault($ctag->CAttribute->Items,$attlist);
  11. extract($ctag->CAttribute->Items, EXTR_SKIP);
  12. $revalue = '';
  13. //读取固定的缓存块
  14. $cacheid = trim($cacheid);
  15. if($cacheid !='') {
  16. $revalue = GetCacheBlock($cacheid);
  17. if($revalue != '') return $revalue;
  18. }
  19. //如果属性里没指定栏目id,从引用类里获取栏目信息
  20. if(empty($typeid))
  21. {
  22. if( isset($refObj->TypeLink->TypeInfos['id']) )
  23. {
  24. $typeid = $refObj->TypeLink->TypeInfos['id'];
  25. $reid = $refObj->TypeLink->TypeInfos['reid'];
  26. $topid = $refObj->TypeLink->TypeInfos['topid'];
  27. }
  28. else {
  29. $typeid = 0;
  30. }
  31. }
  32. else
  33. {
  34.  
  35. $row2 = $dsql->GetOne("SELECT reid,topid,channeltype,ispart FROM `dede_arctype` WHERE reid='$topid' ");
  36. if(!is_array($row2))
  37. {
  38. $typeid = $reid = $topid = $channeltype = $ispart = 0;
  39. } else {
  40. $reid = $row2['reid'];
  41. $channeltype = $row2['channeltype'];
  42. $ispart = $row2['ispart'];
  43. $typepid = $row2['id'];
  44. }
  45. }
  46. //调用Typeid
  47. if( !empty($topid) )
  48. {
  49. $topQuery = "SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath FROM `dede_arctype` WHERE reid='$topid' And ishidden<>1 order by sortrank asc";
  50. }
  51. $dsql->Execute('t', $topQuery);
  52. while($row = $dsql->GetArray('t'))
  53. {
  54. $row['typelink'] = GetOneTypeUrlA($row);
  55. //处理同级栏目中,当前栏目的样式
  56. if( $row['id']==$typeid && $currentstyle!='' )
  57. {
  58. $linkOkstr = $currentstyle;
  59. $linkOkstr = str_replace("~rel~",$row['rel'],$linkOkstr);
  60. $linkOkstr = str_replace("~id~",$row['id'],$linkOkstr);
  61. $linkOkstr = str_replace("~typelink~",$row['typelink'],$linkOkstr);
  62. $linkOkstr = str_replace("~typename~",$row['typename'],$linkOkstr);
  63. $revalue .= $linkOkstr;
  64. }
  65. else
  66. {
  67. $revalue .= " <li><a href='{$row['typelink']}'>{$row['typename']}</a></li>\n";
  68. }
  69. randomartlistSon($row['id'],$typeid,$currentstyle, $revalue);
  70. }
  71. if($cacheid !='') {
  72. WriteCacheBlock($cacheid, $revalue);
  73. }
  74. return $revalue;
  75. }
  76.  
  77. function randomartlistSon($id,$typeid,$currentstyle,&$revalue)
  78. {
  79. global $dsql;
  80. $query = "SELECT id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath FROM `dede_arctype` WHERE reid='{$id}' And ishidden<>1 order by sortrank asc";
  81. $dsql->Execute($id, $query);
  82. $thisv = '';
  83. while($row = $dsql->GetArray($id))
  84. {
  85. $row['typelink'] = GetOneTypeUrlA($row);
  86. //处理同级栏目中,当前栏目的样式
  87. if( $row['id']==$typeid && $currentstyle!='' )
  88. {
  89. $linkOkstr = $currentstyle;
  90. $linkOkstr = str_replace("~rel~",$row['rel'],$linkOkstr);
  91. $linkOkstr = str_replace("~id~",$row['id'],$linkOkstr);
  92. $linkOkstr = str_replace("~typelink~",$row['typelink'],$linkOkstr);
  93. $linkOkstr = str_replace("~typename~",$row['typename'],$linkOkstr);
  94. $thisv .= $linkOkstr;
  95. }
  96. else
  97. {
  98. $thisv .= " <li><a href='{$row['typelink']}'>{$row['typename']}</a></li>\n";
  99. }
  100.  
  101. randomartlistSon($row['id'],$typeid,$currentstyle, $thisv);
  102. }
  103. if($thisv!='') $revalue .= " <ul>\n$thisv </ul>\n";
  104. }

2、调用方式:


 
  1. <div class="alist">
  2. <ul>
  3. {dede:randomartlist topid='12' currentstyle="<li><a href='~typelink~' class='thisclass'>~typename~</a></li>"}
  4. <li><a href="{dede:field name='typeurl'/}" title="{dede:field name='typename'/}">{dede:field name='typename'/}</a></li>
  5. {/dede:randomartlist}
  6. </ul>
  7. </div>

3、css方式:


 
  1. .alist{}
  2. /*第一层修饰*/
  3. .alist ul {}
  4. .alist ul li {}
  5. .alist ul li a{}
  6. .alist ul li a:hover,.alist ul li .thisclass{}
  7. /*第二层修饰*/
  8. .alist ul li ul{}
  9. .alist ul li ul li{}
  10. .alist ul li ul li a{}
  11. .alist ul li ul li a:hover,.alist ul li ul li .thisclass{}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

分享到:

相关信息

系统教程栏目

栏目热门教程

人气教程排行

站长推荐

热门系统下载