文章介绍
我和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的相关文章功能。