更改Codeigniter中的视图行为

时间:2013-06-06 09:21:21

标签: php codeigniter

我正在将codeigniter用于各种公司使用的项目。

我们软件的默认版本已启动并正常运行,但是我们的一些客户希望系统实例的视图文件略有不同。

理想情况下,我想要做的是设置一个变量(例如VIEW_SUFFIX),每当加载一个视图文件时,它会首先检查是否有可用的后缀版本(如果有的话)。

例如,如果系统有一个名为“my_view.php”的标准视图文件,但是一个客户端的VIEW_SUFFIX为“client_1” - 每当我调用$ this-> load-> view('my_view')时,如果VIEW_SUFFIX已设置,它将首先检查my_view_client_1是否存在(如果它确实使用了),或者如果不使用默认的my_view.php。

我希望我的问题足够明确......如果有人之前已经做过这件事,或者想办法做到这一点,我会非常感激。

编辑: 理想情况下,我想要一个解决方案,无需我改变我调用视图文件的每个地方。首先是因为有一些文件可能需要不同的客户端版本,也因为视图文件是从很多控制器调用的

2 个答案:

答案 0 :(得分:1)

我有一个类似的要求,我创建了一个辅助函数。除此之外,此函数可以在加载指定的视图文件之前检查后缀。此函数可以检查后缀并在加载前检查文件是否存在。

不幸的是,文件检查逻辑会有点脆弱。作为替代方案,您可以实现一个覆盖基本MY_Loader类的CI_Loader类。

application/core/MY_Loader.php中的类似内容:

class MY_Loader extends CI_Loader {
    protected function _ci_load($_ci_data)
    {
        // Copy paste code from CI with your modifications to check prefix.
    }
}

答案 1 :(得分:0)

你能不能这样做

// some method of creating $client
// probably created at login
$_SESSION['client'] = 'client_1';

$client = (isset($_SESSION['client'])) ? $_SESSION['client'] : '';
$this->load->view("your_view{$client}", $data);