方法一、在每个view文件的开头和结尾分别加上下面两句:
[php]
<?php $this->load->view(‘header’)?>…<?php $this->load->view(‘footer’)?>[/php]这也是最简单和容易理解的方法。方法二、写一个模板类template.php,在里面实现这种逻辑,再提供一个showView()方法。头尾有各自的模型。
以下供参加:[php]<?php if (!defined(‘BASEPATH’))exit(‘No direct script access allowed’);class Template
{ private $mCI;private $mHeaderView=’header.php’;//头部文件
private $mFooterView=’footer.php’;//尾部文件private $mTemplateView=’template.php’;//模板框架public function __construct()
{ $this->mCI = &get_instance();}public function showView($rContent_data)
{ //$rContent_data 在控制器中实现内容逻辑与视图$data=array($header_data=$this->getHeader(),$footer_data=$this->getFooter(),$content_data=$rContent_data);$this->mCI->load->view($this->mTemplateView,$data);}
private function getHeader(){ $h=new HeaderModel();//实现头部逻辑,$data=$h->getData();return $this->mCI->load->view($this->mHeaderView,$data,true);}private function getFooter(){ $f=new FooterModel();//实现尾部逻辑,$data=$f->getData();return $this->mCI->load->view($this->mFooterView,$data,true);}}?>
[/php]这种方式比较适用于头尾变化比较多的情况.方式三:考虑到ajax请求的情况,使用hook,步骤如下:
1.在config.php开启hook[php]$config['enable_hooks'] = TRUE;[/php]2.hooks.php添加代码[php]$hook['display_override'] = array(‘class’ => ‘MyDecorate’,‘function’ => ‘init’,‘filename’ => ‘MyDecorate.php’,‘filepath’ => ‘hooks’//’params’ => array(‘beer’));[/php]
3、hooks目录新增文件MyDecorate.php[php]<?php if ( ! defined(‘BASEPATH’)) exit(‘No direct script access allowed’);/**
* @author Zelipe** 2012-05-26*/class MyDecorate { private $CI;public function __construct() {
$this->CI =& get_instance();}public function init() {
$html = ”;// header html, ‘isAjax’ from helper
if(!isAjax())$html .= $this->CI->load->view(‘header’, null, true);// body html
$html .= $this->CI->output->get_output();// footer html
if(!isAjax())$html .= $this->CI->load->view(‘footer’, null, true);$html = str_replace(‘ ‘, ”, $html); // 过滤代码缩进
$this->CI->output->_display($html);}}[/php]其中 isAjax() 为 helpers,可直接将此方法定义在MyDecorate.php内(可不作判断,如希望控制ajax不引入公用文件则保留)[php]// 是否为 ajax 请求function isAjax() { return (isset($_SERVER['HTTP_X_REQUESTED_WITH'])&& strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === ‘xmlhttprequest’);}[/php]4、views 目录新增header.php, footer.php。四、采用layout的方式,即在一个主view里嵌入头尾;
在core目录下创建一个自定义的controller,代码如下:[php]class Frontend_Controller extends CI_Controller{ public function __construct(){ parent::__construct();}
/**
* 加载视图** @access protected* @param string* @param array* @return void*/protected function _template($template, $data = array()){ $data['tpl'] = $template;$this->load->view(‘layout’, $data);}}[/php]创建一个主View, 命名为layout.php,[php]<!–header…–><div class="content"><?php $this->load->view(isset($tpl) && $tpl ? $tpl : ‘default’); ?></div><!– end content –><!–footer…–>[/php]