588创业论坛

 找回密码
 快速注册
搜索
查看: 2607|回复: 0
打印 上一主题 下一主题

DEDE5.1 按tag取得相关文章的扩展修改

[复制链接]

293

主题

0

听众

4577

积分

管理员

Rank: 9Rank: 9Rank: 9

金钱
156 创业币
在线时间
679 小时
跳转到指定楼层
1
miqike 发表于 2010-4-8 15:10:43 |只看该作者 |倒序浏览
DEDE5.1的文章里,很多人都是只填了TAG,而没有填写关键字,更不要说手动去设置其相关文章了。所以,就希望有一个功能,可以列出当前文章的按TAG进行相关匹配的文章,作为其相关文章。例如:A文章的tag是“证券 金融 次贷”,B文的TAG是“美女 时尚”,C文的TAG是“美女 次贷”,D文的tag是“证券 贬值”,那么A文章用次此修改后得到的相关文章就是C和D,B文的相关文章是C,C文的相关文章是A和B,D文相关文章是A

修改方法为以下两步(已在DEDE5.1 GBK版上调试通过,如果你是要修改UTF-8版本,切记不要用记事本打开DEDE自带的文件):

第一步:在include\inc_functions.php文件的最后?>之前,插入以下函数代码
复制代码
  1. function ShowTagLikeArc_by_id($titleLen,$rowCount,$typeid,$aid){
  2.   $dsql = new DedeSql(false);
  3.   if ($typeid!="0") $sql = TypeGetSunID($typeid,$dsql);
  4.   else $sql =" 1=1 ";  
  5.   
  6.   //找到所有的tag id
  7.   $query="Select tid from #@__tag_list  where aid=$aid";
  8.   $dsql->SetQuery($query);
  9.   $dsql->Execute();
  10.   while($row=$dsql->GetObject()){
  11.        $kwsqlarr[] = " (tl.tid='".$row->tid."') ";
  12.   }
  13.   $where = implode(' OR ',$kwsqlarr);  
  14.   if (trim($where)=="") $where=" 1<>1 ";

  15.   $sql="Select DISTINCT tp.namerule,tp.typedir,#@__archives.* From #@__tag_list  tl left join #@__archives on tl.aid=#@__archives.ID  left join #@__arctype tp on #@__archives.typeid=tp.ID where {$sql} and ( $where) and  #@__archives.ID<>$aid order by #@__archives.litpic desc,#@__archives.click desc  limit 0, $rowCount"; //排序按有缩略图、点击率高的排名靠前
  16.   $dsql->SetQuery($sql);
  17.   $dsql->Execute();
  18.   $ss="";
  19.   while($row=$dsql->GetObject()){
  20.         $url=GetFileUrl($row->ID,$row->typeid,$row->senddate,$row->title,$row->ismake,$row->arcrank,$row->namerule,$row->typedir,$row->money);                              
  21.         $ss.="<li><a href='".$url."' title='".$row->title."'>";
  22.         if ($titleLen!=0) $ss.=cn_substr($row->title,$titleLen);
  23.         else $ss.=$row->title;
  24.         $ss.="</A></LI>";        
  25.    }  
  26.   if ($ss=="") $ss="暂无相关文章";
  27.   return $ss;
  28. }
复制代码



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


附注:
   1  生成出来的相关文章HTML形如:
              <li><a href="/html/xxxx/CCC.html" title="C文标题">C文标题</a></li>
                            <li><a href="/html/xxxx/dddd.html" title="D文标题">D文标题</a></li>
          如果你的模板有样式方面的要求,可自行调整代码里的<li>部分
   2  目前得到的相关文章,是按有缩略图且点击率高的拍列靠前,如需有自己的排序要求,请修改代码里的order by #@__archives.litpic desc,#@__archives.click desc部分,不懂的请查阅跟帖或跟贴提问,其他网友代为回答,我将给予一定热心助人奖励

作者:nichelous (www.caipuku.com)
您需要登录后才可以回帖 登录 | 快速注册

Archiver|手机版|588创业网 ( 闽ICP备08003622号-6 )

GMT+8, 2024-12-23 13:57 , Processed in 0.128403 second(s), 25 queries .

Powered by bbs.588cy.com

© 2001-2012 Discuz! X2.5

回顶部