新版的DedeCMS 5.7在相关文章标签的功能上存在两个主要问题。首先,它只能调用当前栏目下的相关文章,而无法匹配其他栏目的内容。其次,它仅仅通过标题(title)和关键词(keywords)来匹配其他文章,而没有考虑到tag字段的匹配。为了解决这些问题,我们可以对DedeCMS 5.7中的`likearticle.lib.php`文件进行修改。
打开`likearticle.lib.php`文件(建议先备份原文件),找到`$query = ""`这一行。

$ typeid = ' AND arc.id<>$arcid ';
    
将上述代码添加到`$query = ""`的上方。注意,这段代码需要添加两次。这里的`AND arc.id<>$arcid`表示限制调用出来的相关文章不包含当前文章本身。这种限制在DedeCMS 7.0之前的版本中并未实现,因此添加这一段代码可以取消相关文章匹配栏目的限制。
接下来,我们来看如何让相关文章调用能够匹配tag、关键词(keywords)以及标题(title)。默认情况下,DedeCMS的相关文章标签只匹配关键词(keywords)和标题(title),而忽略了tag字段。下面是DedeCMS源码的一部分:

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仅通过`CONCAT(arc.keywords, ' ', arc.title)`来匹配关键词和标题,而没有涉及tag字段。为了改进这一点,我们需要在查询条件中加入对tag字段的匹配。
具体来说,可以在查询语句中添加以下逻辑:

OR CONCAT(arc.tag, ' ', arc.keywords, ' ', arc.title) LIKE '%$k%'
    
这样,就可以同时匹配tag、关键词和标题了。最终的查询语句将会更加全面地覆盖相关内容。
总结一下,通过对`likearticle.lib.php`文件的修改,不仅可以实现全站范围内的相关文章调用,还可以增加对tag字段的匹配,从而提升相关文章推荐的准确性和多样性。这些改动对于提高用户体验和网站内容的相关性非常有帮助。记得在修改前备份原始文件,以便在出现问题时可以迅速恢复。