织梦cms 开发文档

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

织梦CMS 开发文档

目录

  1. 织梦CMS简介
  2. 开发环境搭建
  3. 核心架构与目录结构
  4. 模板引擎与标签
  5. 二次开发核心
  6. 常用函数与类库
  7. 安全规范与最佳实践
  8. 调试与性能优化
  9. 资源与社区

织梦CMS简介

织梦CMS(DedeCMS)是一款开源的内容管理系统,基于PHP + MySQL技术开发,它以其简单易用、功能强大、扩展灵活而广受欢迎,尤其适合快速搭建企业官网、新闻门户、个人博客等网站。

主要特点:

  • 模板与程序分离:采用MVC思想,模板和逻辑代码分离,便于设计和维护。
  • 标签化调用:通过简单的标签语言,无需编程即可调用数据和功能。
  • 强大的后台管理:可视化的内容编辑、模型管理、会员系统等。
  • 丰富的插件机制:支持插件扩展,方便添加新功能。
  • 开源免费:遵循开源协议,社区活跃,资源丰富。

开发环境搭建

在开始开发前,需要搭建一个本地服务器环境,推荐使用集成环境包,一键安装。

推荐软件:

  • PHP环境:推荐使用 phpStudyXAMPP,确保PHP版本在 6 - 7.4 之间(织梦V5.7对PHP8支持有限,开发时需注意)。
  • 数据库:MySQL 5.0 - 5.7。
  • Web服务器:Apache 或 Nginx。
  • 开发工具
    • 代码编辑器:VS Code, Sublime Text, Notepad++ 等。
    • FTP/SFTP工具:FileZilla, WinSCP 等。
    • 数据库管理工具:phpMyAdmin。

安装步骤:

  1. 安装集成环境(如phpStudy)。
  2. 将织梦CMS的源码包解压到Web服务器的根目录(如 WWWhtdoc)。
  3. 在浏览器中访问 http://你的域名/install,进入安装向导。
  4. 根据提示填写数据库信息、网站信息等,完成安装。

核心架构与目录结构

理解织梦的目录结构是开发的第一步。

dedecms/
├── dede/                 # 后台管理程序目录
├── include/             # 核心类库和函数文件目录
│   ├── arc.archives.class.php    # 文档发布、生成HTML的核心类
│   ├── channelunit.class.php     # 模型处理核心类
│   ├── common.func.php           # 通用函数库
│   ├── userlogin.class.php       # 用户登录类
│   └── ...
├── plus/                # 扩展功能模块目录
│   ├── guestbook/         # 留言板
│   ├── search/            # 搜索功能
│   └── ...
├── special/             # 专题目录
├── templets/            # 网站前台模板目录
│   ├── default/           # 默认模板
│   └── ...                # 其他模板
├── uploads/             # 上传文件目录(附件、图片等)
├── a/                   # 文章内容静态HTML目录
├── html/                # 首页及其他页面静态HTML目录
├── install/             # 安装程序目录(安装后建议删除)
├── member/              # 会员中心目录
├── favicon.ico
├── index.php            # 前台入口文件
├── robots.txt
└── ...

模板引擎与标签

织梦的模板引擎是其精髓,通过标签来调用数据。

基础语法

  • 变量调用{dede:var name='变量名'/}
  • 循环标签{dede:loop name='循环变量' id='ID'} ... {/dede:loop}
  • 条件判断{dede:if 条件} ... {else} ... {/dede:if}
  • 注释{dede:*这是注释*} (不会被解析输出)

常用系统标签

这些标签通常放在模板的头部,用于获取网站的全局信息。

标签名 用途 示例
global 调用全局变量 {dede:global name='cfg_webname'/} (获取网站名称)
cfg 调用系统配置参数 {dede:field name='cfg_webname'/} (与global类似,常用在列表/内容页)
pagelist 生成分页列表 {dede:pagelist listsize='4'/}
arclist 调用文章列表 最核心、最常用的标签
list 在列表页调用文章列表 {dede:list pagesize='10'}...{/dede:list}
field 页获取字段值 {dede:field.title/} (获取文章标题)
channel 调用栏目列表 {dede:channel type='top'}...{/dede:channel} (调用顶级栏目)

标签

arclist 标签 (文章列表)

用于首页、栏目页等地方调用文章列表。

{dede:arclist typeid='1' row='10' titlelen='30' orderby='pubdate'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function='MyDate('Y-m-d', @me)'/]</span>
    </li>
{/dede:arclist}

