call.php 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. public function get() {
  9. $id = isset($_GET['id']) && intval($_GET['id']) ? intval($_GET['id']) : exit();
  10. if ($data = $this->db->get_one(array('id'=>$id))) {
  11. if (!$str = tpl_cache('dbsource_'.$id,$data['cache'])) {
  12. if ($data['type'] == 1) { //自定义SQL调用
  13. $get_db = pc_base::load_model("get_model");
  14. $sql = $data['data'].(!empty($data['num']) ? " LIMIT $data[num]" : '');
  15. $r= $get_db->query($sql);
  16. while(($s = $get_db->fetch_next()) != false) {
  17. $str[] = $s;
  18. }
  19. } else {
  20. $filepath = PC_PATH.'modules'.DIRECTORY_SEPARATOR.$data['module'].DIRECTORY_SEPARATOR.'classes'.DIRECTORY_SEPARATOR.$data['module'].'_tag.class.php';
  21. if (file_exists($filepath)) {
  22. $pc_tag = pc_base::load_app_class($data['module'].'_tag', $data['module']);
  23. if (!method_exists($pc_tag, $data['action'])) {
  24. exit();
  25. }
  26. $sql = string2array($data['data']);
  27. $sql['action'] = $data['action'];
  28. $sql['limit'] = $data['num'];
  29. unset($data['num']);
  30. $str = $pc_tag->{$data['action']}($sql);
  31. } else {
  32. exit();
  33. }
  34. }
  35. if ($data['cache']) setcache('dbsource_'.$id, $str, 'tpl_data');
  36. }
  37. echo $this->_format($data['id'], $str, $data['dis_type']);
  38. }
  39. }
  40. private function _format($id, $data, $type) {
  41. switch($type) {
  42. case '1'://json
  43. if (CHARSET == 'gbk') {
  44. $data = array_iconv($data, 'gbk', 'utf-8');
  45. }
  46. return json_encode($data);
  47. break;
  48. case '2'://xml
  49. $xml = pc_base::load_sys_class('xml');
  50. return $xml->xml_serialize($data);
  51. break;
  52. case '3'://js
  53. pc_base::load_app_func('global');
  54. ob_start();
  55. include template_url($id);
  56. $html = ob_get_contents();
  57. ob_clean();
  58. return format_js($html);
  59. break;
  60. }
  61. }
  62. }
  63. ?>