dede博客文章源码是什么?

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

理解 DedeCMS 的核心思想是关键:它不是一个静态的博客系统,而是一个动态生成静态内容的 CMS,这意味着,当你写一篇文章并点击“生成HTML”时,DedeCMS 会将数据库中的文章数据,通过一套模板系统,最终生成一个 .html 文件存放在服务器上。

dede博客文章源码
(图片来源网络,侵删)

DedeCMS 博客文章的“源码”可以分为三个层面:

  1. 数据库层面:文章的核心数据存储在哪里。
  2. PHP 业务逻辑层面:系统如何处理和调用这些数据。
  3. HTML 模板层面:最终呈现给用户的页面结构是什么样的。

下面我们逐一深入解析。


数据库层面:文章数据的核心

都存储在 DedeCMS 的数据库中,主要涉及以下几个核心表:

dede_archives (文章主表)

这是文章最核心的表,存储了文章的基本信息。 | 字段名 | 说明 | 示例 | | :--- | :--- | :--- | | id | 文章的唯一ID | 123 | | typeid | 所属栏目的ID | 5 (对应“技术分享”栏目) | | arcrank | 文章状态(0:正常, -1:草稿, -2:回收站) | 0 | | click | 点击量 | 1024 | | 文章标题 | "DedeCMS 博客文章源码解析" | | shorttitle | 文章短标题 | "DedeCMS源码解析" | | litpic | 文章缩略图 | /uploads/2025/10/thumb_123.jpg | | pubdate | 发布时间(时间戳) | 1697102400 | | senddate | 提交时间(时间戳) | 1697102400 | | mid | 发布会员的ID | 1 | | description | | "本文详细解析了DedeCMS博客文章的源码结构..." | | keywords | 文章关键词 | "DedeCMS,博客,源码,PHP" | | ismake | 是否生成静态HTML(0:是, 1:否) | 0 |

dede博客文章源码
(图片来源网络,侵删)

dede_addonarticle (文章内容附加表)内容可能很长,为了优化数据库结构,正文内容被存放在这个附加表中。dede_archives 表通过 aid 字段与 dede_addonarticle 表的 aid 字段关联。

字段名 说明
aid 关联到 dede_archives 表的 id
body 文章的完整HTML内容,这是正文的核心。
templet 使用的文章内容模板(默认为空,使用全局模板)

小结:一篇文章由 archives 表的元数据和 addonarticle 表的正文内容共同构成。


PHP 业务逻辑层面:数据的处理与调用

