3

現在の CodeIgniter には少し問題があります。/views から静的ファイルをロードする "Pages" コントローラーを使用して CI をインストールしていますが、最大 1 つのサブフォルダーしかないため、別のサブフォルダーを追加しようとしています。

ほとんどの場合、次のことを行います。

  1. 要求された URL セグメント (例: site.com/url) がファイルとして /views にある場合 (例: /views/url.php)、そこからロードされますが、URL セグメント (例: url) が実際にはフォルダ内にある場合/views そのフォルダーから index.php をロードします (例: URL はまだ site.com/url ですが、/views/url/index.php)。
  2. 上記は、index.php だけでなく、他の名前のファイルにも当てはまります。site.com/url/buy がある場合、/views/url フォルダーから buy.php ファイルが読み込まれます。

私が達成しようとしているのは、この構造に新しいサブフォルダーを追加することです:

  1. site.com/url/buy/faq にアクセスして /views/url/buy などから faq.php ファイルをロードすると..

現在の Pages.php コントローラーは次のとおりです。

class Pages extends CI_Controller {

public function view($page = 'index', $sub_page = 'index') {

    if ($page == 'index') {
        $path = $page . '.php';
    } else {
        $path = $page . '/' . $sub_page . '.php';
    }       

    if (!file_exists('application/views/pages/' . $path)) {
        if (!file_exists('application/views/pages/' . $page . '.php')) {
            show_404();
        } else {
            $path = $page . '.php';
        }
    }

    // $this->output->cache(60);
    // $this->output->enable_profiler(TRUE);

    $data['title'] = ucfirst($page);
    $data['url'] = lcfirst($page);

    $this->load->view('pages/modules/header', $data);
    $this->load->view('pages/'. $path, $data);
    $this->load->view('pages/modules/footer', $data);

}
}

何か提案はありますか?

前もって感謝します!

4

3 に答える 3

1

まず、ルーティングが正しいことを確認します。でconfig/routes.php

$route['default_controller'] = "pages";

コントローラーのコンストラクト メソッドにコードを記述する必要があります。そうしないと、url にメソッド名を追加する必要があります。でPages.php

class Pages extends CI_Controller {

     public function __construct() {
         parent::__construct();
         $this->view(); 
     }

     private function view() {

        $url_string = $this->uri->uri_string(); //get all parameters form url

        if(!file_exist(APPPATH . 'views/pages'. $url_string. '/index.php') {
             if (!file_exists(APPPATH . 'views/pages/' . $url_string . '.php')) {
                  show_404();
             } else {
                  $path = 'pages/' . $url_string . '.php';
             }
        }
        else {
           $path = 'pages/' . $url_string . '/index.php';   
       }
     }

    //here codes continue ...
}
于 2012-04-13T07:55:14.370 に答える
0

URIクラスを使用して、セグメントをディレクトリに変換します。おおよそ次のようなもの:

  $i = $this->uri->total_segments();
  $path = APPPATH."views/pages";
  for($j=2;$j<$i;$j++){
     $path = $path . "/" . $this->uri->segment($j);
  }
  if (!file_exists($path . "/index.php")) {
        if (!file_exists($path . ".php")) {
            show_404();
        } else {
            $path = $path . '.php';
        }
    }else{
            $path = $path . '/index.php';
    }
于 2012-04-13T07:46:09.863 に答える
0

site.com/url/buy/faq にアクセスして /views/url/buy などから faq.php ファイルをロードすると..

あなたのコードを調べる時間はありませんでしたが、試してみることができます。使用ルート:

config/routes.php

$route['url/buy/(:any)'] = 'pages/view/$1';

コントローラー/pages.php

class Pages extends CI_Controller {

function __construct() {

    parent::__construct();
}

function view($page) {

    if(!file_exist(APPPATH . "views/pages/{$page}.php") {

        $this->load->view("pages/{$page}");
    }
    else {
        show_404;
    }
}
于 2012-04-13T09:28:11.150 に答える