我有一个使用HMVC和codeigniter的应用程序。整个应用程序都在一个名为MapIt-USA的git repo中。我刚刚遇到一个场景,我将这个应用程序部署到客户端xyz,他们希望我自定义前端视图布局。然而,我进行了修改,当我制作后端控制器,库,模型补丁/更新时,我将这些更新推送到源并从服务器上的原点下拉,我需要一种方法来避免覆盖视图中的这些更改。
有什么想法吗?
答案 0 :(得分:1)
重载视图(或任何文件)的基本思路:
可能有一段时间你需要重载或扩展不仅仅是视图:可能是配置文件,助手,语言文件,甚至是控制器。所以,你可能想要从长远来看开始考虑如何处理这个问题。您可以模仿CI的工作方式,首先查看system/
文件,同时允许application/
文件扩展或过载。当然,定制将承担保持兼容的负担。
视图的简短示例:
class MY_Template_Loader {
// We'll assume this is in your application/ dir
private $custom_path = 'custom_views/';
function load($file = NULL)
{
// This is the default view
$view = $file;
// Is there a file with the same name in the custom dir?
// If so, use that instead of the default
if (is_file(APPPATH.$this->custom_path.$file.'.php'))
{
// This is a little bit of a trick
// Use a relative path from CI's default view dir
$view = '../'.$this->custom_path.$file;
}
get_instance()->load->view($view);
}
}
控制器方法中的用法:
function my_method()
{
$this->my_template_loader->load('my_method/index');
// If "APPPATH/custom_views/my_method/index.php" exists it will be loaded
// Otherwise it will try to load "views/my_method/index.php"
}
你是如何做到这一点取决于你,但那是基本的想法。