只需打开或创建core/MY_Controller.php
, 创建一个MY_Controller
类并让它扩展MX_Controller
,然后在同一个文件中创建其他基本控制器并让它们扩展MY_Controller
。您可以复制/粘贴以下示例来开始使用:
<?php defined('BASEPATH') OR exit('No direct script access.');
class MY_Controller extends MX_Controller {
public function __construct()
{
// do some stuff here that affects all controllers
}
}
class Frontend_Controller extends MY_Controller {
public function __construct()
{
parent::__construct();
}
}
class Backend_Controller extends MY_Controller {
public function __construct()
{
parent::__construct();
// Check admin login, etc.
}
}
/* end file application/core/MY_Controller.php */
至于“多个主题”,不确定您需要什么。样式表? HTML 模板?您需要让用户切换它们还是手动进行?您是否需要检测移动设备并相应地更改主题?上述所有的? “最好”的方法将取决于您的实施。
我正在考虑创建 2 个从 MY_Controller.php 扩展的库
并自动加载它们。那行得通吗?
不知道为什么你需要或想要......只是不要这样做。您应该只使用其他控制器来扩展这些类。
关于主题,我想要
视图的多个主题,例如: - /views/theme1/view_files.php -
/views/theme2/view_files.php 关于js/css/images,我可以安排
我。一开始我会确定主题,但稍后我可能会允许
用户来选择。使用 MVC,我可以将主题放在 /views/ 的子文件夹中,如下所示
上面但是对于 HMVC,我必须找到另一种方法来将它们排列到
主题,因为视图文件夹是分开的(我想要的所有视图文件
相同的主题将仅位于 1 个文件夹中)..
由于这个问题太宽泛,无法在这里解决,而且您似乎还没有尝试过任何东西,所以我会给您一个最低限度例子:
class MY_Controller extends MX_Controller {
public function __construct()
{
// do some stuff here that affects all controllers
$this->theme = 'theme1'; // matches your directory name in /views/themes/
}
}
从您的控制器:
$this->load->view('themes/'.$this->theme.'/my_view_file');
使用 HMVC,将始终在当前模块中查找该文件,如果不存在则回退到默认应用程序目录。如果出于某种原因您需要明确,您可以说在路径前面添加模块名称(例如模块之间的交叉加载资源)。例子:
// From "blog" module
$this->load->view('events/index');
// We just loaded `modules/events/views/index` from the blog module
无论如何,这不是一个完整的解决方案,但希望它能让您开始有了一个想法。有数百万种方法可以做到这一点,这里有两个已经支持主题的模板库:
- http://codeigniter.com/wiki/Phil_Sturgeon%27s_Template_Library/ http://codeigniter.com/wiki/Phil_Sturgeon%27s_Template_Library/
- http://williamsconcepts.com/ci/codeigniter/libraries/template/ http://williamsconcepts.com/ci/codeigniter/libraries/template/