当前位置:首页 > CMS教程 > phpcms > 列表

【phpcms-v9】phpcms-v9数据源调用的控制器文件分析phpcms/modules/db

发布:smiling 来源: PHP粉丝网  添加日期:2014-10-24 09:59:27 浏览: 评论:0 

【phpcms-v9】phpcms-v9数据源调用的控制器文件分析phpcms/modules/dbsource/call.php:

  1. <?php    
  2. defined('IN_PHPCMS'or exit('No permission resources.');    
  3. class call  {   
  4.     private $db;   
  5.     public function __construct() {   
  6.         $this->db = pc_base::load_model('datacall_model');   
  7.     }   
  8.        
  9.     /*  
  10.      * 数据源的调用:<script type="text/javascript" src="http://www.zhen.com/index.php?m=dbsource&c=call&a=get&id=2"></script>  
  11.      */   
  12.     public function get() {   
  13.         //数据源id:即zp_datacall数据表中自增id   
  14.         $id = isset($_GET['id']) && intval($_GET['id']) ? intval($_GET['id']) : exit();   
  15.         //获取当前数据源记录   
  16.         if ($data = $this->db->get_one(array('id'=>$id))) {   
  17.             //运算符的优先级搞清楚,1-先赋值  2-再进行非逻辑   
  18.             if (!$str = tpl_cache('dbsource_'.$id,$data['cache'])) {//如果没有生成缓存   
  19.                 if ($data['type'] == 1) { //自定义SQL调用   
  20.                     $get_db = pc_base::load_model("get_model");//不设置要查询的数据表,只执行查询操作   
  21.                     //拼接sql语句   
  22.                     $sql = $data['data'].(!emptyempty($data['num']) ? " LIMIT $data[num]" : '');   
  23.                     $r$get_db->query($sql);//执行查询sql语句,注意:sql语句中已经有表名   
  24.                     while(($s = $get_db->fetch_next()) != false) {//查询sql语句中的数据表   
  25.                         $str[] = $s;//将查询到的表记录置入$str[]二维数组   
  26.                     }   
  27.                 } else {//非自定义sql调用情况   
  28.                     //寻找对应模块下的xxx_tag.class.php文件   
  29.                     $filepath = PC_PATH.'modules'.DIRECTORY_SEPARATOR.$data['module'].DIRECTORY_SEPARATOR.'classes'.DIRECTORY_SEPARATOR.$data['module'].'_tag.class.php';   
  30.                     if (file_exists($filepath)) {   
  31.                         //如果存在,则引入pc标签类库文件   
  32.                         $pc_tag = pc_base::load_app_class($data['module'].'_tag'$data['module']);    
  33.                         //调用方法   
  34.                         if (!method_exists($pc_tag$data['action'])) {   
  35.                             exit();   
  36.                         }   
  37.                         $sql = string2array($data['data']);//sql语句,如:select * from zp_block   
  38.                         $sql['action'] = $data['action'];//方法   
  39.                         $sql['limit'] = $data['num'];//数量   
  40.                         unset($data['num']);   
  41.                         $str  = $pc_tag->$data['action']($sql);   
  42.                            
  43.                     } else {   
  44.                         exit();   
  45.                     }   
  46.                 }   
  47.                 //如果缓存时间不为空,则缓存到caches/caches_template/dbsource/$id.php文件中   
  48.                 //缓存的是编译后的文件   
  49.                 if ($data['cache']) setcache('dbsource_'.$id$str'tpl_data');   
  50.             }//没生成缓存的情况   
  51.             echo $this->_format($data['id'], $str$data['dis_type']);//参数3-输出方法(1-json 2-xml 3-js)   
  52.         }   
  53.     }   
  54.        
  55.     private function _format($id$data$type) {   
  56.         switch($type) {   
  57.             case '1'://json   
  58.                 if (CHARSET == 'gbk') {   
  59.                     $data = array_iconv($data'gbk''utf-8');   
  60.                 }   
  61.                 return json_encode($data);//将数据json化,再输出   
  62.                 break;   
  63.                    
  64.             case '2'://xml   
  65.                 $xml = pc_base::load_sys_class('xml');   
  66.                 return $xml->xml_serialize($data);//将数据xml化,再输出   
  67.                 break;   //开源代码phpfensi.com 
  68.                    
  69.             case '3'://js      js的情况没有使用到$data参数数据   
  70.                 pc_base::load_app_func('global');//引入global.func.php公共函数库文件   
  71.                 ob_start();//开启缓冲区   
  72.                 include template_url($id);//生成缓存文件,应引入缓存文件中内容(编译后的内容),此函数主要用来编译template字段到缓存文件   
  73.                 $html = ob_get_contents();//获取缓冲区中内容   
  74.                 ob_clean();//清空缓存区   
  75.                 return format_js($html);//将文本格式成适合js输出的字符串,注意:此函数主要通过 通过document.write()动态将编译后的代码输出到网页中   
  76.                 break;   
  77.         }   
  78.     }   
  79. }   
  80. ?>

Tags: phpcms数据源 phpcms控制器文件

分享到: