织梦文章上一篇下一篇功能如何实现?

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

最简单、最常用的方法:使用 {dede:prenext}

这个标签是织梦专门为文章详情页设计的,可以自动获取当前文章的上一篇和下一篇,并生成链接。

织梦文章上一篇下一篇
(图片来源网络,侵删)

页模板中使用

在你的文章详情页模板文件中(通常是 article_article.htm),将 {dede:prenext} 标签插入到你希望显示“上一篇/下一篇”的位置,比如文章内容的下方。

示例代码:

{dede:field.body/}
<div class="prenext">
    <div class="prenext_left">
        {dede:prenext get='pre'/}
    </div>
    <div class="prenext_right">
        {dede:prenext get='next'/}
    </div>
</div>

代码解释:

  • {dede:prenext}: 核心标签。
  • get='pre': 获取并显示上一篇文章。
  • get='next': 获取并显示下一篇文章。
  • 上面的代码会生成类似这样的HTML结构:
    <div class="prenext">
        <div class="prenext_left">
            <a href="/plus/view.php?aid=123">上一篇:这是上一篇文章的标题</a>
        </div>
        <div class="prenext_right">
            <a href="/plus/view.php?aid=125">下一篇:这是下一篇文章的标题</a>
        </div>
    </div>

{dede:prenext} 标签的完整参数说明

{dede:prenext} 标签本身非常灵活,可以通过参数来控制显示内容。

织梦文章上一篇下一篇
(图片来源网络,侵删)
  • get: 指定获取上一篇还是下一篇。

    • get='pre'get='prev': 上一篇
    • get='next': 下一篇
    • get='pre, next' (默认): 同时显示上一篇和下一篇
  • titlelen: 标题长度限制。

    • 示例:{dede:prenext titlelen='30'}限制在30个字符以内,超出部分用省略号表示。
  • innertext: 自定义标签内的显示文本。

    • 这是非常有用的一个参数,可以让你完全自定义链接的文本。
    • 示例:{dede:prenext get='pre' innertext='&laquo; 返回列表'},这会显示一个返回列表的链接,而不是上一篇的标题。

综合示例:

<div class="article_page">
    <!-- 同时显示上一篇和下一篇,标题长度限制为20 -->
    {dede:prenext titlelen='20' /}
    <hr>
    <!-- 分别控制上一篇和下一篇的样式 -->
    <div class="page-nav">
        <span class="prev">
            {dede:prenext get='pre' titlelen='30' innertext='&laquo; 上一篇:[field:title]'/}
        </span>
        <span class="next">
            {dede:prenext get='next' titlelen='30' innertext='下一篇:[field:title] &raquo;'/}
        </span>
    </div>
</div>

高级用法与自定义

如果你需要更精细的控制,或者想实现一些特殊效果(比如没有上一篇/下一篇时显示特定文字),可以使用 dede:arclist 标签来模拟实现。

使用 {dede:arclist} 实现上一篇/下一篇

这种方法更灵活,可以结合其他字段(如缩略图、发布时间等)一起显示。

实现上一篇

{dede:arclist row='1' titlelen='30' orderby='id' orderway='desc'}
    <div class="pre-article">
        <a href="[field:arcurl/]">上一篇:[field:title/]</a>
    </div>
{/dede:arclist}

参数解释:

  • row='1': 只获取一条记录。
  • orderby='id': 按 ID 排序。
  • orderway='desc': 降序排列(即 ID 比当前文章小的上一篇),如果要找下一篇,这里需要改成 orderway='asc'

实现下一篇

{dede:arclist row='1' titlelen='30' orderby='id' orderway='asc'}
    <div class="next-article">
        <a href="[field:arcurl/]">下一篇:[field:title/]</a>
    </div>
{/dede:arclist}

结合 {dede:php} 实现更智能的逻辑(没有文章时显示提示)

将上述 arclist 方法放在一个PHP判断中,可以处理没有上一篇或下一篇的情况。

<div class="prenext">
    <!-- 上一篇 -->
    <div class="pre">
        {dede:php}
            $preRow = GetPreNextArc($aid, 'pre');
            if($preRow){
                echo '<a href="'.$preRow['arcurl'].'">上一篇:'.$preRow['title'].'</a>';
            } else {
                echo '已经是第一篇文章了';
            }
        {/dede:php}
    </div>
    <!-- 下一篇 -->
    <div class="next">
        {dede:php}
            $nextRow = GetPreNextArc($aid, 'next');
            if($nextRow){
                echo '<a href="'.$nextRow['arcurl'].'">下一篇:'.$nextRow['title'].'</a>';
            } else {
                echo '已经是最后一篇文章了';
            }
        {/dede:php}
    </div>
</div>

代码解释:

  • GetPreNextArc($aid, 'pre') 是织梦的一个核心函数,可以直接获取上一篇或下一篇文章的完整信息数组。
  • $aid 是当前文章的ID,在文章详情页模板中可以直接使用。
  • 通过 if($preRow) 判断是否存在上一篇,如果不存在则显示提示文字。

常见问题与解决方法

问题:上一篇/下一篇链接不正确,或者跳转到别的栏目。

  • 原因:通常是因为文章的“栏目归属”设置有问题,织梦的上一篇/下一篇逻辑是基于同一栏目内的文章ID顺序的,如果一篇文章被错误地归类到了多个栏目(通过“选择其他栏目”功能),可能会导致逻辑混乱。
  • 解决方法
    1. 检查文章编辑页面的“栏目选择”,确保它只属于主栏目,而不是多个顶级栏目。
    2. 检查文章是否被正确发布到了它所属的栏目下。

问题:修改了模板后,上一篇/下一篇没有更新。

  • 原因:织梦模板有缓存。
  • 解决方法
    1. 登录织梦后台。
    2. 进入 “系统” -> “一键更新网站”
    3. 选择“更新所有文档”,然后点击“开始执行”,执行完成后,缓存就会更新。

问题:想在首页或列表页调用某篇文章的上一篇/下一篇。

  • 说明:这是不推荐的,因为“上一篇/下一篇”这个概念是相对于当前正在阅读的文章而言的,在列表页,用户没有“当前文章”,所以这个逻辑不成立。
  • 替代方案:如果你想在列表页显示“相关文章”,应该使用 {dede:likearticle} 标签,它可以根据关键词、栏目等信息来调用相关文章。

需求场景 推荐方法 优点 缺点
文章详情页,常规显示 {dede:prenext} 最简单、最原生,系统自动处理 自由度相对较低
文章详情页,需要高度自定义样式或内容 {dede:arclist}GetPreNextArc() 灵活性极高,可结合任何字段 代码稍复杂,需要手动处理“不存在”的情况
列表页或首页 不适用 - 逻辑上不成立,应使用 {dede:likearticle}

对于绝大多数情况,直接使用 {dede:prenext} 标签是最佳选择,简单高效,只有在需要非常特殊的功能时,才考虑使用更复杂的 arclist 或 PHP 代码方法。

-- 展开阅读全文 --
头像
织梦二次开发手机网站如何适配多终端?
« 上一篇 02-17
C语言中long long类型如何正确输出?
下一篇 » 02-17

相关文章

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