2012-04-13 9 views
3

現在のCodeIgniterに問題があります。私は/ビューから静的ファイルを読み込む "ページ"コントローラでCIをインストールしていますが、それは1つのサブフォルダだけになり、別のサブフォルダを追加しようとしています。CodeIgniter:フォルダとサブフォルダに基づくURL構造

かなりそれには、以下のん:

  1. URLセグメントが要求された場合(例えばsite.com/url)で/ファイルとしてビュー(例えば/views/url.php)で、それをロードしますURLセグメント(例:url)が実際に/ views内のフォルダであれば、そのフォルダからindex.phpをロードします(例:/views/url/index.php、URLはsite.com/urlです)。
  2. 上記は、index.phpだけでなく、他の名前のファイルにも適用されます。 site.com/url/buyがあれば、/ views/urlフォルダからbuy.phpファイルをロードします。私が達成しようとしている何

この構造に新しいサブフォルダを追加することです:

  1. 私はfaq.phpをロードするためにsite.com/url/buy/faqに行けばファイル/ビュー/ URL /購入し、その..に

現在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); 

} 
} 

は君たちが何か提案はありますか?

ありがとうございます!

+0

問題は何ですか? 404ページはいつも? – safarov

+0

はい、別のサブフォルダでは機能しません。 – Lee

答えて

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'; 
    } 
1

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

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

あなたはそれ以外のURLでメソッド名を追加する必要があり、コントローラのconstuct方法でコードを記述する必要があります。

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 ... 
} 
+0

コードをありがとう!私はそれを使用してほぼ動作させましたが、エラーが発生しました(要求されたファイルを読み込めません:views/url/buy/index.php)。そのパスは正しいので、ファイルを正しくロードすると思いますが、$ this-> load-> viewで止まってしまいます。この読み込みビューを書く方法に関する提案はありますか? – Lee

+0

@Max i thiknそれは私の間違いでした。 '$ path' varibaleの先頭から' views/'を削除してください。それの必要はありません。更新されたコード。 check – safarov

+0

既に試してみたところ、リクエストしたページが見つかりませんでした。 – Lee

0

私は

を買うというように../ /ビュー/ URLからfaq.phpファイルをロードするためにsite.com/url/buy/faqに行く場合: Pages.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; 
    } 
} 
+0

ありがとうございますが、それは手動ですべてのルートを追加することを意味し、いくつかのフォルダ/サブフォルダになります。 – Lee

関連する問題