使用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官方的相关文章标签并没有直接匹配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代码所示。
问题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,tag
、keyword
、titlelike
和relatedid
分别表示标签、关键词、标题和文章ID,您可以根据实际需求修改参数和代码。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1188878.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复