DEDE文章里,很多人都是只填了TAG,而没有填写关键字,更不要说手动去设置其相关文章了。
所以,就希望有一个功能,可以列出当前文章的按TAG进行相关匹配的文章,作为其相关文章。
例如:A文章的tag是“证券金融次贷”,B文的TAG是“美女时尚”,C文的TAG是“美女”,D文的tag是“证券贬值”,那么A文章用次此修改后得到的相关文章就是C和D,B文的相关文章是C,C文的相关文章是A和B,D文相关文章是A

修改方法为以下两步:

第一步:在include\common.inc.php文件的最后,插入以下函数代码

functionShowTagLikeArc_by_id($titleLen,$rowCount,$typeid,$aid){
$dsql=newDedeSql(false);
if($typeid!=”0″)$sql=TypeGetSunID($typeid,$dsql);
else$sql=”1=1″;

//找到所有的tagid
$query=”Selecttidfromdede_taglist  whereaid=$aid”;
$dsql->SetQuery($query);
$dsql->Execute();
while($row=$dsql->GetObject()){
$kwsqlarr[]=”(tl.tid=’”.$row->tid.”‘)”;
}
$where=implode(’OR’,$kwsqlarr);
if(trim($where)==”")$where=”1″;

$sql=”SelectDISTINCTtp.namerule,tp.typedir,dede_archives.*Fromdede_taglist  tlleftjoindede_archivesontl.aid=dede_archives.ID  leftjoindede_arctypetpondede_archives.typeid=tp.IDwhere{$sql}and($where)and  dede_archives.ID<>$aidorderbydede_archives.litpicdesc,dede_archives.clickdesc”;//排序按有缩略图、点击率高的排名靠前
$dsql->SetQuery($sql);
$dsql->Execute();
$ss=”";
$i=0;
while($row=$dsql->GetObject()){
$url=GetFileUrl($row->ID,$row->typeid,$row->senddate,$row->title,$row->ismake,$row->arcrank,$row->namerule,$row->typedir,$row->money);
$ss=$ss.”<li><ahref=’”.$url.”‘title=’”.$row->title.”‘>”;
if($titleLen!=0)$ss=$ss.cn_substr($row->title,$titleLen);
else$ss=$ss.$row->title;
$ss=$ss.”</A></LI>”;
$i++;
if(($rowCount!=0)&&($i>=$rowCount))return$ss;
}
if($ss==”")$ss=”暂无相关文章”;
return$ss;
}

第二步:在文章内容页模板(通常是article_article.htm)里,加入调用此函数的标签:
例如:{dede:fieldname=’id’function=’ShowTagLikeArc_by_id(20,10,0,@me)’/}
这个标签的意思就是:从所有栏目里,查找本篇文章的tag相关文章,一共找10条,标题显示最长为20个字
又如:{dede:fieldname=’id’function=’ShowTagLikeArc_by_id(0,0,2,@me)’/}
这个标签的意思就是:从ID为2栏目及其所有子栏目里,查找本篇文章的tag相关文章,不限制文章数量,标题显示不限字数

附注:
1  生成出来的相关文章HTML形如:
<li><ahref=”/html/xxxx/CCC.html”title=”C文标题”>C文标题</a></li>
<li><ahref=”/html/xxxx/dddd.html”title=”D文标题”>D文标题</a></li>
如果你的模板有样式方面的要求,可自行调整代码里的<li>部分
2  目前得到的相关文章,是按有缩略图且点击率高的拍列靠前,如需有自己的排序要求,请修改代码里的orderbydede_archives.litpicdesc,dede_archives.clickdesc部分