找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 145|回复: 0

[cms教程] dedecms相关文章标签匹配tag、关键词、标题及调用全站相关文章方法

[复制链接]

该用户从未签到

发表于 2020-9-14 09:18:46 | 显示全部楼层 |阅读模式

您需要 登录 才可以下载或查看,没有账号?立即注册

×
文章介绍
         
        我和dedecms
        接触dedecms是从2009开始的,以前一直用风讯和科讯(ASP的)这两款,后来从成都到东莞进一公司打工,该公司就是使用的dedecms建站,我也跟着学了,怎么说呢刚开始觉得很强大,到后面用着越来越糟糕,很多地方做的不完善,另外一个让大家很火的地方就是,在dede的论坛提问题基本上官方是不会给你解答的。就拿最近我新改版的AB模板网(www.adminbuy.cn)来说,我想调用相关文章,以tag优先调用,如果tag匹配不到或者匹配条数不够再以关键词匹配。
         
        dedecms的相关文章标签(likearticle.lib.php)
        新版的dedecms5.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这个的意思就是限制调用出来的相关文章不包含本文章,记的dedecms7.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++;
        }
        }
        $arcid = (!empty($refObj->Fields['id',) ? $refObj->Fields['aid', : 0);
        if( empty($arcid) || $byabs==0 )
        {
        $orderquery = " ORDER BY arc.id desc ";
        }
        else {
        $orderquery = " ORDER BY ABS(arc.id - ".$arcid.") ";
        }
        if($keyword != '')
        {
        if(!empty($typeid)) {
        $typeid = " AND arc.typeid IN($typeid) AND arc.id$arcid ";
        }
        $query = "SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,
        tp.namerule2,tp.ispart,tp.moresite,tp.siteurl]tp.sitepath
        FROM `dede_archives` arc LEFT JOIN `dede_arctype` tp ON arc.typeid=tp.id
        where arc.arcrank>-1 AND ($keyword) $typeid $orderquery limit 0] $row";
        }
        else
        {
        if(!empty($typeid)) {
        $typeid = " arc.typeid IN($typeid) AND arc.id$arcid ";
        }
        $query = "SELECT arc.*,tp.typedir,tp.typename,tp.corank,tp.isdefault,tp.defaultname,tp.namerule,
        tp.namerule2,tp.ispart,tp.moresite,tp.siteurl]tp.sitepath
        FROM `dede_archives` arc LEFT JOIN `dede_arctype` tp ON arc.typeid=tp.id
        WHERE arc.arcrank>-1 AND $typeid $orderquery limit 0] $row";
        }
         
        注意以上绿色内容就是一部分匹配条件 ,$keyword .= ($keyword=='' ? " CONCAT(arc.keywords,' ',arc.title) LIKE '%$k%' " : " OR CONCAT(arc.keywords,' ',arc.title) LIKE '%$k%' ");可以看出dedecms只CONCAT了keywords和title,没有做tag的处理,这里提供一个方法原创作者不详。
回复

使用道具 举报

网站地图|页面地图|文字地图|Archiver|手机版|小黑屋|找资源 |网站地图

GMT+8, 2024-11-26 08:46

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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