找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1743|回复: 0

[分享] 按tag取得相关文章的功能

[复制链接]
发表于 2012-7-17 14:31:52 | 显示全部楼层 |阅读模式 来自 中国–浙江–杭州

我用的是dedecms5.6建站,我想在文章页面按tag取得相关文章,因为系统默认是按关键词取得相关文章,在网上查了2天,有很多的办法和代码,但是都不能用,大部分文章都是抄袭的一个版本。花了30元注册了织梦官方网站论坛,得到一个代码,实践可以用,特拿来分享,同时我用5.6版本实验,有3个地方需要请高手们一起解决,就是1、按tag调出文章的链接不对,2、文章只有一列,最好调成2列,3、当没有tag时,没有显示:暂无相关文章,而是根据关键词调用很多的文章。我想这对于会编码的朋友很容易就解决了。如果能解决这是非常好的办法。下面是原文:


按tag取得相关文章的功能


    DEDE文章里,很多人都是只填了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\common.inc.php文件的最后,插入以下函数代码

function ShowTagLikeArc_by_id($titleLen,$rowCount,$typeid,$aid){$dsql = new DedeSql(false);if ($typeid!="0") $sql = TypeGetSunID($typeid,$dsql);else $sql =" 1=1 ";  

//找到所有的tag id$query="Select tid from dede_taglist   where aid=$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="Select DISTINCT tp.namerule,tp.typedir,dede_archives.* From dede_taglist   tl left join dede_archives on tl.aid=dede_archives.ID   left join dede_arctype tp on dede_archives.typeid=tp.ID where {$sql} and ( $where) and   dede_archives.ID<>$aid order by dede_archives.litpic desc,dede_archives.click desc"; //排序按有缩略图、点击率高的排名靠前$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><a href='".$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: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 dede_archives.litpic desc,dede_archives.click desc部分,不懂的请查阅跟帖或跟贴提问,其他网友代为回答,我将给予一定热心助人奖励


发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2024-12-23 12:54 , Processed in 0.048626 second(s), 9 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表