dede5.7函数方法手册

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

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

dede5.7函数方法手册
(图片来源网络,侵删)

本手册将核心函数分为几大类,并附上详细说明、参数解释和典型用法示例。


核心全局函数

这些函数是整个系统的基础,在模板和PHP文件中广泛使用。

GetOne() / GetArray() / Execute()

这三个是数据库操作的核心函数,底层封装了 mysql_* 函数(注意:Dede 5.7 使用的是过时的 mysql 扩展,新版本已改为 PDO)。

  • GetOne($sql)

    dede5.7函数方法手册
    (图片来源网络,侵删)
    • 说明:执行一条 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()

  • 说明:根据 arcIDtypeID 生成链接地址。

  • 参数

    • $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(): 关闭数据库连接。

总结与学习建议

  1. 先看模板标签:对于初学者,先熟练掌握 arclist, list, field 等核心标签,可以完成90%的前台模板开发工作。
  2. 再学PHP函数:当模板标签无法满足复杂需求时(如跨表查询、复杂逻辑处理),就需要在PHP文件中使用 $dsql 和其他全局函数。
  3. 善用 include 目录:DedeCMS 的核心函数大多定义在 include 目录下的文件中,如 helpers/extend.helper.php (存放了大量辅助函数), common.inc.php (初始化和全局变量)。
  4. 调试是关键:开发时,多使用 print_r(), var_dump() 来打印变量,观察函数返回的结果,这是理解函数用法的最快方式。
  5. 注意安全:DedeCMS 5.7 版本较老,存在一些已知的SQL注入等安全风险,在使用 $dsql 时,务必对用户输入进行过滤和转义,使用 $dsql->GetOne("SELECT ... WHERE id='$id'") 是非常危险的,应使用 $dsql->GetOne("SELECT ... WHERE id='{$id}'") 并确保 $id 是整数,或者使用更安全的预处理方式(尽管5.7原生支持较弱)。

这份手册涵盖了 DedeCMS 5.7 最核心和常用的函数方法,掌握它们,你将能自如地进行模板修改、功能开发和系统维护。

-- 展开阅读全文 --
头像
C语言如何实现WebService开发?
« 上一篇 02-12
织梦ueditor整合
下一篇 » 02-12

相关文章

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

目录[+]