dedecms二次开发,要会写织梦的标签,会制作织梦的模板。也需要操作其数据库。查询、插入、删除是三个基本操作,操作之前,先了解织梦DedeCMS的数据库类是必须的。


1.创建数据表

    创建一个名为"dede_test"的表,2个字段,1个id,作为唯一标识,一个name作为名称。

   

    使用SQL语句插入一些数据供操作使用:

1

2

3

4

INSERT INTO `dede_test` VALUES ('1', '测试名字1');
INSERT INTO `dede_test` VALUES ('2', '这是第二个');
INSERT INTO `dede_test` VALUES ('3', '第三个喽');
INSERT INTO `dede_test` VALUES ('4', '第四个');


 

2.如何连接数据库?

    只需要在操作的文件中引入include文件夹下面的 common.inc.php文件即可。


    如下

1

2

3

4

<?php
        require_once (dirname(__FILE__) . "/include/common.inc.php");
        print_r($dsql);
?>

3.如何查询数据库   

   【1】在数据库类中,查询一条记录用方法 GetOne();

    如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

<?php
      require_once (dirname(__FILE__) . "/include/common.inc.php");
      if($dsql->IsTable('dede_test')){
          //如果存在dede_test表
          //-------------------
          //|    查询一条记录 |
          //|    GetOne()     |
          //-------------------
          //        ↓
          $row = $dsql->GetOne("SELECT * FROM dede_test WHERE id = 3");
          print_r($row);
      }
?>

    这里用了$dsql类的2个方法,IsTable()以及GetOne(),IsTable先来判断这个表是否存在,如果存在我们就继续执行,他返回的是一个bool值,如果存在为true否则就为false。


    执行查询单条记录的这个过程,即GetOne,通过帮助文档可以知道:$arr = $db->GetOne($sql);也就是说查询的sql语句会传送回来一个数组。  

    

    【2】在数据库类中,查询多条记录 Execute()和GetArray()

 代码:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

<?php
      require_once (dirname(__FILE__) . "/include/common.inc.php");
      if($dsql->IsTable('dede_test')){
          //如果存在dede_test表
          //-------------------
          //|    查询一条记录 |
          //|    GetOne()     |
          //-------------------
          //        ↓
          $row = $dsql->GetOne("SELECT * FROM dede_test WHERE id = 3");
          echo "查询id=3的记录:<br />显示结果:";
          print_r($row);
          //-------------------
          //|    查询多条记录 |
          //|    Execute()     |
          //-------------------
          //        ↓
          echo "<hr />查询dede_test表中的所有记录:<br />显示结果:<br />";
          $sql = "SELECT * FROM dede_test";
            $dsql->Execute('me',$sql);
            while($arr = $dsql->GetArray('me'))
            {
                echo "id = {$arr['id']} ,name = {$arr['name']}<br />";
            }
      }
?>

除了用$dsql->GetArray('me')来获取内容到数组,还可以用$dsql->GetObject("me")获取内容到对象,不过调用方法有些不同,主要这里通过$dbobj->fieldname来调用查询出来的数据:

1

2

3

4

while($dbobj = $dsql->GetObject('me'))
            {
                echo "id = {$dbobj->id} ,name = {$dbobj->name}<br />";
            }


4.插入删除操作数据库

    【1】插入数据库


表单代码如下:

1

2

3

4

5

6

7

<hr />
用于提交数据的表单:<br />
<form action="test.php" type="post">
    <input type="hidden" name="dopost" value="save">
    名称:<input type="text" name="name" value="">
    <input name="提交" type="submit" value="提交">
</form>


用了一个隐藏域dopost来存放操作方法,输入框name用来存放输入数据,然后传递给当前页面,再进行处理,加入部分的表单处理操作:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

//-------------------
      //|    表单处理过程 |
      //|    Save()     |
      //-------------------
      //        ↓
    empty($dopost)? "" : $dopost;
    if($dopost == "save"){
        //如果执行插入操作
        $sql = "INSERT INTO `dede_test` (`name`) VALUES ('{$name}')";
        $dsql->ExecuteNoneQuery($sql); //执行这个插入语句
        $lastInsertID = $dsql->GetLastID(); //获取插入后的最后的ID,然后再传给下一个页面
        ShowMsg("成功增加一条记录内容!","test.php?id={$lastInsertID}");
        exit();
    }

主要是一个INSERT INTO 语句,然后通过$dsql的ExecuteNoneQuery方法来执行这个操作,并且获取插入数据最后一个id再将其传递给下一个页面以便高亮显示。


    【2】删除操作

        删除的操作也是如此,只需要稍微修改就可以。

        增加一个dopost操作为del的判断,然后在显示数据后面增加一个超链接,将id以get方式进行传递.最后进行处理。


如下修改:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

while($dbobj = $dsql->GetObject('me'))
            {
                if($id==$dbobj->id){
                  //如果传递的id值和查询值相同,则高亮显示最后一条插入记录
                    echo "<font
 color='red'>id = {$dbobj->id} ,name = 
{$dbobj->name}</font> <a 
href='test.php?dopost=del&id={$dbobj->id}'>[删除]</a>    
<br />";//这里增加了一个删除的超链接
                }else{
                    echo "id
 = {$dbobj->id} ,name = {$dbobj->name} <a 
href='test.php?dopost=del&id={$dbobj->id}'>[删除]</a><
br />";
                }
            }
      //下面是del这个post的判断:
      empty($dopost)? "" : $dopost;
      if($dopost == "save"){
          //如果执行插入操作
          $sql = "INSERT INTO `dede_test` (`name`) VALUES ('{$name}')";
          $dsql->ExecuteNoneQuery($sql);
          $lastInsertID = $dsql->GetLastID();
          ShowMsg("成功增加一条记录内容!","test.php?id={$lastInsertID}");
          exit();
      }elseif($dopost == "del"){
          //如果dopost为del,则删除数据
          $id = isset($id) && is_numeric($id) ? $id : 0;
          $sql = "DELETE FROM `dede_test` WHERE (`id`='{$id}')";
          $dsql->ExecuteNoneQuery($sql);
          ShowMsg("成功删除一条记录内容!","test.php");
          exit();
      }


dedecms技术论坛地址:http://www.dedecms.com/help/development/2009/1028/1076.html