如何在CodeIgniter中加载页眉,侧边栏,页脚等页面视图


How to load page views like header, sidebar, footer in CodeIgniter?

我试图在CodeIgniter中创建我的第二个web应用程序。

在我以前的项目中,我创建了页眉,页脚和侧边栏的视图。

在每个页面控制器中,我必须像这样加载这些视图:

class Home extends CI_Controller {
    public function index()
    {
        $this->load->view('header');
        $this->load->view('sidebar');
        $this->load->view('home'); // home
        $this->load->view('footer');
    }
    public function about()
    {
        $this->load->view('header');
        $this->load->view('sidebar');
        $this->load->view('about'); // about
        $this->load->view('footer');
    }
    public function contact()
    {
        $this->load->view('header');
        $this->load->view('sidebar');
        $this->load->view('contact'); // contact
        $this->load->view('footer');
    }
}
我不喜欢这样,我觉得我做错了。

有什么建议吗?

提前,你可以通过这种方式来构建你的视图:

首先在视图文件夹中创建一个模板

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
    <meta content="MajidGolshadi" name="author">
    <?php echo $html_head; ?>
    <title></title>
</head>
<body>
    <div id="content">
            <?php echo $content; ?>
    </div>
    <div id="footer">
        <?php echo $html_footer; ?>
    </div>
</body>
</html>

第二创建一个库来自动加载视图

<?php
if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Template
{
    private $data;
    private $js_file;
    private $css_file;
    private $CI;
    public function __construct()
    {
        $this->CI =& get_instance();
        $this->CI->load->helper('url');
        // default CSS and JS that they must be load in any pages
        $this->addJS( base_url('assets/js/jquery-1.7.1.min.js') );
        $this->addCSS( base_url('assets/css/semantic.min.css') );
    }
    public function show( $folder, $page, $data=null, $menu=true )
    {
        if ( ! file_exists('application/views/'.$folder.'/'.$page.'.php' ) )
        {
            show_404();
        }
        else
        {
            $this->data['page_var'] = $data;
            $this->load_JS_and_css();
            $this->init_menu();
            if ($menu)
                $this->data['content'] = $this->CI->load->view('template/menu.php', $this->data, true);
            else
                $this->data['content'] = '';
            $this->data['content'] .= $this->CI->load->view($folder.'/'.$page.'.php', $this->data, true);
            $this->CI->load->view('template.php', $this->data);
        }
    }
    public function addJS( $name )
    {
        $js = new stdClass();
        $js->file = $name;
        $this->js_file[] = $js;
    }
    public function addCSS( $name )
    {
        $css = new stdClass();
        $css->file = $name;
        $this->css_file[] = $css;
    }
    private function load_JS_and_css()
    {
        $this->data['html_head'] = '';
        if ( $this->css_file )
        {
            foreach( $this->css_file as $css )
            {
                $this->data['html_head'] .= "<link rel='stylesheet' type='text/css' href=".$css->file.">". "'n";
            }
        }
        if ( $this->js_file )
        {
            foreach( $this->js_file as $js )
            {
                $this->data['html_head'] .= "<script type='text/javascript' src=".$js->file."></script>". "'n";
            }
        }
    }
    private function init_menu()
    {        
      // your code to init menus
      // it's a sample code you can init some other part of your page
    }
}

3 在每个控制器构造函数中加载库,然后使用该库自动加载视图

在你的视图中加载额外的js,你可以这样使用addJS方法:

$this->template->addJS("your_js_address");
Css:

$this->template->addCSS("your_css_address");

和显示您的页面内容调用您的视图文件与show方法

$this->template->show("your_view_folder", "view_file_name", $data);

我希望这些代码对你有帮助

create template.php in view把代码放到

 <?php  
    $this->load->view('header');
    $this->load->view($middle);
    $this->load->view('footer');    
?>

在控制器中使用此代码

public function index()
    {
        $data['middle'] = 'home';
    $this->load->view('template',$data);
    }

您可以在使用的主模板文件中加载页眉、侧边栏和页脚。

// contact.html
<?php $this->load->view('header');?>
<p>Yak yak yak</p>
<?php $this->load->view('footer');?> 

或者使用像这样的模板库

您可以像这样创建一个库(或帮助器):

<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class View_lib{
   function __construct(){
    $this->CI =& get_instance();
   }

   function load_view($current_page){
       $parts = array('header', 'sidebar', $current_page, 'footer');
       foreach($parts as $part){
       $this->CI->load->view($part);
    }
   }    
}

控制器:

public function index(){
    $this->load->library('view_lib'); // probably better autoload this
    $this->view_lib->load_view('about');
}

有点简陋,但是你明白了…

最好的方法是在构造函数中添加这些文件

function __construct() { 
     parent::__construct(); 
        $this->load->helper('url'); 
        $this->load->database();
        $this->load->view('prots/header');
        $this->load->view('prots/top');
        $this->load->view('prots/navigation');
  } 
Place all of them in a file like 
main.php
And load it on top of view rather than always sending from controller.
main.php contain 
<php 
$this->load->view('header');
$this->load->view('sidebar');
$this->load->view('home');
$this->load->view('footer');
?>
and in view just place
<php 
$this->load->view('main');
?>
at top of file