如何在DedeCMS中高效利用文章标签匹配tag、关键词和标题来调用全站相关文章?

法:在模板中使用{dede:arclist type=’related’}标签,设置row属性为要显示的文章数量。

使用Tag调用相关文章

如何在DedeCMS中高效利用文章标签匹配tag、关键词和标题来调用全站相关文章?

DedeCMS中,可以通过替换include/taglib/likearticle.lib中的代码,实现使用tag来调用相关文章,具体步骤如下:

1、将以下PHP代码保存到文章模版的适当位置:

{dede:likearticle col='2' row='10' titlelen='42' eregtype=all|tag|keyword}
<li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:likearticle}

2、替换include/taglib/likearticle.lib里的代码为:

<?php
if(!defined('DEDEINC')) exit('Request Error!');
//按关键词关连文章的标签
eregtype属性
eregtype = keyword 只匹配关键字
eregtype = tag 只匹配tag
eregtype = all tag优先,不存在tag则匹配关键字
mytypeid='' 栏目ID,多个栏目用,隔开
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();
  $typeid = ( !empty($mytypeid) ? $mytypeid : 0 );
  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 * Fromdede_tagindex where $getsql ");
    while($arow = $dsql>GetArray('me')) {
      $tids[] = $arow['id'];
    }
    $tid = join(',', $tids);
    if($tid!='') {
      $dsql>Execute("me", "Select aid Fromdede_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'];
      }
    }
  }
  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 fromdede_archives arc left joindede_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(',', addslashes($refObj>Fields['keywords']));
        $getsql = " keywords like '".join("' OR keywords like '", $keywords)."' ";
        $dsql>Execute('me', "Select * Fromdede_archives where $getsql ");
        while($arow = $dsql>GetArray('me')) {
          $ids[] = $arow['aid'];
        }
        $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 fromdede_archives arc left joindede_arctype tp on arc.typeid=tp.id where arc.id in($idsStr) $typeid order by arc.id desc limit 0, $limitRow";
      }
    }
    if($query!='') {
      $revalue .= "<div class="xgwz"><dl class="tbox"><dt><strong>相关文章</strong></dt><dd><ul class="c1 ico2">";
      $dsql>ExecuteNoneReturn($query);
      while($arow = $dsql>GetArray("me")) {
        $revalue .= "<li><a href='".$arow['sitepath'].$arow['filename']."' target='_blank'>".$arow['title']."</a></li>";
      }
      $revalue .= "</ul></dd></dl></div>";
    }
  }
  return $revalue;
}

使用Tag和Keyword调用相关文章

除了单独使用tag来调用相关文章,还可以结合tag和keyword来调用,默认情况下tag优先于keyword,可以自行排序,这种方法非常适合SEO,经测试效果极佳,具体方法如上所示,只需将上述代码中的eregtype设置为all即可。

DedeCMS官方的相关文章标签匹配方式

如何在DedeCMS中高效利用文章标签匹配tag、关键词和标题来调用全站相关文章?

需要注意的是,DedeCMS官方的相关文章标签并没有直接匹配tag相同的文章,而是获取当前文章的tag和关键词(keywords)去匹配其他文章的标题(title)、关键词(keywords),如果需要更精确的匹配,可以使用上述自定义的方法。

表格归纳

以下是对上述内容的表格归纳:

方法 描述 PHP代码
使用Tag调用相关文章 通过替换include/taglib/likearticle.lib中的代码,实现使用tag来调用相关文章 见上文PHP代码
使用Tag和Keyword调用相关文章 结合tag和keyword来调用相关文章,默认tag优先于keyword,可自行排序 见上文PHP代码
DedeCMS官方的相关文章标签匹配方式 获取当前文章的tag和关键词(keywords)去匹配其他文章的标题(title)、关键词(keywords)

FAQs

问题1:如何在DedeCMS中使用tag和keyword同时调用相关文章?

答案1:可以通过替换include/taglib/likearticle.lib中的代码,并设置eregtype为all,实现使用tag和keyword同时调用相关文章,具体方法如上文中的PHP代码所示。

如何在DedeCMS中高效利用文章标签匹配tag、关键词和标题来调用全站相关文章?

问题2:DedeCMS官方的相关文章标签是如何匹配的?

答案2:DedeCMS官方的相关文章标签是通过获取当前文章的tag和关键词(keywords)去匹配其他文章的标题(title)和关键词(keywords),如果需要更精确的匹配,可以使用自定义的方法。

序号 参数名称 描述
1 tag 用于匹配文章标签,可以在文章内容中通过标签云或者自定义标签模板调用相关文章。
2 关键词 用于匹配文章中的关键词,可以通过搜索框、导航栏或者文章内容中的关键词高亮来调用相关文章。
3 用于匹配文章标题,可以在文章列表页面或者文章详情页面调用与标题相似的文章。
4 调用全站相关文章 通过调用全站相关文章功能,可以在文章列表页面或者文章详情页面显示与当前文章相关的其他文章。

以下是一个示例表格,展示了如何使用这些参数:

序号 参数名称 示例代码
1 tag {dede:arclist typeid='1' tag='新闻,体育'}
2 关键词 {dede:arclist typeid='1' keyword='篮球,比赛'}
3 {dede:arclist typeid='1' titlelike='篮球比赛'}
4 调用全站相关文章 {dede:arclist typeid='1' relatedid='{dede:id}'}

示例代码中的{dede:arclist} 是dedecms标签库中的一个文章列表标签,typeid 表示文章分类ID,tagkeywordtitlelikerelatedid 分别表示标签、关键词、标题和文章ID,您可以根据实际需求修改参数和代码。

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1188878.html

(0)
未希的头像未希新媒体运营
上一篇 2024-10-09
下一篇 2024-10-09

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

免费注册
电话联系

400-880-8834

产品咨询
产品咨询
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购  >>点击进入