dede分页副标题如何设置?

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

指的是,当一篇长文章被分成多个页面时,除了第一页有主标题外,从第二页开始,每个分页页面都有一个独立的、自定义的副标题,这对于SEO优化和提升用户体验非常有帮助。

dede 分页副标题
(图片来源网络,侵删)

下面我将提供三种实现方法,从最简单、最推荐的方法到最灵活、最复杂的方法,并附上详细步骤。


核心思路

无论哪种方法,核心思路都是一致的:

  1. 修改文章编辑器:在文章内容编辑区增加一个“副标题”输入框。
  2. 修改数据表:在 dede_archives (文章主表) 或新建一个附加表,增加一个字段来存储副标题。
  3. 修改PHP处理逻辑:在文章保存时,将副标题字段的数据也保存到数据库中。
  4. 修改模板文件:在文章内容页模板中,通过PHP判断,如果当前不是第一页,则显示副标题。

推荐方案(修改附加表,最稳定)

这是最规范、最安全的方法,不会影响主表结构,适合对系统稳定性要求高的网站。

第1步:创建附加表并添加字段

  1. 登录你的网站数据库管理工具(如phpMyAdmin)。
  2. 找到你的DedeCMS数据库,进入 dede_addonarticle 表(这是“普通文章”模型的附加表)。
  3. 为该表添加一个新的字段,用于存储副标题,执行以下SQL语句:
    ALTER TABLE `dede_addonarticle` ADD `pagesubtitle` VARCHAR(255) NOT NULL DEFAULT '';
    • pagesubtitle 是字段名,你可以自定义。
    • VARCHAR(255) 是数据类型和长度,255个字符通常足够。
    • NOT NULL DEFAULT '' 表示该字段不能为空,默认值为空字符串。

第2步:修改文章发布后台

  1. 打开文件:/dede/templets/article_add.htm (新增文章) 和 /dede/templets/article_edit.htm (编辑文章),编辑器 <textarea> 标签附近,找到合适的位置(比如在“文章内容”下方),添加以下HTML代码:
    <div style="margin:10px 0;">
        <label>分页副标题:</label>
        <input type="text" name="pagesubtitle" id="pagesubtitle" style="width:400px;" class="alltxt" />
        <span class="gray">(此副标题将在文章分页的第2页及之后显示)</span>
    </div>

    这会在后台文章编辑页面增加一个输入框。

    dede 分页副标题
    (图片来源网络,侵删)

第3步:修改PHP处理文件以保存数据

  1. 打开文件:/dede/article_add.php (新增文章处理) 和 /dede/article_edit.php (编辑文章处理)。
  2. 在这两个文件中,找到处理附加表数据的SQL插入或更新语句,将 pagesubtitle 字段加入其中。

article_add.php 中查找类似代码:

// 在 $inquery = $dsql->ExecuteNoneQuery($query); 之前,找到构建 $addquery 的部分
$addquery = " ";
if(empty($typeid2)) $typeid2 = 0;
if(empty($typeid3)) $typeid3 = 0;
$addquery = " (typeid, typeid2, typeid3, body, litpic, userip) VALUES ('$typeid', '$typeid2', '$typeid3', '$body', '$litpic','$userip') ";

修改为:

// 在 $inquery = $dsql->ExecuteNoneQuery($query); 之前,找到构建 $addquery 的部分
$addquery = " ";
if(empty($typeid2)) $typeid2 = 0;
if(empty($typeid3)) $typeid3 = 0;
// 注意:这里需要把POST过来的pagesubtitle进行安全处理,比如使用 dede_htmlspecialchars
$pagesubtitle = $dsql->GetInnerText($pagesubtitle); 
$addquery = " (typeid, typeid2, typeid3, body, litpic, userip, pagesubtitle) VALUES ('$typeid', '$typeid2', '$typeid3', '$body', '$litpic','$userip', '$pagesubtitle') ";

article_edit.php 中查找类似代码:

// 在 $upquery = $dsql->ExecuteNoneQuery($upquery); 之前
$upquery = " SET typeid='$typeid',typeid2='$typeid2',typeid3='$typeid3',body='$body',litpic='$litpic',userip='$userip' ";

修改为:

dede 分页副标题
(图片来源网络,侵删)
// 在 $upquery = $dsql->ExecuteNoneQuery($upquery); 之前
$pagesubtitle = $dsql->GetInnerText($pagesubtitle);
$upquery = " SET typeid='$typeid',typeid2='$typeid2',typeid3='$typeid3',body='$body',litpic='$litpic',userip='$userip', pagesubtitle='$pagesubtitle' ";

