jumpage.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <?php
  2. class jumpage {
  3. private $_successWait = 2; //成功信息的跳转时间
  4. private $_errorWait = 3; //失败信息的跳转时间
  5. private $_height = 100; //失败信息的跳转时间
  6. function init() {
  7. }
  8. /**
  9. * 操作错误跳转的快捷方法
  10. * @access protected
  11. * @param string $message 错误信息
  12. * @param string $jumpUrl 页面跳转地址
  13. * @param mixed $ajax 是否为Ajax方式 当数字时指定跳转时间
  14. * @return void
  15. */
  16. function error($message = '', $jumpUrl = '', $ajax = false) {
  17. $this->dispatchJump($message, 0, $jumpUrl, $ajax);
  18. }
  19. /**
  20. * 操作成功跳转的快捷方法
  21. * @access protected
  22. * @param string $message 提示信息
  23. * @param string $jumpUrl 页面跳转地址
  24. * @param mixed $ajax 是否为Ajax方式 当数字时指定跳转时间
  25. * @return void
  26. */
  27. function success($message = '', $jumpUrl = '', $ajax = false,$go = 0) {
  28. $this->dispatchJump($message, 1, $jumpUrl, $ajax,$go);
  29. }
  30. /**
  31. * 默认跳转操作 支持错误导向和正确跳转
  32. * 调用模板显示 默认为public目录下面的success页面
  33. * 提示页面为可配置 支持模板标签
  34. * @param string $message 提示信息
  35. * @param Boolean $status 状态
  36. * @param string $jumpUrl 页面跳转地址
  37. * @param mixed $ajax 是否为Ajax方式 当数字时指定跳转时间
  38. * @access private
  39. * @return void
  40. */
  41. function dispatchJump($message, $status = 1, $jumpUrl = '', $ajax = false,$go=0) {
  42. if (true === $ajax || (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest')) {// AJAX提交
  43. $data = is_array($ajax) ? $ajax : array();
  44. $data['info'] = $message;
  45. $data['status'] = $status;
  46. $data['url'] = $jumpUrl;
  47. $this->ajaxReturn($data);
  48. }
  49. $viewData = array();
  50. $viewData['waitSecond'] = 0;
  51. $viewData['go'] = $go;
  52. $viewData['height'] = $this->_width;
  53. $viewData['message'] = $viewData["error"] = $message;
  54. if (is_int($ajax))
  55. $viewData['waitSecond'] = $ajax;
  56. if (!empty($jumpUrl))
  57. $viewData['jumpUrl'] = $jumpUrl;
  58. // 提示标题
  59. $viewData['msgTitle'] = $status ? "提示信息" : "错误信息";
  60. $viewData['status'] = $status;
  61. $viewData['height'] = $this->_height;
  62. if ($status) { //发送成功信息
  63. // 成功操作后默认停留2秒
  64. $viewData['waitSecond'] = $this->_successWait;
  65. // 默认操作成功自动返回操作前页面
  66. if (!isset($viewData['jumpUrl']))
  67. $viewData["jumpUrl"] = isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : "javascript:window.close();";
  68. $this->render($viewData); //渲染模板
  69. }else {
  70. //发生错误时候默认停留3秒
  71. $viewData['waitSecond'] = $this->_errorWait;
  72. // 默认发生错误的话自动返回上页
  73. if (!isset($viewData['jumpUrl']))
  74. $viewData['jumpUrl'] = "javascript:history.back(-1);";
  75. $this->render($viewData); //渲染模板
  76. // 中止执行 避免出错后继续执行
  77. exit;
  78. }
  79. }
  80. /**
  81. * Ajax方式返回数据到客户端
  82. * @access protected
  83. * @param mixed $data 要返回的数据
  84. * @param String $type AJAX返回数据格式
  85. * @return void
  86. */
  87. function ajaxReturn($data, $type = 'JSON') {
  88. switch (strtoupper($type)) {
  89. case 'JSON' :
  90. // 返回JSON数据格式到客户端 包含状态信息
  91. header('Content-Type:application/json; charset=utf-8');
  92. exit(json_encode($data));
  93. case 'XML' :
  94. // 返回xml格式数据
  95. header('Content-Type:text/xml; charset=utf-8');
  96. exit($this->xml_encode($data));
  97. case 'EVAL' :
  98. // 返回可执行的js脚本
  99. header('Content-Type:text/html; charset=utf-8');
  100. exit($data);
  101. default :
  102. // 其他返回格式抛出异常
  103. throw new CException('该数据格式尚未支持,请修改本函数源码添加对应的头');
  104. }
  105. }
  106. //xml转换
  107. /**
  108. * XML编码
  109. * @param mixed $data 数据
  110. * @param string $root 根节点名
  111. * @param string $item 数字索引的子节点名
  112. * @param string $attr 根节点属性
  113. * @param string $id 数字索引子节点key转换的属性名
  114. * @param string $encoding 数据编码
  115. * @return string
  116. */
  117. function xml_encode($data, $root = 'root', $item = 'item', $attr = '', $id = 'id', $encoding = 'utf-8') {
  118. if (is_array($attr)) {
  119. $_attr = array();
  120. foreach ($attr as $key => $value) {
  121. $_attr[] = "{$key}=\"{$value}\"";
  122. }
  123. $attr = implode(' ', $_attr);
  124. }
  125. $attr = trim($attr);
  126. $attr = empty($attr) ? '' : " {$attr}";
  127. $xml = "<?xml version=\"1.0\" encoding=\"{$encoding}\"?>";
  128. $xml .= "<{$root}{$attr}>";
  129. $xml .= $this->data_to_xml($data, $item, $id);
  130. $xml .= "</{$root}>";
  131. return $xml;
  132. }
  133. /**
  134. * 数据XML编码
  135. * @param mixed $data 数据
  136. * @param string $item 数字索引时的节点名称
  137. * @param string $id 数字索引key转换为的属性名
  138. * @return string
  139. */
  140. function data_to_xml($data, $item = 'item', $id = 'id') {
  141. $xml = $attr = '';
  142. foreach ($data as $key => $val) {
  143. if (is_numeric($key)) {
  144. $id && $attr = " {$id}=\"{$key}\"";
  145. $key = $item;
  146. }
  147. $xml .= "<{$key}{$attr}>";
  148. $xml .= (is_array($val) || is_object($val)) ? data_to_xml($val, $item, $id) : $val;
  149. $xml .= "</{$key}>";
  150. }
  151. return $xml;
  152. }
  153. //渲染模板
  154. function render($data) {
  155. extract($data);
  156. include dirname(__FILE__) . "/tpl/template.php";
  157. }
  158. public function __set($name, $value) {
  159. $setter = 'set' . $name;
  160. if (method_exists($this, $setter))
  161. return $this->$setter($value);
  162. }
  163. public function __get($name) {
  164. $getter = 'get' . $name;
  165. if (method_exists($this, $getter))
  166. return $this->$getter();
  167. }
  168. function setSuccessWait($value) {
  169. $this->_successWait = (int) $value;
  170. }
  171. function setErrorWait($value) {
  172. $this->_errorWait = (int) $value;
  173. }
  174. function setHeight($_height) {
  175. $this->_height = (int) $_height;
  176. }
  177. }