织梦CMS上一篇下一篇如何正确设置与调用?

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

下面我将从基础用法自定义样式,再到常见问题,为你详细讲解。

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

基础用法(最常用)

页模板(通常是 article_article.htm)中,找到你希望显示上一篇/下一篇的位置,直接插入以下标签:

{dede:prenext get='pre'/}
{dede:prenext get='next'/}

解释:

  • {dede:prenext}: 这是织梦的核心标签,用于获取当前文章的上一篇和下一篇。
  • get='pre': 表示获取上一篇文章。
  • get='next': 表示获取下一篇文章。

织梦会自动解析并替换成类似这样的HTML代码:

上一篇的输出示例: <a href='/a/2025/12345.html'>这是上一篇的文章标题</a>

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

下一篇的输出示例: <a href='/a/2025/12347.html'>这是下一篇的文章标题</a>


自定义样式与布局

默认的 {dede:prenext} 标签输出比较简单,通常我们希望对其进行美化,或者将上一篇和下一篇放在同一个容器中,进行更灵活的布局。

获取单独的标题和链接

有时候你可能不想要 <a> 标签,而是想分别获取标题和链接地址,这时可以使用 function='getto' 属性。

获取上一篇的链接和标题:

织梦cms上一篇下一篇
(图片来源网络,侵删)
{dede:prenext get='pre' function='getto(@me)'/}

这会输出一个数组格式的字符串, "Array ( [title] => 这是上一篇的文章标题 [url] => /a/2025/12345.html )"

你可以结合PHP来分别使用:

<?php
    $pre = '{dede:prenext get="pre" function="getto(@me)"}';
    $pre_info = unserialize($pre); // 将字符串反序列化为数组
    if($pre_info['title']){
?>
        <div class="prenext-box">
            <div class="pre">
                <span>上一篇:</span>
                <a href="<?php echo $pre_info['url']; ?>"><?php echo $pre_info['title']; ?></a>
            </div>
<?php
    }
?>

获取下一篇的链接和标题:

{dede:prenext get='next' function='getto(@me)'/}

用法同上,只需将 get='pre' 改为 get='next'

经典布局:左右分栏(上一篇在左,下一篇在右)

这是最常见的布局方式,我们可以将两个标签放在一个 div 容器中,并用 float 来控制位置。

HTML/CSS 代码示例:

在模板文件 article_article.htm 中添加以下代码:

<div class="prenav">
    <!-- 左侧上一篇 -->
    <div class="prenav-left">
        {dede:prenext get='pre'/}
    </div>
    <!-- 右侧下一篇 -->
    <div class="prenav-right">
        {dede:prenext get='next'/}
    </div>
    <!-- 清除浮动,防止布局错乱 -->
    <div class="clear"></div>
</div>

然后在CSS文件(/templets/default/style/dedecms.css)中添加样式:

.prenav {
    width: 100%;
    border-top: 1px dashed #e0e0e0;
    border-bottom: 1px dashed #e0e0e0;
    padding: 15px 0;
    margin: 20px 0;
    font-size: 14px;
    color: #666;
}
.prenav-left {
    float: left;
    width: 48%;
}
.prenav-right {
    float: right;
    width: 48%;
    text-align: right; /* 让下一篇靠右对齐 */
}
.clear {
    clear: both;
    height: 0;
    overflow: hidden;
    font-size: 0;
}

效果: 上一篇的文章链接会显示在左边,下一篇的文章链接会显示在右边,中间用虚线隔开,非常美观。


常见问题与注意事项

没有上一篇或下一篇时显示指定文字

默认情况下,如果已经是第一篇或最后一篇文章,上一篇/下一篇的链接会指向自己,或者不显示,我们可以通过修改标签,让它在没有时显示“已经是第一篇”或“已经是最后一篇”这样的提示。

方法:使用 runphp='yes' 属性

这是一个非常强大的技巧,可以让我们用PHP代码来控制输出。

<div class="prenav">
    <div class="prenav-left">
        {dede:prenext get='pre' runphp='yes'}
            if(@me == ''){
                @me = '<span>已经是第一篇了</span>';
            }else{
                @me = @me; // 保持原样输出
            }
        {/dede:prenext}
    </div>
    <div class="prenav-right">
        {dede:prenext get='next' runphp='yes'}
            if(@me == ''){
                @me = '<span>已经是最后一篇了</span>';
            }else{
                @me = @me; // 保持原样输出
            }
        {/dede:prenext}
    </div>
    <div class="clear"></div>
</div>

代码解释:

  • runphp='yes': 启用PHP解析。
  • @me: 在 {dede:} 标签的 runphp 中,@me 代表标签本身将要输出的内容。
  • if(@me == ''): 判断织梦默认获取到的内容是否为空,如果为空,说明没有上一篇或下一篇。
  • @me = '...': 如果条件成立,就重新给 @me 赋值,即显示我们自定义的文字。
  • @me = @me;: 如果条件不成立,就保持原来的输出。

指定栏目内获取上一篇/下一篇

默认情况下,上一篇/下一篇是在全站范围内查找的,但很多时候我们希望只在当前栏目内查找。

这需要修改 include/arc.archives.class.php 文件,修改前请务必备份原文件!

  1. 打开 include/arc.archives.class.php 文件。
  2. 搜索 function GetPreNext($gtype='pre') 函数。
  3. 找到生成SQL查询的代码,通常在 if($gtype=='pre')else if($gtype=='next') 分支里。
  4. 修改 $query 变量,在 WHERE 条件中加入 AND typeid = '$this->TypeID'

修改示例(上一篇部分):

修改前:

if($gtype=='pre')
{
    $query = "SELECT id,title FROM `dede_archives` WHERE $order < '$this->Fields['senddate']' AND arcrank > -1 ORDER BY $order DESC";
}

修改后(限定当前栏目):

if($gtype=='pre')
{
    // 在WHERE条件中增加了 AND typeid = '$this->TypeID'
    $query = "SELECT id,title FROM `dede_archives` WHERE typeid = '{$this->TypeID}' AND $order < '{$this->Fields['senddate']}' AND arcrank > -1 ORDER BY $order DESC";
}

修改示例(下一篇部分):

修改前:

else if($gtype=='next')
{
    $query = "SELECT id,title FROM `dede_archives` WHERE $order > '$this->Fields['senddate']' AND arcrank > -1 ORDER BY $order ASC";
}

修改后(限定当前栏目):

else if($gtype=='next')
{
    // 在WHERE条件中增加了 AND typeid = '$this->TypeID'
    $query = "SELECT id,title FROM `dede_archives` WHERE typeid = '{$this->TypeID}' AND $order > '{$this->Fields['senddate']}' AND arcrank > -1 ORDER BY $order ASC";
}

注意:

  • $this->TypeID 就是当前文章的栏目ID。
  • 修改后,需要清除一下织梦的缓存(后台 -> 系统 -> 清除缓存),才能生效。

需求 解决方案
基本显示 {dede:prenext get='pre'}{dede:prenext get='next'}
左右分栏布局 div 包裹,并用 float 布局
无文章时显示提示 使用 runphp='yes' 进行PHP判断
限定在当前栏目 修改 include/arc.archives.class.php 文件,增加 typeid 条件

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

-- 展开阅读全文 --
头像
dede 友情链接 数量 修改
« 上一篇 01-04
dede 81 html编辑器
下一篇 » 01-04

相关文章

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

目录[+]