前言


dedecms进行二次开发对定制了相应webservice接口提供iPhone终端使用,数据结构采用了更加灵活简洁的JSON!


准备


像往常一样,当项目开始之前总喜欢把需求进行分解,并针对各个需求提出各种疑问!这样有针对性的把问题解决自己心里也就明朗了,很清楚要怎么去做了!

这次针对dedecms二次开发webservice接口,需求已经很明确:

  1. dedecms二次开发webservice

  2. 数据格式采用JSON

那么针对这二点,我们自然会想到如何几个问题:(因篇幅过长,故问题分开讲解)

  1. 如何利用dedecms现在的API操作数据库?

    见:Dedecms数据库类操作技巧

  2. 如何知道我们数据存放在哪些表及表中各字段是做什么?

    见:Dedecms 数据库结构分析

  3. PHP中如何把数据以JSON的方式返回给iPhone使用呢(用的是PHP版的dedecms)?

    见:在PHP语言中使用JSON

  4. 当用 json_encode() 返回中文却被编码成 null时,我们应该如何解决呢?

    见:《PHP JSON 中文》


实例讲解


在找到了上面4个问题的答案以后,我们接下来的事情已变成的很简单!

下面我以根据文章编号获取文章信息的API为例,讲解如何运算这样的知识:

1
2
3
4
5
6
7
8
<?php
require_once(dirname(__FILE__) ."/../../include/common.inc.php");
require_once(dirname(__FILE__) ."/jsonUtils.php");
  $sql= "select  a.id,a.title,a.pubdate,a.description,b.body
         FROM #@__archives a,#@__addonarticle b where  a.id = b.aidanda.id=$id";
  $row=$dsql->GetOne($sql);
  echoJSON($row);
?>


2行:用于引入dedecms的公共信息,这里我们只用它提供的$dsql来操作数据库,在Dedecms数据库类操作技巧已经进行了详细的讲解


3行:用于引入json处理的函数,已解决中文为null的问题

4行: 用于获取数据的sql语句,其他的数据结构可以在Dedecms 数据库结构分析中查找

6行: 执行查询语句并返回一条数据

7行: 把结果以json的格式输出


jsonUtils.php代码如下:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<?php
    /**************************************************************
     *
     *  使用特定function对数组中所有元素做处理
     *  @param  string  &$array     要处理的字符串
     *  @param  string  $function   要执行的函数
     *  @return boolean $apply_to_keys_also     是否也应用到key上
     *  @access public
     *
     *************************************************************/
    functionarrayRecursive(&$array,$function,$apply_to_keys_also= false) 
    { 
        static$recursive_counter= 0; 
        if(++$recursive_counter> 1000) { 
            die('possible deep recursion attack'); 
        } 
        foreach($arrayas$key=>$value) { 
            if(is_array($value)) { 
                arrayRecursive($array[$key],$function,$apply_to_keys_also); 
            }else{ 
                $array[$key] =$function($value); 
            } 
             
            if($apply_to_keys_also&&is_string($key)) { 
                $new_key=$function($key); 
                if($new_key!=$key) { 
                    $array[$new_key] =$array[$key]; 
                    unset($array[$key]); 
                } 
            } 
        } 
        $recursive_counter--; 
    } 
             
    /**************************************************************
     *
     *  将数组转换为JSON字符串(兼容中文)
     *  @param  array   $array      要转换的数组
     *  @return string      转换得到的json字符串
     *  @access public
     *
     *************************************************************/
  functionJSON($array) { 
    arrayRecursive($array,'urlencode', true); 
    $json= json_encode($array); 
    returnurldecode($json); 
  } 
      
?>

总结


在现在为止,针对dedecms二次开发webservice的知识与问题已全部介绍完毕!

原文出自:老冯网

版权声明:若无特殊注明,本文皆为( yueshuo )原创,转载请保留文章出处。