【问题标题】:Multiple Pages controlled by 1 controller with the views in multiple locations - CodeIgniter由 1 个控制器控制的多个页面,视图位于多个位置 - CodeIgniter
【发布时间】:2014-01-09 09:28:02
【问题描述】:

不是 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 文件夹中提取的。电子邮件视图标记为 2013 年 12 月.html、2014 年 1 月.html 等。这很好用,但我的同事问他是否可以将所有 2013 年的电子邮件分别放在 2013 年的文件夹中,将 2014 年的邮件放在 2014 年的文件夹中这样他的生活就更容易理清了。

是否可以让控制器在多个文件夹中查看视图,或者是否有任何其他方法可以实现这一点,以便所有 2013 年都在 software1/2013/Month 2013.html 中,而 2014 年将在软件1/2014/月 2014.html

是的,我知道我可以每年创建单独的控制器,但我试图避免这种情况,如果有一个很好的方法可以使用 so if 和 else 来做到这一点,那就太好了。如果不可能,那没关系,我会告诉他上传到一个文件夹并保持原样,但欢迎提出任何建议。

谢谢

编辑//

当前文件夹结构:

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 等。

我需要能够轻松地定义路由文件中的 url,目前的 outes 看起来像:

$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

这些视图中的每一个都是一个单独的在线网页,它们唯一的共同点是它们共享页眉和页脚文件。我正在尝试做的事情有 1 个控制器,如果转到 url.net/2014/January 将在 January 2014.html 视图文件中显示信息(正如我所说,如果子文件夹 2013 和 2014 是不存在,即software1文件夹中的所有内容,如果我使用多个控制器,即2013年的1个和2014年的1个等,我可以让它工作。但是我正在尝试拥有它,以便我可以在1个控制器中执行此操作,因此它会查看任何子文件夹,以找到正确的文件以按照路由文件的定义显示。

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

【问题讨论】:

  • 是的,你可以 例如:$this->load->view('modules/maint/booking/booking');
  • 是的,但这只是从 1 个文件夹加载,我需要它来查看多个文件夹,因为所有 2013 年都在一个文件夹中,而所有 2014 年都在另一个类似 software1/' 的文件夹中。 $year, $software1, $data 但可能需要写一些东西来帮助选择 $year 这是我不确定或是否可能做的事情。需要指出的是url如下:software1.websiteurl.net/Year/Month
  • 您要使用代码创建视图文件夹吗?
  • 该站点已启动并正在运行我不需要使用代码创建文件夹。纯 html 格式的电子邮件文件(因为处理它们的人不知道任何与 Web 相关的代码,他只是将文本添加到我为他创建的模板中)被上传到他想要放入的 software1 文件夹中根据年份放入software1文件夹内的多个文件夹,即他为所有2014年时事通讯上传到software1/2014。我想也许可以使用它,所以它使用最后 4 位数字(即年份),不包括视图文件名中的文件扩展名,不确定这是否可能
  • 是的,您可以。在 software1 文件夹中,您可以创建任意数量的文件夹,例如 2013、2014 等。您想在这些文件夹中插入什么内容?

标签: php codeigniter


【解决方案1】:

在我的视图页面中,一个文件夹是模块。 包含不同的文件夹。 其中之一是错误。这又包含预订、添加、删除的文件夹。 而且每一个都包含不同的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');

等等……

【讨论】:

  • 好吧,不是 100% 确定你的意思,你能告诉我我需要添加的代码以使这一切成为可能吗?我应该指出,这个网站上没有涉及数据库(会让我的生活如此如果有的话会容易得多,但那是另一回事:))
  • 但这只是将多个视图加载到一个页面中。每个时事通讯都需要自己的页面
  • 刚刚发现原来的问题有点不清楚已经改变了
猜你喜欢
  • 2012-12-16
  • 2015-02-19
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
相关资源
最近更新 更多