从Codeigniter的根目录加载视图

时间:2015-06-01 11:33:55

标签: php codeigniter partial

这个问题与这个问题有关 Loading view outside view folder with CodeIgniter

但问题是它已经很老了,没有人再看了它:(

这是我的问题,我已经基于@ SpYk3HH这样的答案创建了函数

MY_Loader.php

<?php
    class MY_Loader extends CI_Loader {
        public function base_view($view, $vars = array(), $get = FALSE) {
            //  ensures leading /
            if ($view[0] != '/') $view = '/' . $view;
            //  ensures extension   
            $view .= ((strpos($view, ".", strlen($view)-5) === FALSE) ? '.php' : '');
            //  replaces \'s with /'s
            $view = str_replace('\\', '/', $view);

            if (!is_file($view)) if (is_file($_SERVER['DOCUMENT_ROOT'].$view)) $view = ($_SERVER['DOCUMENT_ROOT'].$view);

            if (is_file($view)) {
                if (!empty($vars)) extract($vars);
                ob_start();
                include($view);
                $return = ob_get_clean();
                if (!$get) echo($return);
                return $return;
            }

            return show_404($view);
        }
    }

在控制器中我像这样使用它

的welcome.php

class Welcome extends CI_Controller {

    function __construct()
    {
        parent::__construct();  
        // Load globals
    }

    /**
     * Index Page for this controller
     */
    public function index()
    {
        $data['lang'] = '1';
        $data['body_render']='mypages/home.php';
        $this->load->view("/layouts/view_layout", $data);
    }

view_layout.php

    <?php $this->load->base_view($body_render); ?>    

home.php

<?php echo $lang; ?>

但是我得到了错误,就像我无法将$ lang传递给部分内部部分?

消息:未定义的变量:lang

我将所有控制器和视图修改为非常简单,有人可以理解。

1 个答案:

答案 0 :(得分:2)

就我在你的代码中看到的那样,当你调用它时,你没有将任何变量传递给MY_Loader :: base_view()

你的view_layout.php中的

需要传递你需要的变量

例如:

<?php $this->load->base_view($body_render, ['lang'=> $lang]); ?>