织梦上一篇下一篇 标题

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

核心标签

在织梦的文章内容页模板(通常是 article_article.htm)中,获取上一篇和下一篇标题的核心标签是:

织梦上一篇下一篇 标题
(图片来源网络,侵删)
  • : {dede:prenext get='pre'/}
  • : {dede:prenext get='next'/}

这两个标签会自动解析并输出上一篇和下一篇文章的标题文本,并且会自动生成一个指向该文章的链接。


基础用法与代码示例

最简单的用法就是直接将标签放在模板中。

示例代码:

<div class="prenext">
    <div class="pre">
        <strong>上一篇:</strong>
        {dede:prenext get='pre'/}
    </div>
    <div class="next">
        <strong>下一篇:</strong>
        {dede:prenext get='next'/}
    </div>
</div>

效果: 如果当前文章有上一篇,它会显示类似这样的HTML: 上一篇:<a href="/article/123.html">这是上一篇的文章标题</a>

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

如果没有上一篇,则显示: 上一篇:没有了


高级用法:自定义显示内容(推荐)

很多时候,我们希望对上一篇/下一篇的显示进行更精细的控制,

  1. ,不显示“上一篇:”这样的前缀。
  2. 自定义“没有了”时的提示文字。
  3. 获取并显示文章的发布时间、缩略图等更多信息。

这时,我们需要使用 {dede:prenext}底层循环

和链接

场景: 不希望有“上一篇:”这样的文字,只保留一个干净的链接。

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

代码示例:

<div class="article-nav">
    <div class="nav-prev">
        {dede:prenext get='pre' function='str_replace("上一篇:", "", @me)'/}
    </div>
    <div class="nav-next">
        {dede:prenext get='next' function='str_replace("下一篇:", "", @me)'/}
    </div>
</div>
  • function='str_replace("上一篇:", "", @me)' 的作用是,将标签默认输出的内容(@me代表默认内容)中的“上一篇:”字符串替换为空。

使用底层循环获取更多信息(最灵活)

这是最强大和常用的方法,通过 {dede:prenext} 的底层循环,我们可以像调用文章列表一样,获取上一篇/下一篇的任意字段,如标题、链接、时间、作者、缩略图等。

代码示例:

<div class="prenext">
    <!-- 上一篇 -->
    <div class="pre">
        <strong>上一篇:</strong>
        {dede:prenext get='pre' runphp='yes'}
            if(@me <> ''){
                @me = '<a href="'.@me['url'].'" title="'.@me['title'].'">'.@me['title'].'</a>';
            }else{
                @me = '没有了';
            }
        {/dede:prenext}
    </div>
    <!-- 下一篇 -->
    <div class="next">
        <strong>下一篇:</strong>
        {dede:prenext get='next' runphp='yes'}
            if(@me <> ''){
                @me = '<a href="'.@me['url'].'" title="'.@me['title'].'">'.@me['title'].'</a>';
            }else{
                @me = '没有了';
            }
        {/dede:prenext}
    </div>
</div>

更简洁的底层循环写法(推荐):

<div class="prenext">
    <!-- 上一篇 -->
    <div class="pre">
        <strong>上一篇:</strong>
        {dede:prenext get='pre'}
            <a href="[field:url/]" title="[field:title/]">[field:title/]</a>
        {/dede:prenext}
    </div>
    <!-- 下一篇 -->
    <div class="next">
        <strong>下一篇:</strong>
        {dede:prenext get='next'}
            <a href="[field:url/]" title="[field:title/]">[field:title/]</a>
        {/dede:prenext}
    </div>
</div>

底层循环中可用的常用字段:

  • [field:title/]
  • [field:arcurl/][field:url/]:文章链接
  • [field:pubdate function="MyDate('Y-m-d',@me)"/]:文章发布时间(需自定义函数或使用格式化字符串)
  • [field:writer/]:文章作者
  • [field:litpic/]:文章缩略图

进阶示例:显示标题、时间和缩略图

