fzbk 发表于 2012-5-26 10:22:02

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、完

title1 发表于 2013-1-21 17:34:35

好思路 这个要顶一下

fltn03 发表于 2013-2-18 14:26:43

好思路!赞一个!

liyj144 发表于 2013-3-17 19:12:54

方法是不错,但是如果需要在header中添加css代码,并自定义文档标题这些,在footer中添加自定义的js代码,用hooks该怎样办呢?一时没有很好的办法,只能重写loader了
页: [1]
查看完整版本: header,footer公用视图统一控制(hook:display_override)