用户
 找回密码
 入住 CI 中国社区
搜索
查看: 5797|回复: 3
收起左侧

[中级] header,footer公用视图统一控制(hook:display_override)

[复制链接]
发表于 2012-5-26 10:22:02 | 显示全部楼层 |阅读模式
本帖最后由 fzbk 于 2012-5-26 13:58 编辑

这几年都在写java,论坛也少来了。
正题,header,footer(html公用头、尾)如何自动引入,这里使用的是 hook : display_override

1、在config.php开启hook
PHP复制代码
$config['enable_hooks'] = TRUE;
复制代码

2、hooks.php添加代码
PHP复制代码
$hook['display_override'] = array(
    'class'    => 'MyDecorate',
    'function' => 'init',
    'filename' => 'MyDecorate.php',
    'filepath' => 'hooks'
    //'params'   => array('beer')
);
 
 
复制代码


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);
        }
}
复制代码


其中 isAjax() 为 helpers,可直接将此方法定义在MyDecorate.php内(可不作判断,如希望控制ajax不引入公用文件则保留)
PHP复制代码
// 是否为 ajax 请求
function isAjax() {
        return (isset($_SERVER['HTTP_X_REQUESTED_WITH'])
                && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest');
}
复制代码


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

发表于 2013-1-21 17:34:35 | 显示全部楼层
好思路 这个要顶一下
发表于 2013-2-18 14:26:43 | 显示全部楼层
好思路!赞一个!
发表于 2013-3-17 19:12:54 | 显示全部楼层
方法是不错,但是如果需要在header中添加css代码,并自定义文档标题这些,在footer中添加自定义的js代码,用hooks该怎样办呢?一时没有很好的办法,只能重写loader了

本版积分规则