织梦DedeCms5.7全站按TAG和关键字调用相关文章方法,可单用tag来调用相关文章,也可用tag+keyword来调用相关文章(默认tag优先于keyword,可以自己排序),非常适合SEO,经测试效果极佳。
1.把下边代码保存到文章模版的适当位置
相关文章
{dede:likearticlecol='2'row='10'titlelen='42'eregtype=all|tag|keyword}
[field:title/]
{/dede:likearticle}
2.把下边的php代码替换掉include/taglib/likearticle.lib里的代码
if(!defined('DEDEINC'))exit('RequestError!');
/*--------------------------------------
按关键词关连文章的标签
eregtype属性
eregtype=keyword只匹配关键字
eregtype=tag只匹配tag
eregtype=alltag优先,不存在tag则匹配关键字
mytypeid=''栏目ID,多个栏目用,隔开
---------------------------------------*/
functionlib_likearticle(&$ctag,&$refObj)
{
global$dsql;
//属性处理来源:
$attlist="row|12,titlelen|28,infolen|150,col|1,tablewidth|100,mytypeid|0,byabs|0,imgwidth|120,imgheight|90";
FillAttsDefault($ctag->CAttribute->Items,$attlist);
extract($ctag->CAttribute->Items,EXTR_SKIP);
$revalue='';
if(empty($tablewidth))$tablewidth=100;
if(empty($col))$col=1;
$colWidth=ceil(100/$col);
$tablewidth=$tablewidth."%";
$colWidth=$colWidth."%";
$ids=array();
$tids=array();
$typeid=(!empty($mytypeid)?$mytypeid:0);
if(empty($typeid))
{
if(!empty($refObj->Typelink->TypeInfos['reid'])){
$typeid=$refObj->Typelink->TypeInfos['reid'];
}
else{
if(!empty($refObj->Fields['typeid']))$typeid=$refObj->Fields['typeid'];
}
}
if(!empty($typeid)&&!ereg(',',$typeid)){
$typeid=GetSonIds($typeid);
}
if(!empty($refObj->Fields['tags'])&&$eregtype!='keyword')
{
$tags=explode(',',addslashes($refObj->Fields['tags']));
$getsql="taglike'".join("'ORtaglike'",$tags)."'";
$dsql->Execute('me',"Select*Fromzmb_tagindexwhere$getsql");
while($arow=$dsql->GetArray('me')){
$tids[]=$arow['id'];
}
$tid=join(',',$tids);
if($tid!='')
{
$dsql->Execute("me","SelectaidFromzmb_taglistwheretidin($tid)Andarcrank>-1groupbyaidorderbyaiddesclimit0,$row");
while($arow=$dsql->GetArray("me"))
{
$ids[]=$arow['aid'];
$arcid=$refObj->Fields['aid'];
}
}
}
if($eregtype=='tag'&&count($ids)==0)
{
return'';
}
else
{
if(count($ids)>0)
{
if(!empty($typeid)){
//$typeid="Andarc.typeidin($typeid)Andarc.id<>$arcid";调用整站相关文章
$typeid="Andarc.id<>$arcid";
}
$idsStr=join(',',$ids);
$query="Selectarc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,
tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath
fromzmb_archivesarcleftjoinzmb_arctypetponarc.typeid=tp.id
wherearc.idin($idsStr)$typeidorderbyarc.iddesc";
}
else
{
$limitRow=$row-count($ids);
$keyword='';
if(!empty($refObj->Fields['keywords']))
{
$keywords=explode(',',trim($refObj->Fields['keywords']));
$keyword='';
$n=1;
foreach($keywordsas$k)
{
if($n>3)break;
if(trim($k)=='')continue;
else$k=addslashes($k);
$keyword.=($keyword==''?"CONCAT(arc.keywords,'',arc.title)like'%$k%'":"ORCONCAT(arc.keywords,'',arc.title)like'%$k%'");
$n++;
}
}
$arcid=(!empty($refObj->Fields['id'])?$refObj->Fields['aid']:0);
if(empty($arcid)||$byabs==0){
$orderquery="orderbyarc.iddesc";
}
else{
$orderquery="orderbyABS(arc.id-".$arcid.")";
}
if($keyword!='')
{
if(!empty($typeid)){
$typeid="Andarc.typeidin($typeid)Andarc.id<>$arcid";
}
$query="Selectarc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,
tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath
fromzmb_archivesarcleftjoinzmb_arctypetponarc.typeid=tp.id
wherearc.arcrank>-1and($keyword)$typeid$orderquerylimit0,$row";
}
//
else
{
if(!empty($typeid)){
$typeid="arc.typeidin($typeid)Andarc.id<>$arcid";
}
$query="Selectarc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,
tp.namerule2,tp.ispart,tp.moresite,tp.siteurl,tp.sitepath
fromzmb_archivesarcleftjoinzmb_arctypetponarc.typeid=tp.id
wherearc.arcrank>-1and$typeid$orderquerylimit0,$row";
}
}
}
$innertext=trim($ctag->GetInnerText());
if($innertext=='')$innertext=GetSysTemplets('part_arclist.htm');
$dsql->SetQuery($query);
$dsql->Execute('al');
$artlist='';
if($col>1){
$artlist="
}
$dtp2=newDedeTagParse();
$dtp2->SetNameSpace('field','[',']');
$dtp2->LoadString($innertext);
$GLOBALS['autoindex']=0;
$line=$row;
for($i=0;$i
{
if($col>1)$artlist.="
\r\n";
for($j=0;$j
{
if($col>1)$artlist.="
\r\n";
if($row=$dsql->GetArray("al"))
{
$ids[]=$row['id'];
//处理一些特殊字段
$row['info']=$row['infos']=cn_substr($row['description'],$infolen);
$row['id']=$row['id'];
if($row['corank']>0&&$row['arcrank']==0)
{
$row['arcrank']=$row['corank'];
}
$row['filename']=$row['arcurl']=GetFileUrl($row['id'],$row['typeid'],$row['senddate'],$row['title'],$row['ismake'],
$row['arcrank'],$row['namerule'],$row['typedir'],$row['money'],$row['filename'],$row['moresite'],$row['siteurl'],$row['sitepath']);
$row['typeurl']=GetTypeUrl($row['typeid'],$row['typedir'],$row['isdefault'],$row['defaultname'],$row['ispart'],
$row['namerule2'],$row['moresite'],$row['siteurl'],$row['sitepath']);
if($row['litpic']=='-'||$row['litpic']=='')
{
$row['litpic']=$GLOBALS['cfg_cmspath'].'/images/defaultpic.gif';
}
if(!eregi("^http://",$row['litpic'])&&$GLOBALS['cfg_multi_site']=='Y')
{
$row['litpic']=$GLOBALS['cfg_mainsite'].$row['litpic'];
}
$row['picname']=$row['litpic'];
$row['stime']=GetDateMK($row['pubdate']);
$row['typelink']="".$row['typename']."";
$row['image']="";
$row['imglink']="".$row['image']."";
$row['fulltitle']=$row['title'];
$row['title']=cn_substr($row['title'],$titlelen);
if($row['color']!='')$row['title']="".$row['title']."";
if(ereg('b',$row['flag']))$row['title']="".$row['title']."";
$row['textlink']="".$row['title']."";
$row['plusurl']=$row['phpurl']=$GLOBALS['cfg_phpurl'];
$row['memberurl']=$GLOBALS['cfg_memberurl'];
$row['templeturl']=$GLOBALS['cfg_templeturl'];
if(is_array($dtp2->CTags))
{
foreach($dtp2->CTagsas$k=>$ctag)
{
if($ctag->GetName()=='array'){
$dtp2->Assign($k,$row);
}
else{
if(isset($row[$ctag->GetName()]))$dtp2->Assign($k,$row[$ctag->GetName()]);
else$dtp2->Assign($k,'');
}
}
$GLOBALS['autoindex']++;
}
$artlist.=$dtp2->GetResult()."\r\n";
}
//ifhasRow
else
{
$artlist.='';
}
if($col>1)$artlist.="
\r\n";
}
//LoopCol
if($col>1)$i+=$col-1;
if($col>1)$artlist.="
\r\n";
}
//loopline
if($col>1)$artlist.="
\r\n";
$dsql->FreeResult("al");
return$artlist;
}
?>