开发者

Error when trying to load view in my_controller

Consider my code:

<?php

class MY_Controller extends Controller {

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

    function _displayPage($page, $data = array()) {
        $this->load->view('structure/header', $data);
        $this->load->view($page, $data);
        $this->load->view('structure/footer', $data);
    }
}
?>

page.php

<?php
    class Page extends MY_Controller {
        function __construct() {
            parent开发者_如何学运维::__construct();  
        }   

        function index() {
            $data['content'] = array('title'=>'hello world');
            $this->_displayPage('home', $data); 
        }
    }
?>

Upon loading my page on my browser, I get this error:

A PHP Error was encountered
Severity: Notice
Message: Undefined property: Page::$view
Filename: libraries/MY_Controller.php
Line Number: 11

Does anyone know what I'm doing wrong? Thanks


In your library My_Controller you should be using the parent keyword instead of $this.

your code should look like so:

class MY_Controller extends Controller
{
    public function __construct()
    {
        parent::Controller();
    }

    function _displayPage($page, $data = array())
    {
        parent::load->view('structure/header', $data);
        parent::load->view($page, $data);
        parent::load->view('structure/footer', $data);
    }
}


If I understand what you're trying to accomplish correctly, you're wanting to setup a template that includes your header view and footer view, but without calling header and footer views for each controller you use throughout your application. Here's what I've done to accomplish this.

First, create a new folder under your views, for this example we'll call it 'includes'. Inside the newly created includes folder, create three files, header.php, footer.php and template.php. Setup your header and footer appropriately and then edit your template.php to look as follows:

<?php echo $this->load->view('includes/univ_header'); ?>

<?php echo $this->load->view($main_content); ?>

<?php echo $this->load->view('includes/univ_footer'); ?>

Now, from your controller you can define what view you would like to set as your 'main_content'. For example, if you have home.php in your views folder and you want to wrap it with your header and footer you would do so in your controller as follows:

function index() {
        $data['content'] = array('title'=>'hello world');
        $data['main_content'] = 'home';
        $this->load->view('includes/template', $data);
    }

Hope this helps!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