CI学习 - header和footer

见网上提到有很多种方法,没有具体测试哪个效率高。
方法一、在每个view文件的开头和结尾分别加上下面两句:

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

 


这也是最简单和容易理解的方法。

方法二、写一个模板类template.php,在里面实现这种逻辑,再提供一个showView()方法。头尾有各自的模型。
以下供参加:

<?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);
}
}

?>

 


这种方式比较适用于头尾变化比较多的情况.

方式三:考虑到ajax请求的情况,使用hook,步骤如下:
1.在config.php开启hook

$config['enable_hooks'] = TRUE;

 


2.hooks.php添加代码

$hook['display_override'] = array(
'class' => 'MyDecorate',
'function' => 'init',
'filename' => 'MyDecorate.php',
'filepath' => 'hooks'
//'params' => array('beer')
);

 


3、hooks目录新增文件MyDecorate.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);
}
}

其中 isAjax() 为 helpers,可直接将此方法定义在MyDecorate.php内(可不作判断,如希望控制ajax不引入公用文件则保留)

// 是否为 ajax 请求 
function isAjax() {
return (isset($_SERVER['HTTP_X_REQUESTED_WITH']) 
&& strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest');
}

4、views 目录新增header.php, footer.php。

摘自:http://blog.nengzuo.com/?p=1182

posted on 2012-12-13 16:32  jenqz  阅读(791)  评论(0编辑  收藏  举报