见网上提到有很多种方法,没有具体测试哪个效率高。
方法一、在每个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