您现在的位置是:首页 > cms教程 > DedeCMS教程DedeCMS教程
dede织梦相关文章标签匹配tag,关键词,标题及调用全站相关文章
霍负2023-09-24DedeCMS教程已有人查阅
导读我和dedecms接触dedecms是从2009开始的,以前一直用风讯和科讯(ASP的)这两款,后来从成都到东莞进一公司打工,该公司就是使用的dedecm
接触dedecms是从2009开始的,以前一直用风讯和科讯(ASP的)这两款,后来从成都到东莞进一公司打工,该公司就是使用的dedecms建站,我也跟着学了,怎么说呢刚开始觉得很强大,到后面用着越来越糟糕,很多地方做的不完善,另外一个让大家很火的地方就是,在dede的论坛提问题基本上官方是不会给你解答的。就拿最近我新改版的跟版网(WWW.GENBAN.ORG)来说,我想调用相关文章,以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的源码片断
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的处理,这里提供一个方法原创作者不详。
<?php
if (!defined('DEDEINC'))
exit('Request Error!');
function lib_likearticle(&$ctag, &$refObj)
{
global $dsql;
$attlist = "row|12,titlelen|28,infolen|150,col|1,tablewidth|100,mytypeid|0,byabs|0,imgwidth|120,imgheight|90";
FillAttsDefault($ctag->CAttribute->Items, $attlist);
extract($ctag->CAttribute->Items, EXTR_SKIP);
$revalue = '';
if (empty($tablewidth))
$tablewidth = 100;
if (empty($col))
$col = 1;
$colWidth = ceil(100 / $col);
$tablewidth = $tablewidth . "%";
$colWidth = $colWidth . "%";
$ids = array();
$tids = array();
$arcid = $refObj->Fields['aid'];
/* if (empty($typeid)) {
if (!empty($refObj->Typelink->TypeInfos['reid'])) {
$typeid = $refObj->Typelink->TypeInfos['reid'];
} else {
if (!empty($refObj->Fields['typeid']))
$typeid = $refObj->Fields['typeid'];
}
}
if (!empty($typeid) && !ereg(',', $typeid)) {
$typeid = GetSonIds($typeid);
}*/
if (!empty($refObj->Fields['tags']) && $eregtype != 'keyword') {
$tags = explode(',', addslashes($refObj->Fields['tags']));
$getsql = " tag like '" . join("' OR tag like '", $tags) . "' ";
$dsql->Execute('me', "Select * From `dede_tagindex` where $getsql ");
while ($arow = $dsql->GetArray('me')) {
$tids[] = $arow['id'];
}
$tid = join(',', $tids);
if ($tid != '') {
$dsql->Execute("me", "Select aid From `dede_taglist` where tid in($tid) And arcrank > -1 group by aid order by aid desc limit 0, $row");
while ($arow = $dsql->GetArray("me")) {
$ids[] = $arow['aid'];
$arcid = $refObj->Fields['aid'];
}
}
}
$typeid = (!empty($mytypeid) ? $mytypeid : ' And arc.id<>'.$arcid.' ');
if ($eregtype == 'tag' && count($ids) == 0) {
return '';
} else {
if (count($ids) > 0) {
/* if (!empty($typeid)) {
$typeid = " And arc.typeid in($typeid) And arc.id<>$arcid ";
}*/
$idsStr = join(',', $ids);
$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.id in($idsStr) $typeid order by arc.id desc";
}else{
$limitRow = $row - count($ids);
$keyword = '';
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";
}
}
}
$innertext = trim($ctag->GetInnerText());
if ($innertext == '')
$innertext = GetSysTemplets('part_arclist.htm');
$dsql->SetQuery($query);
$dsql->Execute('al');
$artlist = '';
if ($col > 1) {
$artlist = "<table width='$tablewidth' border='0' cellspacing='0' cellpadding='0'>rn";
}
$dtp2 = new DedeTagParse();
$dtp2->SetNameSpace('field', '[', ']');
$dtp2->LoadString($innertext);
$GLOBALS['autoindex'] = 0;
$line = $row;
for ($i = 0; $i < $line; $i++) {
if ($col > 1)
$artlist .= "<tr>rn";
for ($j = 0; $j < $col; $j++) {
if ($col > 1)
$artlist .= " <td width='$colWidth'>rn";
if ($row = $dsql->GetArray("al")) {
$ids[] = $row['id'];
$row['info'] = $row['infos'] = cn_substr($row['description'], $infolen);
$row['id'] = $row['id'];
if ($row['corank'] > 0 && $row['arcrank'] == 0) {
$row['arcrank'] = $row['corank'];
}
$row['filename'] = $row['arcurl'] = GetFileUrl($row['id'], $row['typeid'], $row['senddate'], $row['title'], $row['ismake'], $row['arcrank'], $row['namerule'], $row['typedir'], $row['money'], $row['filename'], $row['moresite'], $row['siteurl'], $row['sitepath']);
$row['typeurl'] = GetTypeUrl($row['typeid'], $row['typedir'], $row['isdefault'], $row['defaultname'], $row['ispart'], $row['namerule2'], $row['moresite'], $row['siteurl'], $row['sitepath']);
if ($row['litpic'] == '-' || $row['litpic'] == '') {
$row['litpic'] = $GLOBALS['cfg_cmspath'] . '/images/defaultpic.gif';
}
if (!eregi("^", $row['litpic']) && $GLOBALS['cfg_multi_site'] == 'Y') {
$row['litpic'] = $GLOBALS['cfg_mainsite'] . $row['litpic'];
}
$row['picname'] = $row['litpic'];
$row['stime'] = GetDateMK($row['pubdate']);
$row['typelink'] = "<a href='" . $row['typeurl'] . "'>" . $row['typename'] . "</a>";
$row['image'] = "<img src='" . $row['picname'] . "' border='0' width='$imgwidth' height='$imgheight' alt='" . ereg_replace("['><]", "", $row['title']) . "'>";
$row['imglink'] = "<a href='" . $row['filename'] . "'>" . $row['image'] . "</a>";
$row['fulltitle'] = $row['title'];
$row['title'] = cn_substr($row['title'], $titlelen);
if ($row['color'] != '')
$row['title'] = "<font color='" . $row['color'] . "'>" . $row['title'] . "</font>";
if (ereg('b', $row['flag']))
$row['title'] = "<strong>" . $row['title'] . "</strong>";
$row['textlink'] = "<a href='" . $row['filename'] . "'>" . $row['title'] . "</a>";
$row['plusurl'] = $row['phpurl'] = $GLOBALS['cfg_phpurl'];
$row['memberurl'] = $GLOBALS['cfg_memberurl'];
$row['templeturl'] = $GLOBALS['cfg_templeturl'];
if (is_array($dtp2->CTags)) {
foreach ($dtp2->CTags as $k => $ctag) {
if ($ctag->GetName() == 'array') {
$dtp2->Assign($k, $row);
} else {
if (isset($row[$ctag->GetName()]))
$dtp2->Assign($k, $row[$ctag->GetName()]);
else
$dtp2->Assign($k, '');
}
}
$GLOBALS['autoindex']++;
}
$artlist .= $dtp2->GetResult() . "rn";
} else {
$artlist .= '';
}
if ($col > 1)
$artlist .= " </td>rn";
}
if ($col > 1)
$i += $col - 1;
if ($col > 1)
$artlist .= " </tr>rn";
}
if ($col > 1)
$artlist .= " </table>rn";
$dsql->FreeResult("al");
return $artlist;
}
?>
用以上内容替换likearticle.lib.php的所有内容,这样调用出来的相关文章就相对完美了些,之所以说相对原因是修改后调用相关文章是优先匹配tag,如果tag能匹配到哪怕是匹配到一条就不会再去匹配关键词了,比如我想调用10条,该篇文章tag能匹配到一条,但是关键词能匹配20条,调用出来的效果也只有一条,我现在的做法是用两个标签tag和关键词分别调用5条,这样出来的效果稍微好些。标签调用代码如下:
{dede:likearticle row='5' col=1 titlelen='54' eregtype=tag}
<li><a href="[field:arcurl/]" title="[field:fulltitle/]">[field:title/]</a></li>
{/dede:likearticle}
{dede:likearticle row='5' col=1 titlelen='54' eregtype=keyword}
<li><a href="[field:arcurl/]" title="[field:fulltitle/]">[field:title/]</a></li>
{/dede:likearticle}
不得不说dedecms还是算不错的了,新手入门速度快,标签简单易懂,我做了好几个站都是用dedecms做的,最后希望dedecms越做越好,越来越完善吧!
本文标签:织梦cms标签
很赞哦! ()
相关教程
- dede织梦支付宝接口常见错误代码和解决方法介绍
- dede织梦采集图片不全怎么办
- dede织梦读取附加信息出错怎么办
- dede织梦采集文章只显示列表第一页的实现方法
- dede织梦出现Upload filetype not allow ! 的解决方法
- dede织梦tag Engine Create File False的原因和解决方法
- dede织梦tag标签修改自动提取字节数的方法
- dede织梦likearticle调用全站相关文章的方法
- dede织梦版权去除powered by dedecms的方法
- dede织梦上传不了缩略图“上传失败,请检查配置”的解决方法
- dede织梦后台登陆提示验证码错误怎么办
- dede织梦文章列表 “隔行换色” 的实现方法
图文教程
织梦更新出现读取频道信息失败,无法进行后续操作的解决方法
织梦更新出现:读取频道信息失败,无法进行后续操作!终极解决方法。下面整合一些常用的解决办法和自己最终的解决办法。
dede联动调用问题怎么解决
终于解决了联动调用问题!我是把行业做一个分类 分类调用到频道页面上去! 废话就不多说了,我们开始吧!
织梦dedecmsV5.X bShare分享插件安装方法
织梦官方发布的一款新插件“bShare分享插件”,在织梦CMS后台便可可直接安装使用上社会化分享工具,在后台可以方便查看分享统计信息,让你时刻掌握用户喜欢分享收藏哪些内容
dedecms织梦Pagetitle标记使用方法介绍
DedeCMS Pagetitle 标记使用实例教程 【Pagetitle 标记】 功能说明:表示获取文档的分页标题 适用范围:仅文档模板
相关源码
-
(自适应)蓝色基建施工工程建筑集团网站pbootcms模板下载为工程建筑、基建施工类企业打造的PbootCMS模板,采用现代化设计理念,突出企业实力与项目展示,帮助建筑类企业快速建立专业在线门户。查看源码 -
(自适应)电子元件电路板元器件pbootcms网站源码下载为电子元器件、电路板制造类企业设计,特别适合展示产品参数、技术规格等内容。采用响应式技术,确保各类电子元件在不同设备上都能清晰展示。查看源码 -
自适应APP应用程序介绍推广落地页pbootcms网站源码下载移动应用开发商设计的营销型落地页模板,基于PbootCMS内核深度开发采用前沿响应式架构,无缝适配手机端操作习惯与PC端展示需求。查看源码 -
(自适应响应式)供应链进出口服务pbootcms企业网站源码为供应链管理、进出口服务类企业设计,特别适合展示物流网络、贸易服务和供应链解决方案。采用响应式技术,确保在各类设备上都能呈现企业服务内容。查看源码 -
响应式WordPress简约博客主题Alt_BlogAlt_Blog主题该模板为博客内容展示设计,采用简约现代的风格理念,打造清晰的内容呈现平台。响应式布局确保在不同设备上都能获得良好的浏览体验,帮助博主更好地展示和分享内容。查看源码 -
帝国CMS7.5H5小游戏模板游戏攻略下载网整站源码本模板基于帝国CMS系统开发,为H5小游戏和APP应用资讯类网站设计。模板架构针对小游戏行业特点优化,支持游戏发布、资讯分享、应用推荐等功能,满足各类小游戏门户网站的建设需求。查看源码
| 分享笔记 (共有 篇笔记) |
