织梦文章页如何调用相关文章?

99ANYc3cd6
预计阅读时长 16 分钟
位置: 首页 织梦建站 正文

核心思路

相关文章的逻辑通常是:获取当前文章的关键词,然后根据这些关键词去文章数据库里查找包含相同关键词的其他文章

织梦文章页调用相关文章
(图片来源网络,侵删)

织梦内置的标签 {dede:likearticle} 就是专门为此设计的,它底层执行的SQL逻辑大致是: SELECT * FROM dede_archives WHERE keywords LIKE '%关键词1%' OR keywords LIKE '%关键词2%' ... AND id <> 当前文章ID ORDER BY 点击量/发布时间 DESC


使用官方推荐标签 {dede:likearticle} (最简单)

这是最直接、最简单的方法,官方已经封装好了,只需要在模板文件中调用即可。

打开文章模板文件 登录织梦后台,进入 模板 -> 默认模板管理 -> 找到并点击 页模板 (article_article.htm) 进行编辑。

插入标签 在你希望显示相关文章的位置,插入以下代码:

织梦文章页调用相关文章
(图片来源网络,侵删)
<h3>相关文章</h3>
<ul class="related-article">
    {dede:likearticle row='10' titlelen='50'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
    {/dede:likearticle}
</ul>

标签参数说明

  • row='10':显示的相关文章数量,默认是10条,你可以根据需要修改,len='50'`:相关文章标题的长度,如果标题太长,可以截断,单位是汉字/字符,50通常足够显示大部分标题。
  • typeid='0':指定栏目ID,如果设置为某个栏目ID,则只显示该栏目下的相关文章,0表示不限制栏目。
  • innertext='':自定义每条记录的HTML模板,你可以把上面的 <li>...</li> 写在 innertext 参数里,这样标签本身就不需要包含 <li> 了。
    {dede:likearticle row='10' titlelen='50' innertext='<li><a href="[field:arcurl/]">[field:title/]</a></li>'}
    {/dede:likearticle}

    这样写会更简洁,且逻辑更清晰。


使用 {dedarclist} 标签实现 (更灵活)

{dede:likearticle} 的默认逻辑(基于关键词)可能不够理想,或者你想加入更复杂的条件,这时,你可以使用功能更强大的 {dede:arclist} 标签,并结合PHP代码来实现。

打开文章模板文件 同样,编辑 article_article.htm

织梦文章页调用相关文章
(图片来源网络,侵删)

插入代码

<h3>相关文章</h3>
<ul class="related-article">
    {dede:arclist row='10' titlelen='50'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
    {/dede:arclist}
</ul>

关键步骤:修改标签属性

{dede:arclist} 默认是根据栏目ID来调用的,所以必须手动修改它的属性,让它变成“相关文章”模式。

找到你刚刚插入的 {dede:arclist} 标签,为其添加以下属性:

{dede:arclist 
    row='10' len='50' 
    keyword='[field:keyword/]' 
    idlist='' 
    orderby='click'
}
  • keyword='[field:keyword/]':这是核心!它告诉 arclist 标签,使用当前文章的关键词(通过 [field:keyword/] 获取)作为搜索条件。arclist 会自动将这些关键词拆开,并查找包含任一关键词的文章。
  • idlist='':这个参数非常重要!因为当前文章本身也包含自己的关键词,如果不设置,当前文章也会被列出来,我们把它设为空字符串,就可以排除掉当前文章。
  • orderby='click':按点击量排序,你也可以使用 orderby='pubdate' 按发布时间排序。

手动编写SQL查询 (最强大,适合高级用户)

如果你有非常特殊的需求,比如需要同时匹配关键词和某个特定字段,或者需要复杂的排序逻辑,那么可以直接在模板里嵌入PHP代码来执行自定义的SQL查询。

打开文章模板文件 编辑 article_article.htm

插入PHP代码

<h3>相关文章</h3>
<ul class="related-article">
    <?php
    // 1. 获取当前文章的ID和关键词
    $aid = $arcID; // $arcID 是当前文章ID的全局变量
    $keywords = $this->Fields['keywords']; // $this->Fields 是当前文章数据的数组
    // 2. 处理关键词,准备SQL查询
    $keyword_array = explode(',', $keywords);
    $like_keywords = '';
    foreach ($keyword_array as $k) {
        $like_keywords .= " OR keywords LIKE '%{$k}%'";
    }
    // 移除开头的 " OR "
    $like_keywords = substr($like_keywords, 4);
    // 3. 构建并执行SQL查询
    $query = "SELECT id, title, arcurl FROM dede_archives WHERE id <> $aid AND ($like_keywords) ORDER BY click DESC LIMIT 10";
    $dsql->SetQuery($query);
    $dsql->Execute();
    // 4. 循环输出结果
    while ($row = $dsql->GetArray()) {
        echo "<li><a href='{$row['arcurl']}'>{$row['title']}</a></li>";
    }
    ?>
</ul>

代码解释:

  1. $aid = $arcID;$keywords = $this->Fields['keywords']; 获取当前文章的核心信息。
  2. explode(',', $keywords) 将关键词字符串(如“织梦,PHP,教程”)拆分成一个数组 ['织梦', 'PHP', '教程']
  3. 循环这个数组,构建一个 LIKE 查询字符串,最终会变成 keywords LIKE '%织梦%' OR keywords LIKE '%PHP%' OR keywords LIKE '%教程%'
  4. id <> $aid 确保不显示当前文章本身。
  5. ORDER BY click DESC LIMIT 10 按点击量排序,并只取前10条。
  6. 最后使用 while 循环从数据库结果集中读取数据,并直接用 echo 输出HTML。

总结与建议

方法 优点 缺点 适用场景
{dede:likearticle} 最简单,官方标签,无需额外代码。 灵活性较低,参数较少。 绝大多数场景,追求快速实现。
{dede:arclist} 非常灵活,可以结合其他arclist的强大属性(如typeid, channel等)。 需要手动设置keywordidlist属性,比likearticle稍显复杂。 需要在相关文章基础上增加更多筛选条件时。
手动SQL 最强大,可以实现任何复杂的查询逻辑。 代码量多,需要懂PHP和SQL,有安全风险(注意防SQL注入,此例中因$aid是数字,较安全)。 有非常特殊、官方标签无法满足的需求时。

给新手的建议:

直接使用 方法一 ({dede:likearticle}) 就足够了,这是织梦官方为这个功能设计的最佳实践,稳定且易于维护。

如果你觉得默认的相关文章质量不高(比如因为关键词设置不合理),可以尝试 方法二 ({dede:arclist}),它提供了更多的排序和筛选选项,效果通常会比默认的更好。

-- 展开阅读全文 --
头像
C语言程序设计与C语言,两者究竟有何不同?
« 上一篇 今天
C语言中如何使用messagebox显示消息?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]