多个页面由1个控制器控制,视图位于多个位置 - CodeIgniter

时间:2014-01-09 09:28:03

标签: php codeigniter

不是100%确定这是可能的,但是同事要求让他的生活更轻松。

我们有一个我们的新闻简报的存档,这些新闻传真发送出去,并且该网站位于CodeIgniter框架中,其中包含一些用于不同新闻简报的控制器。控制器设置如下:

<?php

class Software1 extends CI_Controller {

    public function index($software1 = 'home') {

        if (!file_exists('../application/views/software1/' . $software1)) {
            // Whoops, we don't have a page for that!
            show_404();
        }
        $this->lang->load('common/menu.php');
        $this->lang->load('common/links.php');
        $this->lang->load('common/footer.php');

        $data['title'] = basename($software1, ".html");

        $this->load->view('templates/common/header', $data);
        $this->load->view('software1/' . $software1, $data);
        $this->load->view('templates/common/footer', $data);
    }
}

所以这意味着当前视图是从software1文件夹中提取的。电子邮件视图标记为December 2013.html,January 2014.html等。这样工作正常,但我的同事问他是否可以将所有2013年电子邮件分别放入2013文件夹和2014年2014年文件夹中所以这让他的生活更容易理清。

是否可以让控制器在多个文件夹中查看视图,或者是否有任何其他方式可以实现此目的,以便所有2013年将在software1 / 2013 / Month 2013.html中,并且2014年将在software1 / 2014 / Month 2014.html

是的我知道我可以每年创建单独的控制器,但我正在努力避免这种情况,如果有一个很好的方法来使用它,那么if和else然后那将是很好的。如果不可能,那就没关系,我会告诉他上传到一个文件夹然后保留它,但欢迎任何建议。

由于

EDIT //

当前文件夹结构:

application/
---controllers/
------archive.php
------software1.php
---views/
------Software1/
---------Archive.html
---------January 2013.html
---------Febuary 2013.html
---------March 2013.html
---------April 2013.html
---------May 2013.html
---------June 2013.html
---------July 2013.html
---------August 2013.html
---------September 2013.html
---------October 2013.html
---------November 2013.html
---------December 2013.html
---------January 2014.html

并且显然必须考虑未来几年,即2015,16,17等。

我需要能够在路径文件中轻松定义当前的外观网址:

$route['(:any)/(:any)/(:any)/(:any)'] = 'Software1/$1/$2/$3/$4';
$route['(:any)/(:any)/(:any)'] = 'Software1/$1/$2/$3';
$route['(:any)/(:any)'] = 'Software1/$1/$2';
$route['(:any)'] = 'Software1/$1';
$route['default_controller'] = 'Software1/index/home.html';
$route['Archive'] = "ArchiveSoftware1/index/Archive.html";
$route['2013/January'] = "Software1/index/January 2013.html";
$route['2013/March'] = "Software1/index/March 2013.html";
$route['2013/May'] = "Software1/index/May 2013.html";
$route['2013/July'] = "Software1/index/July 2013.html";
$route['2013/September'] = "Software1/index/September 2013.html";
$route['2013/November'] = "Software1/index/November 2013.html";
$route['2014/January'] = "Software1/index/January 2014.html";

看来我的问题就像泥泞一样清楚,希望这会有所帮助:

所以我想要文件夹结构:

application/
---controllers/
------archive.php
------software1.php
---views/
------Software1/
---------Archive.html
------------2013/
---------------January 2013.html
---------------Febuary 2013.html
---------------March 2013.html
---------------April 2013.html
---------------May 2013.html
---------------June 2013.html
---------------July 2013.html
---------------August 2013.html
---------------September 2013.html
---------------October 2013.html
---------------November 2013.html
---------------December 2013.html
------------2014/
---------------January 2014.html

这些视图中的每一个都是在线个人网页,他们唯一常见的事情就是共享页眉和页脚文件。我想要做的是有一个控制器,如果转到url.net/2014/January将在1月的2014.html视图文件中显示信息(正如我已经说过,如果子文件夹2013和2014是不存在即软件1文件夹中的所有内容,如果我使用多个控制器,我可以使用此工作,即2013年1和2014年1等。但是我试图拥有它所以我可以在1个控制器中执行此操作,因此它将查看任何子文件夹,以找到路径文件定义的正确文件。

正如我所说,我不知道这是否真的能够做到,但希望有人能够理解我想要实现的目标并给我一些方法来做到这一点:)

1 个答案:

答案 0 :(得分:0)

在我的视图页面中,一个文件夹是模块。 那包含不同的文件夹。 其中一个是fault.And再次包含预订,添加,删除文件夹。 每个都包含不同的php文件。

我们可以写:

$this->load->view('modules/fault/booking/booking');
$this->load->view('modules/fault/booking/schedule');
$this->load->view('modules/fault/booking/delete');

$this->load->view('modules/fault/add/file');
$this->load->view('modules/fault/add/add');
$this->load->view('modules/fault/add/edit');
$this->load->view('modules/fault/add/delete');

等...