CodeIgniter/PHP - Calling a view from within a view

隐身守侯 提交于 2020-01-01 06:12:14

问题


Basically for my webapp I'm trying to organise it a bit better. As it at the moment, every time I want to load a page, I have to do it from my controller like so:

        $this->load->view('subviews/template/headerview');
    $this->load->view('subviews/template/menuview');
    $this->load->view('The-View-I-Want-To-Load');
    $this->load->view('subviews/template/sidebar');
    $this->load->view('subviews/template/footerview'); 

As you can tell it's not really very efficient.

So I thought I'd create one 'master' view - It's called template.php. This is the contents of the template view:

<?php
    $view = $data['view'];

        $this->load->view('subviews/template/headerview');
        $this->load->view('subviews/template/menuview');
        $this->load->view($view);
        $this->load->view('subviews/template/sidebar');
        $this->load->view('subviews/template/footerview');
?>

And then I thought I'd be able to call it from a controller like this:

    $data['view'] = 'homecontent';
    $this->load->view('template',$data);

Unfortunately I simply cannot make this work. Does anyone have any ways around this or fixes I can put into place? I've tried putting ""s and ''s around $view in template.php but that makes no difference. The usual error is "Undefined variable: data" or "Cannot load view: $view.php" etc.

Thanks folks!

Jack


回答1:


I believe where you have:

$view = $data['view'];

$this->load->view('subviews/template/headerview');
$this->load->view('subviews/template/menuview');
$this->load->view($view);
$this->load->view('subviews/template/sidebar');
$this->load->view('subviews/template/footerview');

You need to just get rid of the line:

$view = $data['view'];

This is because when the array is passed from the controller, the variable on the view can be accessed simply by $view rather than $data['view'].




回答2:


Quite a few suggestions here http://codeigniter.com/forums/viewthread/88335/

I chose this method: Controller class:

public function __construct() 
{
    parent::__construct();

    $this->load->vars(array(
        'header' => 'partials/header',
        'footer' => 'partials/footer',
    ));
}

public function index()
{       
    $data['page_title'] = 'Page specific title';        
    $this->load->view('my-view', $data);
}

View:

<?php $this->load->view($header, compact('page_title')); ?>
... blah blah ...
<?php $this->load->view($footer); ?>

Having to load the view in the view and pass through any variables that might be used by your child view is far from ideal. Being able to use something like Action Filters in Laravel would probably be better.



来源:https://stackoverflow.com/questions/2617742/codeigniter-php-calling-a-view-from-within-a-view

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!