Mic*_*Bui 7 frontend themes codeigniter backend hmvc
首先,对于这篇文章造成的任何便利感到抱歉,因为这是我第一次在这里发帖,我需要更多的时间来适应这个.
Q1.我想为FrontEnd和BackEnd创建2个"主控制器",如下所示:
使用HMVC(MX)的最佳方法是什么?
感谢@Wesley Murch提出将3个类MY_Controller,Frontend,Backend放入MY_Controller.php的想法,但我认为将每个类放在一个php文件中更好(更干净).还是我错了?我在考虑创建一个这样的结构:
class Blog extends Frontend)class Admin extends Backend)如果不在后端/前端控制器中添加一行代码到include_once或require_once:./ libraries/Backend.php或./libraries/Backend.php,这是否可行?
Q2.如何使用HMVC实现多个主题?例如,在MVC中,我们可以有2个主题,如下所示:
但是在HMVC中,视图文件夹位于单独的文件夹中,如果我想实现多个主题,通常我必须这样做:
这不是我想要的,因为我想把主题的所有视图文件放到一个文件夹中,之后,如果我想创建一个新主题,我将只需要复制一个主题文件夹.但我想知道如何在不破坏HMVC模型的情况下做到这一点(因为据我所知,在HMVC模型中,模型,视图,控制器必须位于一个模块文件夹中 - 至少使用CI).这就是我遇到的冲突.
只需打开或创建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 */
Run Code Online (Sandbox Code Playgroud)
就"多个主题"而言,不确定你需要什么.样式表?HTML模板?您需要让用户切换它们还是手动执行?您是否需要检测移动设备并相应地更改主题?上述所有的?"最佳"方式取决于您的实施.
我正在考虑从MY_Controller.php创建2个库并自动加载它们.那会有用吗?
不确定为什么你需要或想要...只是不要这样做.您应该只使用其他控制器扩展这些类.
关于主题,我希望有多个主题的视图,如: - /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/
}
}
Run Code Online (Sandbox Code Playgroud)
从您的控制器:
$this->load->view('themes/'.$this->theme.'/my_view_file');
Run Code Online (Sandbox Code Playgroud)
使用HMVC,将始终在当前模块中查找该文件,如果不存在则返回到默认应用程序目录.如果出于某种原因需要明确,可以说在路径前加上模块名称(比如在模块之间交叉加载资源).例:
// From "blog" module
$this->load->view('events/index');
// We just loaded `modules/events/views/index` from the blog module
Run Code Online (Sandbox Code Playgroud)
无论如何,这不是一个完整的解决方案,但希望它能让你开始有了一个想法.有数百万种方法可以做到这一点,这里有两个已经支持主题的模板库: