3

我对当前的 CodeIgniter 有点问题。我有一个带有“页面”控制器的 CI 安装,该控制器从 /views 加载静态文件,但它最多只能到达 1 个子文件夹,我希望向其中添加另一个子文件夹。

它几乎做了以下事情:

  1. 如果请求的 URL 段(例如 site.com/url)作为文件位于 /views 中(例如 /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. 如果我去 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 文件等等..

我没有时间检查您的代码,但您可以尝试以下方法。使用路线:

配置/路由.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 回答