很多人在抱怨,DEDECMS的企業黃頁頻道,導航無法使用{dede:channel/}標簽,只有 一個“首頁”鏈接,如果要實現導航,只能使用“自定義宏標記",需知道,DEDECMS的”自定義宏標記"只是在頁面中插入一 段<script>腳本,這種形式的導航,搜索引擎是沒辦法進行抓取的。給各大站長的SEO優化帶來了很大的煩惱,官網又不提供解決方案,網 上搜索也沒有。
其實DEDECMS的開源給了我們這些稍懂程序的人提供了很多的方便,既然官網沒有提供,那就只能是自己寫了,研究了一些DEDECMS的源碼,寫起來也挺簡單的。
第一步:在include\tpllib下,新建一個:plus_channel.php文件,然后在文件中寫下如下內容:
<?php
if(!defined('DEDEINC'))
{
exit("Request Error!");
}
//orderby = logintime(login new) or mid(register new)
require_on
function plus_channel(&$atts,&$refObj,&$fields)
{
global $dsql,$_vars;
$attlist = "typeid=0,reid=0,row=100,col=1,type=son,currentstyle=";
FillAtts($atts,$attlist);
FillFields($atts,$fields,$refObj);
extract($atts, EXTR_OVERWRITE);
$rearray = array();
$reid = 0;
$topid = 0;
//如果屬性里沒指定欄目id,從引用類里獲取欄目信息
if(empty($typeid))
{
if( isset($refObj->TypeLink->TypeInfos['id']) )
{
$typeid = $refObj->TypeLink->TypeInfos['id'];
$reid = $refObj->TypeLink->TypeInfos['reid'];
$topid = $refObj->TypeLink->TypeInfos['topid'];
}
else {
$typeid = 0;
}
}
//如果指定了欄目id,從數據庫獲取欄目信息
else
{
$row2 = $dsql->GetOne("Select * From `dede_arctype` where id='$typeid' ");
$typeid = $row2['id'];
$reid = $row2['reid'];
$topid = $row2['topid'];
$issetInfos = true;
}
if($type=='' || $type=='sun') $type='son';
if($innertext=='') $innertext = GetSysTemplets("channel_list.htm");
$likeType = '';
if($type=='top')
{
$sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath
From `dede_arctype` where reid=0 And ishidden<>1 order by sortrank asc limit 0,$row";
}
else if($type=='son')
{
if($typeid==0) return '';
$sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath
From `dede_arctype` where reid='$typeid' And ishidden<>1 order by sortrank asc limit 0,$row";
}
else if($type=='self')
{
if($reid==0) return '';
$sql = "Select id,typename,typedir,isdefault,ispart,defaultname,namerule2,moresite,siteurl,sitepath
From `dede_arctype` where reid='$reid' And ishidden<>1 order by sortrank asc limit 0,$row";
}
$dsql->Execute('ch',$sql);
while($row = $dsql->GetArray('ch'))
{
if( ($row['id']==$typeid || ($topid==$row['id'] && $type=='top') ) && $currentstyle!='' )
{
$linkOkstr = $currentstyle;
$row['typelink'] = GetOneTypeUrlA($row);
$linkOkstr = str_replace("~typelink~",$row['typelink'],$linkOkstr);
$linkOkstr = str_replace("~typename~",$row['typename'],$linkOkstr);
//$likeType .= $linkOkstr;
$row['typelink'] = $linkOkstr;
}
else
{
$row['typelink'] = $row['typeurl'] = GetOneTypeUrlA($row);
}
$rearray[] = $row;
}
return $rearray;
}
?>
第二步:在模板里面,按照{dede:channel/}標簽的格式寫就好了。