当你访问一篇文章(如 https://yourdomain.com/a/123.html)时,背后发生了一系列 PHP 操作。

URL 路由与解析

DedeCMS 的 URL 结构(如 /a/123.html)是通过 .htaccess 文件(Apache服务器)或 web.config(IIS服务器)进行伪静态处理的。

.htaccess 为例:

dede博客文章源码
(图片来源网络,侵删)
RewriteEngine On
# ... 其他规则 ...
RewriteRule ^a/(\d+).html$ /plus/view.php?aid=$1 [L]

这行规则的意思是:所有以 /a/数字.html 格式的请求,都交给 plus/view.php 文件处理,并将数字作为 aid 参数传递过去。

核心文件 plus/view.php

这是文章页面的入口文件,它的主要任务是:

  1. 接收参数:从 URL 中获取 aid (文章ID)。
  2. 查询数据库:根据 aiddede_archivesdede_addonarticle 表中读取文章的所有数据。
  3. 权限检查:检查文章是否发布、是否在回收站等。
  4. 更新点击量:每次访问时,archives 表中的 click 字段会自动加 1。
  5. 加载模板:确定使用哪个模板文件来渲染页面。
  6. 变量赋值:将查询到的文章数据(标题、内容、时间等)赋值给模板引擎。
  7. 解析并输出:调用模板引擎(通常是 DedeCMS 自定义的模板解析器),将 PHP 变量替换到模板中,最终生成 HTML 并输出到浏览器。

view.php 中的核心逻辑片段(伪代码):

// 1. 获取文章ID
$aid = isset($aid) && is_numeric($aid) ? $aid : 0;
// 2. 查询数据库
$row = $dsql->GetOne("SELECT * FROM `dede_archives` WHERE id = $aid");
if (!$row) {
    // 文章不存在,显示404页面
    ShowMsg('您请求的文章不存在!', '-', 0, 5000);
    exit();
}
// 3. 更新点击量
$dsql->ExecuteNoneQuery("UPDATE `dede_archives` SET click=click+1 WHERE id=$aid");
// 4. 获取文章正文内容
$addRow = $dsql->GetOne("SELECT body FROM `dede_addonarticle` WHERE aid = $aid");
// 5. 准备模板变量
$GLOBALS['arcTitle'] = $row['title'];
$GLOBALS['arcBody'] = $addRow['body'];
// ... 其他变量如 $arcPubDate, $arcDescription 等 ...
// 6. 加载并解析模板
// 默认模板路径通常是 /templets/default/article_article.htm
$tplfile = $cfg_basedir.$cfg_templets_dir.'/'.$cfg_df_style.'/article_article.htm';
require_once(DEDEINC."/arc.partview.class.php");
$pv = new PartView();
$pv->SetTemplet($tplfile);
$pv->Display();

HTML 模板层面:最终页面的结构

这是你在后台“模板管理”里可以编辑和修改的文件,默认情况下,文章页面的模板是 templets/default/article_article.htm

这个模板文件是 HTML 和 DedeCMS 特定标签的混合体。

article_article.htm 模板结构示例

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">{dede:field.title/} - {dede:global.cfg_webname/}</title>
    <meta name="description" content="{dede:field.description function='html2text(@me)'/}">
    <meta name="keywords" content="{dede:field.keywords/}">
</head>
<body>
    <div class="header">
        <!-- 网站头部,通常包含导航等 -->
    </div>
    <div class="main-content">
        <!-- 文章标题 -->
        <h1>{dede:field.title/}</h1>
        <!-- 文章元信息(发布时间、点击量、作者等) -->
        <div class="article-info">
            <span>发布时间:{dede:field.pubdate function='MyDate('Y-m-d H:i:s', @me)'/}</span>
            <span>点击量:<script src="{dede:field name='click'/}"></script></span>
            <!-- 其他信息... -->
        </div>
        <!-- 文章正文内容 -->
        <div class="article-content">
            {dede:field.body/}
        </div>
        <!-- 文章页脚(上一篇/下一篇链接) -->
        <div class="article-page">
            <div class="pre">
                {dede:prenext get='pre'/}
            </div>
            <div class="next">
                {dede:prenext get='next'/}
            </div>
        </div>
        <!-- 文章评论 -->
        <div class="article-comment">
            {dede:include filename="comment.htm"/}
        </div>
    </div>
    <div class="footer">
        <!-- 网站底部 -->
    </div>
</body>
</html>

模板标签解析

  • {dede:field.title/}:输出文章标题,等同于 PHP 中的 $row['title']
  • {dede:field.body/}最核心的标签,输出文章的完整 HTML 正文,等同于 PHP 中的 $addRow['body']
  • {dede:field.pubdate function='MyDate('Y-m-d H:i:s', @me)'/}:输出发布时间,并使用 MyDate 函数将时间戳格式化为可读的日期字符串。
  • {dede:prenext get='pre'/}:输出上一篇文章的链接。
  • {dede:include filename="comment.htm"/}:包含评论页面的模板,这是一个独立的模板文件。

总结与修改建议

层面 核心文件/表 作用 如何修改
数据库 dede_archives, dede_addonarticle 存储文章所有数据 不要直接手动修改! 应通过后台“内容管理”进行增删改。
PHP逻辑 plus/view.php 处理请求、查询数据、调用模板 高级开发者修改,例如自定义字段处理逻辑、修改URL规则等。
HTML模板 templets/default/article_article.htm 定义文章页面的最终样式和结构 最常修改,通过后台“模板管理”即可修改,实现网站风格定制。

如果你想修改 DedeCMS 博客文章的样式,主要操作就是编辑 article_article.htm 模板文件,调整其中的 HTML、CSS 和标签位置。

如果你想增加新的文章字段(如“文章来源”、“推荐等级”),则需要:

  1. 修改数据库:在 dede_archivesdede_addonarticle 表中添加新字段。
  2. 修改后台模板:在 templets/default/article_add.htm (添加文章页) 和 templets/default/article_edit.htm (编辑文章页) 中添加表单输入框。
  3. 修改PHP处理文件:修改 dede/content_add.phpdede/content_edit.php 等文件,处理新字段的提交和更新。

希望这个详细的解析能帮助你完全理解 DedeCMS 博客文章的源码结构!

-- 展开阅读全文 --
头像
dede专题节点分页如何实现?
« 上一篇 昨天
strcmp源码是如何比较字符串的?
下一篇 » 昨天

相关文章

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

目录[+]