第4步:修改文章内容页模板

  1. 打开你的文章内容页模板文件,通常位于 /templets/default/article_article.htm
  2. {dede:field.body/} 标签内部,找到分页代码(通常由 {dede:pagebreak/} 生成)的前后,添加以下PHP和HTML代码:
{dede:field.body/}
<!-- 以下是分页副标题的显示逻辑 -->
<?php
    // 获取当前页码,从URL中获取,默认为1
    $page = isset($_GET['pageno']) ? intval($_GET['pageno']) : 1;
    // 如果当前页码大于1,则显示副标题
    if ($page > 1) {
        // 从附加表中获取副标题
        // 注意:这里需要根据你的实际字段名和表结构调整
        $row = $dsql->GetOne("SELECT pagesubtitle FROM `#@__addonarticle` WHERE aid = '{$aid}'");
        if (is_array($row) && !empty($row['pagesubtitle'])) {
            echo '<h2 class="page-subtitle">' . htmlspecialchars($row['pagesubtitle']) . '</h2>';
        }
    }
?>
<!-- 分页代码 -->
<div class="page">
    {dede:pagebreak/}
</div>

代码解释:

  • $page = isset($_GET['pageno']) ? intval($_GET['pageno']) : 1;:获取当前页码。
  • if ($page > 1):判断如果不是第一页。
  • $dsql->GetOne(...):查询当前文章($aid是文章ID)在附加表中的副标题。
  • echo '<h2>...</h2>':如果副标题存在,则用<h2>标签(或其他你喜欢的标签)显示出来。
  1. 在你的CSS文件中,可以添加样式来美化副标题:
    .page-subtitle {
        font-size: 24px;
        color: #333;
        font-weight: normal;
        text-align: center;
        margin: 30px 0;
        border-bottom: 1px solid #eee;
        padding-bottom: 10px;
    }

利用“字段(最简单,但不推荐)

如果你的需求不复杂,且“字段足够用,这是一个“零修改”的快速方案。

  1. 后台操作:在发布文章时,直接在“字段输入你想要作为分页副标题的内容。
  2. 模板修改:修改 article_article.htm 模板,将第4步中的代码替换为:
    <?php
        $page = isset($_GET['pageno']) ? intval($_GET['pageno']) : 1;
        if ($page > 1) {
            // 直接使用 {dede:field.description/} 标签的值
            // 需要先获取它,因为模板引擎在PHP执行后才解析
            $description = trim(@me);
            if (!empty($description)) {
                echo '<h2 class="page-subtitle">' . htmlspecialchars($description) . '</h2>';
            }
        }
    ?>
    • 缺点:这会占用“字段,摘要和副标题的用途混在一起,不够清晰,如果摘要为空,副标题也无法显示。

直接修改文章内容(最灵活,但破坏性最强)

这种方法不修改数据库,而是通过特殊的HTML标签来标记副标题。

  1. 后台操作:在编辑文章内容时,在需要作为副标题的段落前后,加上自定义的HTML标签,

    这是第一页的内容...
    <div class="my-page-subtitle">这是第二页的副标题</div>
    这是第二页的正文内容...
    <div class="my-page-subtitle">这是第三页的副标题</div>
    这是第三页的正文内容...
  2. 模板修改:修改 article_article.htm 模板,在 {dede:field.body/} 标签内增加PHP代码来处理这些标签:

    {dede:field.body/}
    <?php
    // 使用正则表达式查找并替换自定义的副标题标签
    $body = @me;
    $pattern = '/<div\s+class="my-page-subtitle">(.*?)<\/div>/is';
    $replacement = '<h2 class="page-subtitle">$1</h2>';
    // 注意:这个替换会在整个文章内容里生效,可能会影响布局
    // 更精确的做法是结合分页逻辑,这里仅为示例
    echo preg_replace($pattern, $replacement, $body);
    ?>
    • 缺点:直接修改文章内容,对内容格式有侵入性,如果用户在后台切换编辑器,这些标签可能会被过滤掉,逻辑也相对复杂,需要精确匹配分页位置。

总结与建议

方法 优点 缺点 推荐度
方法一(修改附加表) 结构清晰、稳定安全、符合规范、SEO友好 需要修改数据库和多个文件,步骤稍多 ★★★★★ (最推荐)
方法二(利用摘要) 简单快捷,无需修改任何文件 功能混杂,用途不清晰,不够灵活 ★★☆☆☆ (应急用)
方法三(修改内容) 非常灵活,无需改库 结构,对编辑器不友好,维护困难 ★☆☆☆☆ (不推荐)

对于绝大多数用户,强烈推荐使用方法一,虽然前期需要多花一些时间进行设置,但一旦完成,系统将非常稳定,且功能完全独立,不会对现有功能造成任何影响。

在操作前,请务必备份你的网站文件和数据库,以防万一。

-- 展开阅读全文 --
头像
织梦密码忘了?如何快速找回登录密码?
« 上一篇 04-15
C语言floatxyz是什么数据类型?
下一篇 » 04-15

相关文章

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

目录[+]