DedeCMS 5.7 是一个非常经典的 PHP 内容管理系统(CMS),其核心功能由大量的内置函数和类方法实现,理解这些函数是进行二次开发、模板修改和功能扩展的基础。

本手册将核心函数分为几大类,并附上详细说明、参数解释和典型用法示例。
核心全局函数
这些函数是整个系统的基础,在模板和PHP文件中广泛使用。
GetOne() / GetArray() / Execute()
这三个是数据库操作的核心函数,底层封装了 mysql_* 函数(注意:Dede 5.7 使用的是过时的 mysql 扩展,新版本已改为 PDO)。
-
GetOne($sql)
(图片来源网络,侵删)- 说明:执行一条 SQL 查询语句,并返回第一条记录的第一个字段。
- 参数:
$sql(string): SQL 查询语句。
- 返回值:查询结果(单个值),如果查询失败或无结果则返回
false。 - 用途:当只需要获取一个值时使用,如获取网站名称、统计数量等,效率较高。
- 示例:
// 获取网站名称 $dsql->SetQuery("SELECT value FROM `dede_sysconfig` WHERE varname='cfg_webname'"); $webname = $dsql->GetOne(); echo $webname['value']; // 输出网站名称
-
GetArray($sql)- 说明:执行一条 SQL 查询语句,并返回一个包含所有记录的二维数组。
- 参数:
$sql(string): SQL 查询语句。
- 返回值:二维数组
array(array('field1' => 'value1', ...), ...),如果查询失败则返回false。 - 用途:当需要获取多行多列数据时使用,如文章列表、友情链接等。
- 示例:
// 获取所有友情链接 $dsql->SetQuery("SELECT * FROM `dede_flink` WHERE ischeck=1 ORDER BY id DESC"); $flink = $dsql->GetArray(); foreach($flink as $link){ echo "<a href='{$link['url']}' target='_blank'>{$link['webname']}</a> "; }
-
Execute($id, $sql)- 说明:执行一条 SQL 写入或更新语句。
- 参数:
$id(string): 数据库连接标识,通常可以忽略,传'me'即可。$sql(string): SQL 写入/更新/删除语句。
- 返回值:成功返回
true,失败返回false。 - 用途:用于插入、更新、删除数据。
- 示例:
// 插入一条新文章 $arctitle = "测试文章标题"; $arcbody = "这是文章内容。"; $dsql->ExecuteNoneQuery("INSERT INTO `dede_archives` (title, body) VALUES ('$arctitle', '$arcbody')");
GetCates()
- 说明:获取所有栏目的信息,并按层级关系组织成一个数组。
- 参数:无。
- 返回值:包含所有栏目信息的二维数组,每个栏目包含
id,typename,reid,typedir,isdefault等字段。 - 用途:制作自定义导航栏、生成频道页等。
- 示例:
$cates = GetCates(); foreach($cates as $c){ if($c['reid'] == 0){ // 只显示顶级栏目 echo "<a href='{$c['typedir']}'>{$c['typename']}</a>"; } }
GetArtList() / GetOneArt()
这两个是获取文章列表和单篇文章信息的便捷函数。
-
GetArtList($typeid, $row, $col, $type, $innertext,$titlelen,$keyword,$channelid,$limit,$att, $orderby,$tablewidth,$imgwidth,$imgheight)- 说明:获取指定条件的文章列表,功能非常强大,常用于首页、栏目页的列表调用。
- 参数:
$typeid(int): 栏目ID,0表示所有栏目。$row(int): 返回文档列表总数。$col(int): 分多少列显示,默认为单列。$type(string): 数据来源类型,默认为'all'。$innertext(string): 单条记录的模板,用于替换arclist标签中的内容。$titlelen(int): 标题长度。$keyword(string): 关键词筛选。$channelid(int): 频道ID。$limit(string): 起始位置,如"1,10"。$att(string): 属性。$orderby(string): 排序方式,如'pubdate'(发布时间),'click'(点击量),'id'(ID)。$tablewidth(string): 表格宽度。$imgwidth(int): 缩略图宽度。$imgheight(int): 缩略图高度。
- 返回值:包含文章信息的数组。
- 示例:
// 获取ID为1的栏目下的10篇文章,按发布时间倒序 $artlist = GetArtList(1, 10, 1, 'all', '', 0, '', 0, '', 'pubdate DESC'); foreach($artlist as $art){ echo "<li><a href='{$art['arcurl']}'>{$art['title']}</a></li>"; }
-
GetOneArt($aid)- 说明:根据文章ID获取单篇文章的详细信息。
- 参数:
$aid(int): 文章ID。
- 返回值:包含文章所有信息的数组。
- 用途:在文章内容页或其他页面调用特定文章。
- 示例:
// 获取ID为100的文章 $article = GetOneArt(100); echo "<h1>{$article['title']}</h1>"; echo "<div>{$article['body']}</div>";
模板引擎标签 (织梦标签)
虽然这些是标签,但它们底层是通过 PHP 函数实现的,是模板文件的核心。
arclist (文章列表)
- 说明:最常用、最强大的列表标签。
- 常用属性:
typeid: 栏目ID,支持多ID,如'1,2,3'。row: 调用文章数量。titlelen: 标题长度。infolen: 简介/摘要长度。orderby: 排序方式 (click,pubdate,id,rand随机)。limit: 起始和条数,如"1,10"。channel: 频道ID。imgwidth,imgheight: 缩略图尺寸。
- 示例:
{dede:arclist typeid='2' row='5' titlelen='30' orderby='pubdate'} <li> <a href='[field:arcurl/]'>[field:title/]</a> <span>[field:pubdate function="MyDate('m-d', @me)"/]</span> </li> {/dede:arclist}
field (字段)
- 说明:在
arclist,list,artlist痛苦标签内部使用,用于输出文章的各种字段。 - 常用字段:
[field:title/: 文章标题。[field:arcurl/: 文章链接。[field:pubdate/: 发布时间戳,通常配合function使用格式化。[field:description/:[field:litpic/: 缩略图地址。[field:click/: 点击量。[field:typename/: 栏目名称。
- 示例:
{dede:field.title/} <!-- 输出当前文章/栏目标题 --> {dede:field.content/} <!-- 输出当前文章内容 -->
list (栏目列表)
- 说明:在栏目页模板 (
list_*.htm) 中使用,用于列出当前栏目下的所有文章。 - 示例:
{dede:list pagesize='10'} <li> <a href='[field:arcurl/]'>[field:title/]</a> </li> {/dede:list} <!-- 分页标签 --> <div class="dede_pages"> <ul>{dede:pagelist listsize='4'/}</ul> </div>
channel / type
- 说明:用于获取栏目信息,常用于制作导航。
channel:主要用于获取顶级栏目。type:可以获取指定层级的栏目。- 示例:
{dede:channel type='top'} <a href='[field:typelink/]'>[field:typename/]</a> {/dede:channel}
内容模型与自定义字段相关函数
GetFieldValue($aid, $field_name)
- 说明:根据文章ID和字段名获取自定义字段的值。
- 参数:
$aid(int): 文章ID。$field_name(string): 自定义字段名称。
- 返回值:字段值,如果不存在则返回空。
- 用途:在PHP代码中调用自定义字段。
- 示例:
// 获取ID为100的文章的“价格”字段值 $price = GetFieldValue(100, 'price'); echo "价格:".$price;
GetAddOnFields($aid)
- 说明:获取一个文章的所有自定义字段(以数组形式)。
- 参数:
$aid(int): 文章ID。
- 返回值:包含所有自定义字段键值对的数组。
- 用途:批量获取一个文章的自定义字段。
- 示例:
$addon_fields = GetAddOnFields(100); if(isset($addon_fields['price'])){ echo "价格:".$addon_fields['price']; }
辅助功能函数
GetUrl()
-
说明:根据
arcID或typeID生成链接地址。 -
参数:
$aid(int): 文章ID (可选)。$typeid(int): 栏目ID (可选)。
-
返回值:完整的链接地址 (URL)。
-
用途:在PHP代码中动态生成文章或栏目链接。
-
示例:
// 生成ID为1的栏目链接 $type_link = GetUrl(0, 1); echo "<a href='$type_link'>栏目首页</a>"; // 生成ID为100的文章链接 $arc_link = GetUrl(100, 0); echo "<a href='$arc_link'>文章链接</a>";
GetKeywords()
- 说明:从文章内容中提取关键词。
- 参数:
$body(string): 文章内容。$num(int): 提取关键词数量。
- 返回值:关键词字符串,用逗号分隔。
- 用途:自动为文章打上标签。
MyDate($format, $timestamp)
-
说明:一个自定义的日期格式化函数,比
date()更灵活。 -
参数:
$format(string): 格式化字符串,如'Y-m-d H:i:s','m-d'。$timestamp(int): 时间戳。
-
返回值:格式化后的日期字符串。
-
用途:在模板和PHP代码中格式化时间。
-
示例:
// 在模板中 [field:pubdate function="MyDate('Y-m-d', @me)"/] // 在PHP中 $date_str = MyDate('Y-m-d', time());
GetPinyin($str)
- 说明:将汉字字符串转换为拼音。
- 参数:
$str(string): 汉字字符串。
- 返回值:拼音字符串。
- 用途:生成拼音目录、拼音标题等。
重要类库
DedeCMS 大量使用面向对象的方式组织代码,核心类是 DedeSql。
$dsql (数据库操作类)
这是全局最重要的一个对象,代表一个数据库连接实例,所有数据库操作都通过它来完成。
- 初始化:通常在
include/common.inc.php中初始化,全局可用。 - 常用方法:
$dsql->SetQuery($sql): 设置SQL查询语句。$dsql->Execute('me', $sql): 执行SQL(用于写操作)。$dsql->GetOne(): 获取单条记录的第一个字段。$dsql->GetArray(): 获取所有记录的二维数组。$dsql->GetOneArray(): 获取单条记录的数组。$dsql->GetTotalRow($sql): 获取查询结果的总行数。$dsql->Close(): 关闭数据库连接。
总结与学习建议
- 先看模板标签:对于初学者,先熟练掌握
arclist,list,field等核心标签,可以完成90%的前台模板开发工作。 - 再学PHP函数:当模板标签无法满足复杂需求时(如跨表查询、复杂逻辑处理),就需要在PHP文件中使用
$dsql和其他全局函数。 - 善用
include目录:DedeCMS 的核心函数大多定义在include目录下的文件中,如helpers/extend.helper.php(存放了大量辅助函数),common.inc.php(初始化和全局变量)。 - 调试是关键:开发时,多使用
print_r(),var_dump()来打印变量,观察函数返回的结果,这是理解函数用法的最快方式。 - 注意安全:DedeCMS 5.7 版本较老,存在一些已知的SQL注入等安全风险,在使用
$dsql时,务必对用户输入进行过滤和转义,使用$dsql->GetOne("SELECT ... WHERE id='$id'")是非常危险的,应使用$dsql->GetOne("SELECT ... WHERE id='{$id}'")并确保$id是整数,或者使用更安全的预处理方式(尽管5.7原生支持较弱)。
这份手册涵盖了 DedeCMS 5.7 最核心和常用的函数方法,掌握它们,你将能自如地进行模板修改、功能开发和系统维护。