<div class="prenext">
    <!-- 上一篇 -->
    <div class="pre">
        {dede:prenext get='pre'}
            <a href="[field:arcurl/]" class="pre-img">
                <img src="[field:litpic/]" alt="[field:title/]" />
            </a>
            <div class="pre-info">
                <p class="pre-title"><a href="[field:arcurl/]">[field:title/]</a></p>
                <p class="pre-date">[field:pubdate function="strftime('%Y-%m-%d',@me)"/]</p>
            </div>
        {/dede:prenext}
    </div>
    <!-- 下一篇 -->
    <div class="next">
        {dede:prenext get='next'}
            <a href="[field:arcurl/]" class="next-img">
                <img src="[field:litpic/]" alt="[field:title/]" />
            </a>
            <div class="next-info">
                <p class="next-title"><a href="[field:arcurl/]">[field:title/]</a></p>
                <p class="next-date">[field:pubdate function="strftime('%Y-%m-%d',@me)"/]</p>
            </div>
        {/dede:prenext}
    </div>
</div>

常见问题与解决方案

问题:上一篇/下一篇不显示,或者显示异常。

原因分析:

  • 文章为最新或最旧: 当前文章已经是频道或分类中的第一篇或最后一篇,所以自然没有上一篇或下一篇。
  • 栏目设置问题: 检查该文章所属的栏目,在“栏目管理” -> “高级选项”中,“文章排序选项” 是否设置了特殊的排序方式(如按ID降序),如果排序方式不是默认的“发布时间降序”,可能会导致逻辑错乱。
  • 模板标签错误: 检查标签拼写是否正确,是否在正确的模板文件(article_article.htm)中。

解决方案:

  • 检查排序: 进入后台“栏目管理”,点击该文章所属的栏目,进入“高级选项”,确保“文章排序选项”为 “默认(按发布时间降序)” 或其他符合你逻辑的排序方式。
  • 使用if判断: 在模板中使用 runphp 进行判断,如果为空则显示自定义提示。
{dede:prenext get='pre' runphp='yes'}
    if(@me){
        @me = '<a href="'.@me['url'].'">'.@me['title'].'</a>';
    }else{
        @me = '<span>已经是第一篇了</span>';
    }
{/dede:prenext}

问题:上一篇/下一篇指向了错误的栏目。

原因分析: 默认情况下,{dede:prenext} 只在 当前文章所在的栏目 内查找上一篇/下一篇,如果你的文章同时属于多个栏目(通过副栏目),并且希望它在全站范围内查找,就需要修改。

解决方案: 修改织梦核心文件。(操作前请务必备份!)

  1. 打开 /include/arc.archives.class.php 文件。
  2. 搜索 function GetPreNext($gtype='pre') 函数。
  3. 在函数内找到 if($gtype=='pre')if($gtype=='next')query 查询语句。
  4. WHERE 条件中,默认是 AND (typeid = '$this->TypeId' OR typeid IN (SELECT id FROMdede_arctypeWHERE reid='$this->TypeId')),这限制了只在当前栏目及其子栏目查找。
  5. 要跨栏目查找,请将这个 WHERE 条件简化或删除。

修改示例(将查找范围限制为当前主栏目): 找到类似这样的代码:

$query = "SELECT id,title FROM `dede_archives` WHERE 
          (typeid = '$this->TypeId' OR typeid IN (SELECT id FROM `dede_arctype` WHERE reid='$this->TypeId')) 
          AND id $op $aid 
          $orderby limit 0,1";

你可以将其修改为只在当前主栏目查找(去掉子栏目部分):

$query = "SELECT id,title FROM `dede_archives` WHERE 
          typeid = '$this->TypeId' 
          AND id $op $aid 
          $orderby limit 0,1";

或者,要实现全站查找(不限制栏目),则将 typeid 相关的条件完全移除:

$query = "SELECT id,title FROM `dede_archives` WHERE 
          id $op $aid 
          $orderby limit 0,1";

修改完成后,保存文件,然后更新一下HTML页面即可生效。


需求 推荐方法 示例代码
简单显示 使用默认标签 {dede:prenext get='pre'/}
自定义文字 使用function修改 {dede:prenext get='pre' function='str_replace("上一篇:", "", @me)'/}
获取更多信息 使用底层循环 {dede:prenext get='pre'}<a href="[field:arcurl/]">[field:title/]</a>{/dede:prenext}
处理边界情况 在底层循环中用if判断 {dede:prenext get='pre' runphp='yes'}if(@me){...}{/dede:prenext}
跨栏目查找 修改核心文件 修改 /include/arc.archives.class.php 中的 GetPreNext 函数的查询条件

希望这份详细的指南能帮助您完美地实现织梦CMS的上一篇/下一篇功能!

-- 展开阅读全文 --
头像
C语言数字长度如何计算?
« 上一篇 01-04
PHPcms如何连接dedecms数据库?
下一篇 » 01-04

相关文章

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

目录[+]