具有视图自定义功能的CodeIgniter + App + App更新

时间:2012-03-27 19:35:27

标签: git codeigniter

我有一个使用HMVC和codeigniter的应用程序。整个应用程序都在一个名为MapIt-USA的git repo中。我刚刚遇到一个场景,我将这个应用程序部署到客户端xyz,他们希望我自定义前端视图布局。然而,我进行了修改,当我制作后端控制器,库,模型补丁/更新时,我将这些更新推送到源并从服务器上的原点下拉,我需要一种方法来避免覆盖视图中的这些更改。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

重载视图(或任何文件)的基本思路:

  • 将自定义视图存储在主应用程序更新不会覆盖它们的位置。给这些名称与默认名称相同。
  • 修改模板加载程序以首先检查自定义文件,如果它不存在则使用默认文件。如果您没有加载模板的自定义解决方案,现在是时候编写一个或扩展CI Loader类以适应此更改。

可能有一段时间你需要重载或扩展不仅仅是视图:可能是配置文件,助手,语言文件,甚至是控制器。所以,你可能想要从长远来看开始考虑如何处理这个问题。您可以模仿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"
}

你是如何做到这一点取决于你,但那是基本的想法。