从 Codeigniter 的根加载视图
Loading view from root of Codeigniter
这个问题与这个问题相关
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);
}
}
在controller里面我是这样用的
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
我修改了我所有的控制器和视图,使其非常简单,有人可以理解。
据我在您的代码中看到的,您在调用 MY_Loader::base_view() 时没有将任何变量传递给它
在你的view_layout.php中你需要传递你需要的变量
例如:
<?php $this->load->base_view($body_render, ['lang'=> $lang]); ?>
这个问题与这个问题相关 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);
}
}
在controller里面我是这样用的
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
我修改了我所有的控制器和视图,使其非常简单,有人可以理解。
据我在您的代码中看到的,您在调用 MY_Loader::base_view() 时没有将任何变量传递给它
在你的view_layout.php中你需要传递你需要的变量
例如:
<?php $this->load->base_view($body_render, ['lang'=> $lang]); ?>