织梦如何调用上下篇链接?

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

使用默认的 {dede:prenext} 标签(最简单、最常用)

这是织梦内置的、最直接的方法,它会自动获取当前文章的上一篇和下一篇,并生成带有标题和链接的HTML代码。

织梦调用上下篇链接
(图片来源网络,侵删)

基础用法

页模板(通常是 article_article.htm)中,您想显示上下篇链接的位置,插入以下代码:

{dede:prenext get='pre'/}
{dede:prenext get='next'/}
  • get='pre':获取上一篇
  • get='next':获取下一篇

组合使用(推荐)

通常我们会将它们组合在一起,并用一些HTML标签进行美化,形成一个完整的上下篇导航模块。

<div class="prenext">
    <div class="pre">
        {dede:prenext get='pre'/}
    </div>
    <div class="next">
        {dede:prenext get='next'/}
    </div>
</div>

自定义样式和文本

默认的输出格式是: 上一篇:<a href="链接">文章标题</a>

如果您想修改“上一篇”和“下一篇”的文本,或者改变其样式,可以使用 innertext 属性。

织梦调用上下篇链接
(图片来源网络,侵删)
<div class="prenext">
    <!-- 上一篇,并自定义文本和样式 -->
    <div class="pre">
        {dede:prenext get='pre' innertext='上一篇:<a href="[field:link/]" title="[field:title/]">[field:title/]</a>'/}
    </div>
    <!-- 下一篇,并自定义文本和样式 -->
    <div class="next">
        {dede:prenext get='next' innertext='下一篇:<a href="[field:link/]" title="[field:title/]">[field:title/]</a>'/}
    </div>
</div>

innertext 属性说明:

  • [field:link/]:获取文章的链接地址。
  • [field:title/]:获取文章的标题。
  • [field:title function='htmlspecialchars(@me)'/]中包含特殊HTML字符(如 <, >, &),使用这个可以防止XSS攻击,更安全。

仅显示链接,不显示“上一篇/下一篇”文字

如果您只想显示一个带标题的链接,可以这样写:

{dede:prenext get='pre' innertext='<a href="[field:link/]" title="[field:title/]">[field:title/]</a>'/}
{dede:prenext get='next' innertext='<a href="[field:link/]" title="[field:title/]">[field:title/]</a>'/}

使用 {dede:field}arc.archives 标签(更灵活、更强大)

如果您需要更精细地控制上下篇的显示逻辑,比如判断是否存在,或者获取更多信息(如发布时间、缩略图等),可以使用这种方法。

获取上一篇和下一篇的数组信息

页模板中,{dede:field} 标签可以获取当前文章的上下篇信息,并以数组形式返回。

{dede:prenext get='pre'/} <!-- 先调用一次,用于生成上下篇数据 -->

您可以使用 field 标签来循环输出这些信息。

示例:带判断和样式的上下篇导航

这是一个非常实用的例子,它会判断上下篇文章是否存在,如果不存在则显示“没有了”。

<div class="prenext">
    <!-- 上一篇 -->
    <div class="pre">
        {dede:prenext get='pre'/}
        <!-- 使用field标签循环上一篇的信息 -->
        <ul>
            {dede:field name='pre' runphp='yes'}
            if(@me){
                @me = "<li><span>上一篇:</span><a href='".@me['arcurl']."'>".@me['title']."</a></li>";
            }else{
                @me = "<li><span>上一篇:</span>没有了</li>";
            }
            {/dede:field}
        </ul>
    </div>
    <!-- 下一篇 -->
    <div class="next">
        {dede:prenext get='next'/}
        <!-- 使用field标签循环下一篇的信息 -->
        <ul>
            {dede:field name='next' runphp='yes'}
            if(@me){
                @me = "<li><span>下一篇:</span><a href='".@me['arcurl']."'>".@me['title']."</a></li>";
            }else{
                @me = "<li><span>下一篇:</span>没有了</li>";
            }
            {/dede:field}
        </ul>
    </div>
</div>

代码解释:

  • {dede:prenext get='pre'/}:这一句是关键,它必须先调用一次,才能让 {dede:field name='pre'} 获取到数据。
  • {dede:field name='pre' runphp='yes'}name='pre' 指定要获取上一篇的信息,runphp='yes' 允许在PHP代码中处理这些数据。
  • @me:在 runphp 中,@me 代表当前字段的值,这里就是上一篇文章的信息数组。
  • if(@me){...}else{...}:判断 @me 是否为空,如果不为空(即存在上一篇),则生成链接;如果为空,则显示“没有了”。
  • @me['arcurl']@me['title']:数组中的键名,分别代表文章链接和文章标题。

获取上下篇文章的其他字段(如缩略图、简介)

结合方法二,您可以轻松获取上下篇文章的任何可用字段,例如缩略图(litpic)、简介(description)等。

<div class="prenext">
    <h3>相关文章</h3>
    <div class="article-relation">
        <!-- 上一篇 -->
        {dede:prenext get='pre'/}
        {dede:field name='pre' runphp='yes'}
        if(@me){
            @me = "
            <div class='relation-item'>
                <a href='".@me['arcurl']."' title='".@me['title']."'>
                    <img src='".@me['litpic']."' alt='".@me['title']."'>
                    <h4>".@me['title']."</h4>
                </a>
            </div>
            ";
        }else{
            @me = "<div class='relation-item'>没有了</div>";
        }
        {/dede:field}
        <!-- 下一篇 -->
        {dede:prenext get='next'/}
        {dede:field name='next' runphp='yes'}
        if(@me){
            @me = "
            <div class='relation-item'>
                <a href='".@me['arcurl']."' title='".@me['title']."'>
                    <img src='".@me['litpic']."' alt='".@me['title']."'>
                    <h4>".@me['title']."</h4>
                </a>
            </div>
            ";
        }else{
            @me = "<div class='relation-item'>没有了</div>";
        }
        {/dede:field}
    </div>
</div>

可用字段列表: 您可以在 @me 数组中使用以下字段:

  • arcurl:文章链接:文章标题
  • litpic:文章缩略图
  • description:文章简介
  • pubdate:发布时间(时间戳)
  • shorttitle:文章短标题
  • typedir:栏目目录

总结与建议

方法 优点 缺点 适用场景
{dede:prenext} 最简单、最直接,代码量少。 灵活性较低,样式和文本修改有限。 快速实现,对样式要求不高的场景。
{dede:field} 非常灵活,可自定义样式,可判断有无,可获取任意字段。 代码稍复杂,需要理解PHP和织梦标签的配合。 对上下篇导航有较高设计要求,或需要显示额外信息的场景。

给您的建议:

  1. 对于绝大多数网站,使用 方法一 的组合用法就足够了,简单高效。
  2. 如果您是网站开发者或对页面有较高要求,强烈推荐 方法二方法三,它们能让您的页面更加美观和功能强大。

请确保您的修改是在织梦的页模板(路径:/templets/default/article_article.htm 或您自定义的模板)中进行,修改完成后,请清除网站缓存,然后刷新文章页面即可看到效果。

-- 展开阅读全文 --
头像
dede图片杂志模板如何实现?
« 上一篇 今天
织梦安装文件藏哪里?
下一篇 » 今天

相关文章

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

目录[+]