首頁 > 後端開發 > php教程 > 我把ci的 loader函數改了下 大神幫我看看?

我把ci的 loader函數改了下 大神幫我看看?

WBOY
發布: 2016-07-25 08:47:56
原創
937 人瀏覽過
  1. protected function _ci_load($_ci_data) {
  2. // Set the default data variables
  3. foreach (array('_ci_view', '_ci_vars', '_> foreach (array('_ci_view', '_ci_vars', '_ _ci_return') as $_ci_val) {
  4. $$_ci_val = (!isset($_ci_data[$_ci_val])) ? FALSE : $_ci_data[$_ci_val];
  5. }
  6. }
  7. $file_exists = FALSE;
  8. $_ci_ext = '.html';
  9. // Set the path to the requested file
  10. if ($_ci_path != '') {
  11. $_ci_x = explode(' /', $_ci_path);
  12. $_ci_file = end($_ci_x) . $_ci_ext;
  13. } else {
  14. //可以註解掉下面這一行,因為我們已經可以透過路由自動載入視圖
  15. //$_ci_ext = pathinfo($_ci_view, PATHINFO_EXTENSION);//取得視圖檔案的後綴名,預設為不傳遞後綴名的
  16. //拼接視圖路徑
  17. //載入設定,以方便取得mca(m:模組,c:控制器,a:action)的值
  18. $this->config = &load_class('Config', 'core');
  19. $directory_trigger = $this->config- >item('directory_trigger');
  20. $controller_trigger = $this->config->item('controller_trigger');
  21. $function_trigger = $this->config->item('function_trigger');
  22. //使用者沒有配置偽靜態的情況下,使用pathinfo
  23. $urlinfo = explode('/', $_SERVER['REQUEST_URI']);
  24. $urlinfo['module'] = @ $urlinfo[1] ? $urlinfo[1] : 'home';
  25. $urlinfo['controller'] = @$urlinfo[2] ? $urlinfo[2] : 'index';
  26. $urlinfo[ 'action'] = @$urlinfo[3] ? $urlinfo[3] : 'index';
  27. $m = isset($_GET[$directory_trigger]) && $_GET[$directory_trigger] !='' ? $_GET[$directory_trigger] : $urlinfo['module'];
  28. $c =isset($_GET[$controller_trigger]) && $_GET[$controller_trigger]!='' ? $_GET[ $controller_trigger] : $urlinfo['controller'];
  29. $a = isset($_GET[$function_trigger]) && $_GET[$function_trigger] !=''? $_GET[$function_trigger] : $info[' action'];
  30. //特殊處理common/header(包含公共頭部/底部)的情況
  31. $slasharr = explode('/', $_ci_view);
  32. if (count($slasharr) > 1) {
  33. $_ci_file = $m . '/' . $slasharr['0'].'/' .$slasharr['1'] . $_ci_ext;
  34. } else {
  35. //預設的視圖名稱(不包含後綴名)
  36. $view_name = $_ci_view == '' ? $a : $_ci_view; //如果沒有傳視圖的名稱,預設使用action的名稱
  37. $_ci_file = $m . '/' . $c . '/' . $view_name . $_ci_ext;
  38. }
  39. foreach ($this->_ci_view_paths as $view_file => $cascade) {
  40. if (file_exists($view_file . $_ci_file)) {
  41. $_ci_path = $view_file . $_ci_file;
  42. $file_exists = TRUE;
  43. break;
  44. }
  45. > break;
  46. }
  47. }
  48. }
  49. if (!$file_exists && !file_exists($_ci_path)) {
  50. show_error('Unable to load requested file: ' . $_ci_file);
  51. }
  52. // This allows anything loaded using $this->load (views, files, etc.)
  53. // to become accessible from within the Controller and Model functions.
  54. $_ci_CI = & get_instance();
  55. foreach (get_object_vars($_ci_CI) as $_ci_key => $_ci_var) {
  56. if (!isset($this_-this> $_ci_key)) {
  57. $this->$_ci_key = & $_ci_CI->$_ci_key;
  58. }
  59. }
  60. /*
  61. * Extract and cache variables
  62. /*
  63. * Extract and cache variables *
  64. * You can either set variables using the dedicated $this->load_vars()
  65. * function or via the second parameter of this function. We'll merge
  66. * the twotypes and cache the sooo views that are embed _ci_cached_vars, $_ci_vars); }
  67. extract($this->_ci_cached_vars);
  68. /*
  69. * 緩衝輸出
  70. *
  71. * 我們緩衝輸出有兩個原因:
  72. * 1.速度。您將獲得顯著的速度提升。
  73. * 2. 以便最終渲染的範本可以
  74. * 由輸出類別進行後處理。 為什麼我們
  75. *需要後製? 一方面,為了
  76. * 顯示經過的頁面載入時間。 除非我們
  77. * 可以在內容傳送到
  78. * 瀏覽器之前攔截內容,然後停止計時器,否則它不會準確。
  79. */
  80. ob_start();
  81. // 如果PHP 安裝不支援短標籤,我們將
  82. // 進行一些字串替換,將短標籤
  83. // 更改為標準PHP echo 語句。
  84. if (( bool) @ini_get('short_open_tag') === FALSE AND config_item('rewrite_short_tags') == TRUE) {
  85. echo eval('?>' . preg_replace("/; *s*?>/" , "; ?>", str_replace('=', ' } else {
  86. include($ _ci_path); // include() 與include_once() 允許多個同名視圖
  87. }
  88. log_message('debug', '檔案載入: ' . $_ci_path);
  89. / / 根據請求返回文件數據
  90. if ($_ci_return === TRUE) {
  91. $buffer = ob_get_contents();
  92. @ob_end_clean();
  93. return $buffer;
  94. }
  95. /*
  96. * 刷新緩衝區...還是緩衝刷新器?
  97. * 為了允許視圖嵌套在
  98. * 其他視圖中,我們需要刷新每當
  99. * 我們超出輸出緩衝的第一級時,內容就會返回,以便
  100. * 第一個包含的
  101. * 模板和任何後續模板都可以正確地看到並包含它。哎喲!
  102. *
  103. */
  104. if (ob_get_level() > $this->_ci_ob_level 1) {
  105. ob_end_flush();
  106. } else {
  107. $_ci_CI-> ;out_put- append_output(ob_get_contents());
  108. @ob_end_clean();
  109. }
  110. }
複製代碼


來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板