1. 程式人生 > >織夢dede讓頻道自動跳轉到第一個子欄目

織夢dede讓頻道自動跳轉到第一個子欄目

.平時做網站的時候,難免遇上一些特殊情況,預設的CMS是無法實現的,這時就需要改程式,就比如說,讓頻道自動跳轉到第一個子欄目,當我還對DEDECMS不熟悉的時候,採用了一個非常笨的方法,用JS去跳轉,這對優化非常不好。但是反正客戶不懂,效果能實現就OK了。<script>{dede:channel type='son' row='1'}window.location.href='[field:typelink /]';{/dede:channel}</script>

 新建一個url.htm檔案,然後將一級欄目的欄目屬性設定為封面頁。並將封面模版更改為url.htm。

將以下程式碼複製到該檔案中即可;今天我就來說說用如果通過修改原始碼來簡單實現,其實DEDECMS在資料庫表@#_arctype中,是否為頻道,是用ispart這個欄位去儲存的,它有3個值(0,-1,1),對應的網站後臺的 頻道封面、最終欄目、外部連線。所以我們只需要在程式中對ispart進行一個簡單的判斷,就OK。廢話不多說了,第一步:開啟/include/helpers/channelunit.helper.php 開啟下面的程式碼  GetOneTypeUrlA函式

function GetOneTypeUrlA($typeinfos)
{
return GetTypeUrl($typeinfos['id'],MfTypedir($typeinfos['typedir']),$typeinfos['isdefault'],$typeinfos['defaultname'],
$typeinfos['ispart'],$typeinfos['namerule2'],$typeinfos['moresite'],$typeinfos['siteurl'],$typeinfos['sitepath']);
}


function GetOneTypeUrlA($typeinfos)
{
global $dsql;
if($typeinfos['ispart']==1) {
$typeinfos $dsql->GetOne('select * from idea_arctype where reid='.$typeinfos['id'].'
ORDER BY sortrank');
}
return GetTypeUrl($typeinfos['id'],MfTypedir($typeinfos['typedir']),
$typeinfos['isdefault'],$typeinfos['defaultname'
],
$typeinfos['ispart'],$typeinfos['namerule2'],
$typeinfos['moresite'],$typeinfos['siteurl'],$typeinfos['sitepath']);
}
就這樣OK了~! 但是這樣頻道封面就沒有用了,其實我們還可以去給ispart增加一個其它的值,比如“2”來代表需要跳轉到第一個子欄目的,把程式中的$typeinfos['ispart']==1改成$typeinfos['ispart']==2就OK了以上方法網上找的,不行。列表頁的連結不對了。自己研究了一下 include/taglib/channelartlist.lib.php  line85增加一個if判斷,搞定!!

while($row = $dsql->GetArray()) {
if($row["ispart"]==1&&$row["reid"]==0){//lyy2014-8-12 當欄目為單頁,且為頂級欄目呼叫第一個子欄目連結。
$row1 = $dsql->GetOne("select reid,id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath from #@__arctype where reid='".$row['id']."' ORDER BY sortrank ASC");
if(!empty($row1)){//有子類,沒有不作操作
$row['defaultname']=$row1['defaultname'];
}

}
$typeids[] = $row;
}