DEDE織夢如何排除子欄目只顯示頂級欄目列表內容

 曉兔   2017-05-18 06:59   3,190 人飄過  2 條評論

      最近在改版織夢系統做的網站時碰到一個問題,我需要調取A這個頂級欄目下的文章列表,但是并不想讓A欄目下1.2.3這幾個子欄目的文章也出現在列表上,而使用織夢現成的標簽,無論如何都做不到這一點,找了很多方法,最后只能通過修改程序本身的文件來實現這一功能,就是給arclist標簽增加notypeid屬性,排除相應的欄目ID,實現欄目過濾。好在只需要修改一個文件就可以了,比較簡單,這里我就分享一下找到的方法(感謝原作者,不知道原作者是誰- -),親測可用:

打開/include/taglib/arclist.lib.php文件,找這段代碼(大概在129行):


return lib_arclistDone ( $refObj, $ctag, $typeid, $ctag->GetAtt('row'), $ctag->GetAtt('col'), $titlelen, $infolen, $ctag->GetAtt('imgwidth'), $ctag->GetAtt('imgheight'), $listtype, $orderby, $ctag->GetAtt('keyword'), $innertext, $envs['aid'], $ctag->GetAtt('idlist'), $channelid, $ctag->GetAtt('limit'), $flag,$ctag->GetAtt('orderway'), $ctag->GetAtt('subday'), $ctag->GetAtt('noflag'), $tagid,$pagesize,$isweight );


最后的括號前面也就是$isweight后面加上(注意別忘了逗號)

,$ctag->GetAtt('notypeid')


然后再找到這一段代碼(大概在168行):

function lib_arclistDone(&$refObj, &$ctag, $typeid=0, $row=10, $col=1, $titlelen=30, $infolen=160, $imgwidth=120, $imgheight=90, $listtype='all', $orderby='default', $keyword='', $innertext='', $arcid=0, $idlist='', $channelid=0, $limit='', $att='', $order='desc', $subday=0, $noflag='',$tagid='', $pagesize=0, $isweight='N',$notypeid=0)


最后的括號前面也就是$notypeid=0后面加上(注意別忘了逗號)

,$notypeid=0


最后再找到這一句:

$orwheres[] = ' arc.arcrank > -1 ';

在其前面增加以下代碼:


if(!empty($notypeid)) {
$orwheres[] = " and arc.typeid NOT IN (".GetSonIds($notypeid).")";
}


    這樣就大功告成了,可以愉快地調取指定的頂級欄目內容,那些子欄目內容再也不會出來搗亂了。在使用arclist標簽時,添加notypeid='X'(X代表欄目ID,可以用英文逗號分隔多個欄目ID)就可以排除掉不想顯示的子欄目了。當然,在調用整體的多個欄目時也可以排除掉不需要的欄目,并非僅限于子欄目。

    使用方法參考:{dede:arclist typeid='99' row='10' notypeid='1,2,3'}

本文地址:http://www.stamina-metal.com/post/566.html
版權聲明:本文為原創文章,版權歸 曉兔個人博客 所有,歡迎分享本文,轉載請保留出處!

 發表評論


表情

  1. yang
    yang 【縣長】 @回復

    迷糊糊的看完,算是看懂了。你越來越厲害了,成為一個對社會對祖國有用的人才

    • 懶小愛
      懶小愛2017-05-25 at 02:41  回復

      @yang@yang:為建設四化做貢獻。。。胸前的紅領巾更鮮艷了。。。嗯。。。