header,footer公用视图统一控制(hook:display_override)
本帖最后由 fzbk 于 2012-5-26 13:58 编辑这几年都在写java,论坛也少来了。
正题,header,footer(html公用头、尾)如何自动引入,这里使用的是 hook : display_override
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。
5、完
好思路 这个要顶一下 好思路!赞一个! 方法是不错,但是如果需要在header中添加css代码,并自定义文档标题这些,在footer中添加自定义的js代码,用hooks该怎样办呢?一时没有很好的办法,只能重写loader了
页:
[1]