。,2. 在需要显示相关文章的位置,添加以下代码:,,
`,{dede:likearticle row='8'},[field:title/],{/dede:likearticle},
`,,
row`属性表示显示相关文章的数量,可以根据需要自行调整。,,3. 保存模板文件并更新文章页面,即可看到相关文章的显示效果。在DedeCMS织梦内容管理系统中,调用相关文章是一个常见的需求,它不仅能提高用户体验,还可以增强SEO效果,下面将详细介绍如何在DedeCMS中调用相关文章,并提供一些常见问题的解答:
基本方法
1、使用默认标签:
DedeCMS提供了一个内置的标签{dede:likearticle}
,用于调用相关内容,这个标签的基本用法如下:
```html
{dede:likearticle}
<a href="[field:arcurl/]">[field:title/]</a>
{/dede:likearticle}
```
参数说明:
col
:设置分多少列显示,默认为单列。
row
:返回文档列表总数,默认为10。
titlelen
长度,等同于titlelength
。
infolen
简介长度,等同于infolength
。
mytypeid
:手工指定要限定的栏目ID,用逗号分开表示多个。
innertext
:单条记录样式(指标签中间的内容)。
2、自定义类库文件:
官方的{dede:likearticle}
标签可能不够精准,可以通过自定义类库文件来实现更精确的调用,在include/taglib
目录下添加一个liketags.lib.php
文件,代码如下:
```php
<?php
if(!function_exists('lib_liketags'))
{
function lib_liketags(&$ctag,&$refObj)
{
global $dsql,$envs;
//属性处理
$attlist="row|12,titlelen|30,infolen|250,col|1,tablewidth|100,typeid|0,byabs|0,imgwidth|120,imgheight|90,flag|";
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."%";
$orwheres = '';
if($flag != '') {
$flags = explode(',', $flag);
for($i=0; isset($flags[$i]); $i++) $orwheres .= " AND FIND_IN_SET('{$flags[$i]}', arc.flag)>0 ";
}
$ids = array();
$tids = array();
if(!empty($refObj>Fields['tags'])) {
$keyword = $refObj>Fields['tags'];
} elseif(!empty($refObj>Fields['keywords'])) {
$keyword = $refObj>Fields['keywords'];
}
$typeid = ( !empty($typeid) ? $typeid : 0 );
if(empty($typeid))
{
if(!empty($refObj>Typelink>TypeInfos['reid'])) {
$typeid = $refObj>Typelink>TypeInfos['reid'];
} elseif(!empty($refObj>Fields['typeid'])) {
$typeid = $refObj>Fields['typeid'];
}
}
if( !empty($typeid) && !preg_match('/,/', $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#@__tagindex
where $getsql ");
while($arow = $dsql>GetArray('me')) {
$tids[] = $arow['id'];
}
$tid = join(',', $tids);
if($tid!='') {
$dsql>Execute("me", "Select aid From#@__taglist
where tid in($tid) And arcrank > 1 group by aid order by aid desc");
while($arow = $dsql>GetArray("me")) {
$ids[] = $arow['aid'];
$arcid = $refObj>Fields['aid'];
}
}
}
//获取附加表的相关信息
$addField = "";
$addJoin = "";
if(is_object($refObj>ChannelUnit)) {
$addtable = $refObj>ChannelUnit>ChannelInfos['addtable'];
if($addtable!="") {
$addJoin = " LEFT JOIN $addtable ON arc.id = ".$addtable.".aid ";
$addField = "";
$fields = explode(",",$refObj>ChannelUnit>ChannelInfos['listfields']);
foreach($fields as $k=>$v) {
$nfields[$v] = $k;
}
foreach($refObj>ChannelUnit>ChannelFields as $k=>$arr) {
if(isset($nfields[$k])) {
if(!empty($arr['rename'])) {
$addField .= ",".$addtable.".".$k." as ".$arr['rename'];
} else {
$addField .= ",".$addtable.".".$k;
}
}
}
}
}
//执行SQL查询语句并生成HTML代码
$revalue .= "<ul style='width:".$tablewidth.";'>";
if($ids) {
$query = "SELECT * FROM #@__archives WHERE id IN (".implode(',', $ids).") ".$orwheres." ".$addJoin." ORDER BY click DESC,id DESC LIMIT ".$row;
$dsql>ExecuteNoneReturn($query);
while($rs = $dsql>GetObject("rs")) {
$revalue .= "<li><a href='".$rs>ReUrl."' title='".$rs>Title."' target='_blank'>".$rs>Title."</a></li>";
}
}
$revalue .= "</ul>";
return $revalue;
}
}
```
使用方法:
```html
{dede:likearticle row='10' titlelen='42'}
<li><a href="[field:arcurl/]" title="[field:fulltitle/]" target="_blank">[field:title/]</a></li>
{/dede:likearticle}
```
示例:
```html
<div>
<h3>相关文章</h3>
<ul>
{dede:likearticle row='8' eregtype='all|tag|keyword'}
<li><span>[field:pubdate function="MyDate('Ymd',@me)"/]</span>·<a href="[field:arcurl/]" title="[field:fulltitle/]" target="_blank">[field:title/]</a></li>
{/dede:likearticle}
</ul>
</div>
```
常见问题与解决策略
1、问题一:调用相关文章不显示:
原因分析:可能是因为没有相同标签的文章,或者有相同标签的文章不在同一个栏目下,DedeCMS的相关文章默认是调用同一栏目下同标签或关键词的文章。
解决方法:可以尝试修改系统文件include/taglib/likearticle.lib.php
中的条件判断,将$typeid = "And arc.typeid in($typeid) And arc.id<>$arcid";
改为$typeid = "And arc.id<>$arcid";
,然后重新生成所有页面。
2、问题二:如何调用全站相关文章:
解决方法:可以使用上述自定义类库文件的方法,通过修改liketags.lib.php
文件来实现全站相关文章的调用,具体操作步骤如下:
在include/taglib
目录下新建liketags.lib.php
文件。
将上述PHP代码粘贴到文件中。
在模板文件中使用{dede:likearticle}
标签进行调用。
注意事项:修改系统文件前请务必做好备份,以免造成不必要的损失,如果不熟悉操作,建议寻求专业人士帮助。
通过以上介绍,我们了解了在DedeCMS中调用相关文章的基本方法和自定义类库文件的实现方式,合理利用这些功能不仅可以提升网站的用户体验,还能有效增强SEO效果,未来随着DedeCMS的不断更新和完善,相信会有更多便捷高效的功能和插件供我们使用,助力网站运营更加顺利高效。
Dedecms织梦调用相关文章的方法
在DedeCMS中,调用相关文章是一种常见的功能,用于增加用户体验,帮助用户浏览更多相关内容,以下是如何在DedeCMS中调用相关文章的详细步骤:
1. 准备工作
确保你的DedeCMS系统已安装并正常运行。
确定你想要调用相关文章的类型(如单页、列表页等)。
2. 相关文章调用方式
DedeCMS提供了多种调用相关文章的方式,以下是一些常用方法:
2.1. 通过单页模板调用
1、打开你的单页模板文件(如 article_show.html)。
2、在合适的位置添加以下代码:
<?php че_相关内容($dedeArchives); ?>
这段代码将会调用单页模板中当前文章的相关内容。
2.2. 通过列表页模板调用
1、打开你的列表页模板文件(如 list_news.php)。
2、在合适的位置添加以下代码:
<?php // 调用当前列表页的相关文章 $result = GetRelatedArchives($aid); if(is_array($result)) { foreach($result as $v) { // 显示相关文章信息 echo "<li><a href='{dede:field.arcurl/}' title='{dede:field.title/}'>{dede:field.title/}</a></li>"; } } ?>
这段代码将会在列表页中显示与当前列表页相关的内容。
2.3. 通过单页和列表页通用的方式调用
如果你希望在不同类型的页面中调用相关文章,可以使用以下通用代码:
<?php // 获取当前文章的ID $aid = $dedeArchives['aid']; // 获取相关文章 $result = GetRelatedArchives($aid); if(is_array($result)) { foreach($result as $v) { // 显示相关文章信息 echo "<li><a href='{dede:field.arcurl/}' title='{dede:field.title/}'>{dede:field.title/}</a></li>"; } } ?>
3. 相关参数说明
$aid
:当前文章的ID。
GetRelatedArchives()
:DedeCMS提供的函数,用于获取相关文章。
4. 注意事项
调用相关文章时,确保你有足够的权限。
根据需要调整相关文章的显示方式和数量。
测试模板以确保相关文章的调用正确无误。
就是在DedeCMS中调用相关文章的详细方法,希望对你有所帮助!