文章介绍


我和DedeCMS

接触DedeCMS是从2009年开始的。在此之前,我一直使用风讯和科讯(ASP版本)这两款建站工具。后来,我从成都到东莞的一家公司打工,这家公司正是使用DedeCMS来构建网站,我也因此开始学习它。刚开始觉得DedeCMS功能非常强大,但随着使用的深入,发现它存在很多不完善的地方。比如,在Dede论坛上提问时,官方很少会给出解答。


以我最近改版的AB模板网(www.adminbuy.cn)为例,我想实现调用相关文章的功能,优先按照tag进行匹配,如果tag匹配不到或者匹配条数不足,则再根据关键词进行匹配。


DedeCMS的相关文章标签(likearticle.lib.php)

新版DedeCMS 5.7的相关文章标签存在两个主要问题:


1、相关文章仅限于当前栏目,无法调用其他栏目的内容。


2、只能匹配其他文章的标题(title)和关键词(keywords),并未涉及tag的匹配。


修改DedeCMS(5.7)likearticle.lib.php以调用全站相关文章

打开likearticle.lib.php文件(请事先备份),

查找:$query = "";

在其上方添加以下代码:

$typeid = ' AND arc.id<>$arcid ';

注意:这段代码有两处需要添加。AND arc.id<>$arcid 的作用是限制调用出来的相关文章不包含当前文章。在DedeCMS 7.0之前,这一限制并未被实施。通过上述修改,可以取消相关文章匹配栏目的限制。


DedeCMS相关文章调用tag、关键词(keywords)、标题(title)相同的文章

DedeCMS官方的相关文章标签并未匹配tag相同的文章,而是获取当前文章的tag和关键词(keywords),然后去匹配其他文章的标题(title)和关键词(keywords)。以下是Dede源码片段:

if(!empty($refObj->Fields['keywords']))
{
    $keywords = explode(',' , trim($refObj->Fields['keywords']));
    $keyword = '';
    $n = 1;
    foreach($keywords as $k)
    {
        if($n > 3) break;

        if(trim($k)=='') continue;
        else $k = addslashes($k);

        $keyword .= ($keyword=='' ? " CONCAT(arc.keywords,' ',arc.title) LIKE '%{$k}%' " : " OR CONCAT(arc.keywords,' ',arc.title) LIKE '%{$k}%' ");
        $n++;
    }
}

从以上代码可以看出,DedeCMS只对keywords和title进行了CONCAT操作,而未处理tag。这里提供一种方法(原创作者不详)来解决这个问题。

总结而言,DedeCMS虽然是一款强大的建站工具,但在某些细节上仍需改进。希望本文能帮助大家更好地理解和优化DedeCMS的相关文章功能。