常用属性:

  • typeid: 栏目ID,0 表示全站,-1 表示当前栏目及其子栏目。
  • row: 调用文章数量,len`: 标题长度。
  • orderby: 排序方式,如 pubdate (发布时间), click (点击量), id (文章ID)。
  • orderway: 排序方向,desc (降序), asc (升序)。
  • limit: 起始位置, 数量,如 limit='0,5'
list 标签 (列表页专用)

在列表模板(list_栏目ID.htm)中使用,用于调用当前栏目的文章。

{dede:list pagesize='10'}
    <h3><a href="[field:arcurl/]">[field:title/]</a></h3>
    <p>[field:description/]...</p>
    <div class="info">作者:[field:writer/] 发布时间:[field:pubdate function='MyDate('Y-m-d', @me)'/]</div>
{/dede:list}

分页标签:list 标签循环结束后,加上分页代码。

<div class="dede_pages">
    <ul>
        <li><span class="pageinfo">共 <strong>{dede:pagelist listitem='info'/}</strong> 页</span></li>
        {dede:pagelist listsize='5' listitem='pre,next,pageno,option'/}
    </ul>
</div>
field 标签 (内容页专用)模板(article_栏目ID.htm)中使用,用于获取当前文章的详细信息。
<h1>{dede:field.title/}</h1>
<div class="info">
    来源:{dede:field.source/} 作者:{dede:field.writer/} 时间:{dede:field.pubdate function='MyDate('Y-m-d H:i:s', @me)'/}
</div>
<div class="content">
    {dede:field.body/}
</div>

自定义标签

当系统标签无法满足需求时,可以开发自定义标签。

开发步骤:

  1. 创建标签处理文件:在 include/tag/ 目录下创建一个新文件,如 mytag.lib.php

  2. 编写处理函数:文件内必须定义一个与文件名同名的函数。

    // include/tag/mytag.lib.php
    function lib_mytag(&$ctag, &$refObj)
    {
        // 获取标签属性
        $attlist = "typeid|0,row|10";
        FillAttsDefault($ctag->CAttributeItems, $attlist);
        extract($ctag->CAttributeItems, EXTR_SKIP);
        // 查询数据库
        $dsql = new DedeSql(false);
        $dsql->SetQuery("SELECT * FROM dede_archives WHERE typeid = $typeid ORDER BY id DESC LIMIT 0, $row");
        $dsql->Execute('me');
        $html = '';
        while($row = $dsql->GetArray('me')) {
            $html .= "<li><a href='/view.php?aid={$row['id']}'>{$row['title']}</a></li>";
        }
        $dsql->FreeResult();
        return $html;
    }
  3. 在模板中调用

    {dede:mytag typeid='1' row='5'/}

二次开发核心

数据表结构

织梦的核心数据表都带有 dede_ 前缀。

表名 用途
dede_archives 文章主表,存储文章ID、标题、发布时间、所属栏目等核心信息。
dede_addonarticle 文章附加表,存储文章内容、作者、来源等(模型为“文章”时使用)。
dede_arctype 栏目表,存储栏目ID、名称、上级栏目、模板等。
dede_admin 管理员表。
dede_member 会员表。
dede_homepageset 首页设置表。

重要提示dede_archives 表只存储摘要,详细内容在附加表,通过 aid (文章ID) 关联。

核心文件解析

  • 入口文件 (index.php): 负责初始化环境,加载核心类,并根据URL参数决定是显示静态页还是动态页,并调用相应的控制器。
  • 发布流程:
    1. 后台发布文章时,数据先存入 archives 表。
    2. 根据模型,将详细内容存入对应的附加表(如 addonarticle)。
    3. 点击“生成HTML”时,arc.archives.class.php 类被调用,根据模板生成静态HTML文件到 a/ 目录。
  • 动态页:当未生成静态页或开启了“仅动态浏览”时,index.php 会将请求转发给 view.php (文章页) 或 list.php (列表页) 等动态脚本,由这些脚本实时查询数据库并渲染模板。

自定义模型开发

除了默认的“文章”、“图片”等模型,可以创建自己的内容模型。

步骤:

  1. 后台创建模型后台 -> 核心 -> 内容模型管理 -> [增加内容模型],填写模型名称、表前缀等。
  2. 添加字段:进入刚创建的模型,点击“[管理字段]”,添加所需的字段(如:产品型号、价格、规格等),每个字段都有字段名、类型、提示文字等属性。
  3. 创建模板:为这个新模型创建发布模板(article_add_模型ID.htm)、列表模板(list_模型ID.htm模板(article_模型ID.htm)。
  4. 调用数据:在模板中,使用 {dede:field.字段名/} 来调用自定义字段的数据。

自定义表单开发

用于制作留言板、在线报名、招聘申请等。

步骤:

  1. 后台创建表单后台 -> 核心 -> 自定义表单管理 -> [增加表单],填写表单名称。
  2. 添加字段:进入表单管理,点击“[字段管理]”,添加表单字段(如:姓名、电话、留言内容等)。
  3. 前台调用:在需要显示表单的模板页面,使用 {dede:loop table='dede_myform' sort='id' row='10'}...{/dede:loop} 来循环显示已有数据。table 属性是数据表名(dede_ + 你在后台设置的表单名称)。
  4. 提交处理:创建一个HTML表单,action 指向 /plus/diy.phpmethodpost,每个输入框的 name 属性必须与后台添加的字段名一致。
    <form action="/plus/diy.php" enctype="multipart/form-data" method="post">
        <input type="hidden" name="action" value="post" />
        <input type="hidden" name="diyid" value="1" /> <!-- 表单ID -->
        <input type="text" name="name" placeholder="您的姓名" />
        <textarea name="content" placeholder="留言内容"></textarea>
        <button type="submit">提交</button>
    </form>

API接口开发

织梦V5.7开始内置了简单的API功能,可以开启并调用。

  1. 开启API:在 系统 -> 系统基本参数 -> 核心设置 中,开启“是否开启API接口”。
  2. 调用示例 (以文章列表为例)
    • URL: http://你的域名/api/?json
    • 参数:
      • action: 操作类型,如 list (列表), arc (文章详情)
      • typeid: 栏目ID
      • row: 调用数量
    • 请求示例: http://你的域名/api/?action=list&typeid=1&row=5&format=json
    • 返回数据: JSON格式的文章列表数据,可供移动端或其他系统调用。

常用函数与类库

  • GetOne() / GetArray(): dsql 类的常用方法,用于查询数据库。GetOne() 获取一行,GetArray() 获取多行。
  • p(): include/common.func.php 中的调试函数,print_r() 的加强版,会以 <pre> 标签格式化输出变量,方便调试。
  • GetOneMk(): 获取一个栏目信息。
  • GetKeywords(): 获取关键词。
  • MyDate(): 日期格式化函数。

安全规范与最佳实践

  1. SQL注入
    • 永远不要直接拼接SQL语句。
    • 必须使用织梦提供的 $dsql 类进行数据库操作,它会自动处理转义。
    • 对用户输入进行过滤,可以使用 $dsql->FilterSearch() 函数。
  2. XSS攻击
    • 对于用户提交的内容,在输出到HTML前进行转义,可以使用织梦自带的 htmlspecialchars() 函数。
    • 模板中,{dede:field.body/} 默认已经做了转义,但如果要在JS或属性中使用,需要手动处理。
  3. 文件上传安全
    • 严格限制上传文件类型(白名单机制)。
    • 重命名上传的文件,避免使用用户提供的文件名。
    • 将上传目录设置在Web根目录之外,或通过.htaccess禁止执行脚本。
  4. 后台安全
    • 修改默认后台目录 dede 为一个复杂的名字。
    • 定期修改管理员密码。
    • 关闭不必要的后台功能模块。
  5. 代码规范
    • 遵循PSR-4等现代PHP规范。
    • 二次开发时,尽量使用织梦的钩子和标签,而不是直接修改核心文件。
    • 注释清晰,方便后期维护。

调试与性能优化

  • 调试
    • 使用 p($variable); 在代码中打印变量,查看其值。
    • 开启PHP错误报告:在 php.ini 中设置 display_errors = On
    • 使用浏览器开发者工具(F12)查看网络请求和JS错误。
  • 性能优化
    • 静态化:尽可能生成静态HTML页面,减少数据库查询。
    • 缓存:利用织梦自带的缓存机制,或使用Redis、Memcached等外部缓存。
    • 数据库优化:为常用查询字段(如 typeid, arcrank)建立索引。
    • 代码优化:避免在模板中使用复杂的PHP循环和计算,尽量在标签属性中完成。

资源与社区

  • 官方网站http://www.dedecms.com/
  • 官方文档:官方文档相对老旧,但仍有参考价值。
  • 开发者社区
    • 织梦论坛:官方社区,问题多,但解答质量参差不齐。
    • GitHub:搜索 dedecms,可以找到一些开源的二次开发项目和补丁。
    • CSDN、博客园:大量开发者分享织梦二次开发教程和经验。
  • 模板市场:可以购买优质的商业模板进行学习和参考。

希望这份文档能为你打开织梦CMS开发的大门,实践是最好的老师,多动手、多思考,你很快就能熟练掌握它。

-- 展开阅读全文 --
头像
织梦文章模型附件字段如何添加与使用?
« 上一篇 今天
dede管理员密码怎么修改?
下一篇 » 今天

相关文章

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

目录[+]