ホームページ >バックエンド開発 >PHPチュートリアル >ci のローダー機能を変更しました。誰か助けてくれませんか?

ci のローダー機能を変更しました。誰か助けてくれませんか?

WBOY
WBOYオリジナル
2016-07-25 08:47:56939ブラウズ
  1. protected function _ci_load($_ci_data) {
  2. // デフォルトのデータ変数を設定します
  3. foreach (array('_ci_view', '_ci_vars', '_ci_path', '_ci_return') as $_ci_val) {
  4. $$_ci_val = (!isset($_ci_data[$_ci_val])) ? FALSE : $_ci_data[$_ci_val];
  5. }
  6. $file_exists = FALSE;
  7. $_ci_ext = '.html';
  8. // へのパスを設定します要求されたファイル
  9. if ($_ci_path != '') {
  10. $_ci_x =explode('/', $_ci_path);
  11. $_ci_file = end($_ci_x) . $_ci_ext;
  12. } else {
  13. //コメント可能out 次の行は、すでにルーティングを通じてビューを自動的にロードできるためです
  14. //$_ci_ext = pathinfo($_ci_view, PATHINFO_EXTENSION) //ビュー ファイルのサフィックス名を取得します。デフォルトではサフィックス名は渡されません
  15. ; //ビューのパスを結合します
  16. //mca(m: module, c:controller, a: action) の値を簡単に取得するために設定をロードします
  17. $this->config = &load_class('Config', 'core') ;
  18. $directory_trigger = $this->config->item('directory_trigger');
  19. $controller_trigger = $this->config->item('controller_trigger');
  20. $function_trigger = $this-> config->item( 'function_trigger');
  21. //ユーザーが疑似静的を設定しない場合は、pathinfo を使用します
  22. $urlinfo =explode('/', $_SERVER['REQUEST_URI']);
  23. $urlinfo[ 'モジュール'] = @$ urlinfo[1] ? $urlinfo[1] : 'ホーム';
  24. $urlinfo['コントローラー'] = @$urlinfo[2] : 'インデックス';
  25. $ urlinfo['action'] = @$urlinfo[3] ? $urlinfo[3] : 'index';
  26. $m = isset($_GET[$directory_trigger]) && $_GET[$directory_trigger]!='' ? $_GET[$directory_trigger] : $urlinfo['module'];
  27. $c =isset($_GET[$controller_trigger]) && $_GET[$controller_trigger]!='' $_GET[$controller_trigger] : $urlinfo ['controller'];
  28. $a = isset($_GET[$function_trigger]) && $_GET[$function_trigger] !=''? $_GET[$function_trigger] : $urlinfo['action'];
  29. //特殊common/header (public head/bottom を含む) を処理します
  30. $slasharr =explode('/', $_ci_view);
  31. if (count($slasharr) > 1) {
  32. $_ci_file = $m . lasharr['0 '].'/' .$slasharr['1'] . $_ci_ext;
  33. } else {
  34. //デフォルトのビュー名 (サフィックス名を除く)
  35. $view_name = $_ci_view == '' $ ? a : $_ci_view; // ビュー名が渡されない場合、デフォルトでアクション名が使用されます
  36. $_ci_file = $m . '/' . $this-> ;_ci_view_paths as $view_file => $cascade) {
  37. if (file_exists($view_file . $_ci_file)) {
  38. $_ci_path = $view_file . $_ci_file;
  39. $file_exists = TRUE;
  40. Break;
  41. }
  42. if ( !$cascade) {
  43. Break;
  44. }
  45. }
  46. }
  47. if (!$file_exists && !file_exists($_ci_path)) {
  48. show_error('要求されたファイルをロードできません: ' . $_ci_file) ;
  49. }
  50. // これにより、$this->load を使用してロードされたもの (ビュー、ファイルなど)
  51. // コントローラーおよびモデル関数内からアクセスできるようになります。
  52. $_ci_CI = & get_instance();
  53. foreach (get_object_vars ($_ci_CI) as $_ci_key => $_ci_var) {
  54. if (!isset($this->$_ci_key)) {
  55. $this->gt;$_ci_key = & $_ci_CI->$ _ci_key;
  56. }
  57. }
  58. /*
  59. * 変数の抽出とキャッシュ
  60. *
  61. * 専用の $this->load_vars()
  62. * 関数を使用するか、この関数の 2 番目のパラメーターを介して変数を設定できます。
  63. * 2 つのタイプをマージし、キャッシュすることで、その中に埋め込まれているビューが
  64. * 他のビューがこれらの変数にアクセスできるようになります。
  65. */
  66. if (is_array($_ci_vars)) {
  67. $this->_ci_cached_vars = array_merge ($this- >_ci_cached_vars, $_ci_vars);
  68. }
  69. extract($this->_ci_cached_vars);
  70. /*
  71. * 出力をバッファリングします
  72. *
  73. * 出力をバッファリングする理由は 2 つあります:
  74. * 1. 速度。速度が大幅に向上します
  75. * 2。これにより、最終的にレンダリングされたテンプレートを出力クラスで後処理できます
  76. *。 なぜ
  77. * 後処理が必要なのでしょうか? まず、
  78. * 経過したページ読み込み時間を表示するためです。
  79. * ブラウザに送信される直前にコンテンツをインターセプトできなければ、 * タイマーを停止することはできません。
  80. */
  81. ob_start();
  82. // PHP インストールが短いタグをサポートしていない場合well
  83. // 短いタグを変更して、少し文字列を置換します
  84. // 標準の PHP echo ステートメントに変更します
  85. if ((bool) @ini_get('short_open_tag') === FALSE AND config_item('rewrite_short_tags') == TRUE) {
  86. echo eval('?>' . preg_replace("/;*s*?>/", "; ?>", str_replace(' } else {
  87. include($_ci_path); // include() と include_once() では、同じ名前を持つ複数のビューが許可されます
  88. }
  89. log_message('debug', 'Fileloaded: ' . $_ci_path);
  90. // 要求された場合はファイル データを返します
  91. if ( $_ci_return === TRUE) {
  92. $buffer = ob_get_contents();
  93. @ob_end_clean();
  94. return $buffer;
  95. }
  96. /*
  97. * バッファをフラッシュします... それともフラッシャーをバフしますか?
  98. *
  99. *ビューを
  100. * 他のビュー内でネストできるようにするには、いつでもコンテンツをフラッシュして戻す必要があります
  101. * 出力バッファリングの最初のレベルを超えているため、
  102. * 最初にインクルードされたビューで適切に表示およびインクルードできるようになります
  103. * テンプレートとそれ以降のテンプレート。 Oy!
  104. *
  105. */
  106. if (ob_get_level() > $this->_ci_ob_level + 1) {
  107. ob_end_flush();
  108. } else {
  109. $_ci_CI->output->append_output(ob_get_contents()) ;
  110. @ob_end_clean();
  111. }
  112. }
复制代

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。