这个功能一直是很多站长对dedecms不满的地方,因为很多程序中都有这个功能,为什么dedecms这么强大,居然没有这样简单的功能,让很多人不解。通过前端关注的观察,其实dedecms是有这个功能的,站长们每次发文章的时候都应该知道,dedecms的tag标签和关键词是相关的,即你使用了tag标签,没有使用关键词,也就是说:在发文章的时候将自动关联的关键词去掉了,但数据库中还会有关键词这样一个记录,这个是和你的tag标签一样的,当再次修改文章的时候就能看到,如果再次将这些关键词去掉就真的去掉了,就是说再次修改后的文章就没有关键词了。不知道这个是不是dede的一个BUG,但dedecms5.6确实是这样的。 再回来,正是TAG和关键词关联才使得通过关键词实现的文章关联实际上和通过TAG实现的没有区别;但很多人就喜欢叫这个劲,也有很多人喜欢干脱裤子放屁这样的事,于是就有了下面这个这段内容: 下面是要修改的文件名和路径:include\common.inc.php 一定要注意的是:不能使用记事本打开这个文件,即使是在线的编辑也不行。最好的办法是将这个文件下载到本地,通过DW等编辑完成后再上传覆盖。这个是编码的问题! 在文件的末尾,当然是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; }
虽然整段代码在BLOG中不是很容易阅读,全部复制粘贴上就OK了! 在再你需要通过tag标签显示相关文章的地方使用:
{dede:field name='id' function='ShowTagLikeArc_by_id(20,10,0,@me)' /}其中10代表查找的条数,20代表标题的最长字符数;提到DEDE的字符数,要插一下,dede5.6UFT-8中并不是两个字符对应一个汉字,这个直到现在我还很迷糊,不知道具体的问题出在那里。一般情况下,要显示10个字,要设置30左右的字符长度;