CI 코드

제목 HOOK으로 레이아웃 한방에 훅~
글쓴이 케이든 작성시각 2009/11/03 15:57:13
댓글 : 3 추천 : 0 스크랩 : 1 조회수 : 33413   RSS
1. HOOK 사용 설정

config/config.php

$config['enable_hooks'] = TRUE;
config/hooks.php

$hook['display_override'][] = array(
	'class'    => 'Yield',
	'function' => 'doYield',
	'filename' => 'Yield.php',
	'filepath' => 'hooks'
);

2. HOOK 파일 추가

hooks/Yield.php

<?php  if (!defined('BASEPATH')) exit('No direct script access allowed');

class Yield
{
	function doYield()
	{
		global $OUT;
		$CI =& get_instance();
		$output = $CI->output->get_output();
		$CI->yield = isset($CI->yield) ? $CI->yield : TRUE;
		$CI->layout = isset($CI->layout) ? $CI->layout : 'default';
		if ($CI->yield === TRUE)
		{
			if (!preg_match('/(.+).php$/', $CI->layout))
			{
				$CI->layout .= '.php';
			}
			$requested = APPPATH . 'views/layouts/' . $CI->layout;
			$layout = $CI->load->file($requested, true);
			$view = str_replace("{yield}", $output, $layout);
		}
		else
		{
			$view = $output;
		}
		$OUT->_display($view);
	}
}
?>
디펄트 레아이웃 파일은 default.php,

레이아웃 폴더위치는 view/layouts 또는 입맛대로 변경


3. default.php 레이아웃 파일 추가

views/layouts/default.php
<html>
<header>
</header>
<body>
  <div>
  </div>
  {yield}
  <div>
  </div>
</body>
<html>
4. 컨트롤러에서 레이아웃 사용법

class Test extends Controller {

	//레이아웃 파일 설정
	var $layout = 'my_layout_file';

	function Test()
	{
		parent::Controller();
	}

	function index()
	{
		//로드되는 view 파일들은 레이아웃 파일안에 {yield} 와 항상 replace  됨.
		$this->load->view('main');
		$this->load->view('sidebar');
	}

	function ajax_call()
	{
		//레이아웃 파일을 사용하지 않을시
		$this->yield = FALSE;

		echo json_encode($array);
	}

	function need_another_layout()
	{
		$this->layout = 'another_layout';

	}

}

5. 참고

layout 파일안에 데이타를 넘겨줘야 할 경우,

다른 view파일을 로드할때 데이타를 같이 넘겨주거나,

$this->load->vars($data);
위처럼 글로벌로 넘겨주면 됩니다.

출처 : http://codeigniter.com/forums/viewthread/57902/
 다음글 [예제] 다중디비 사용하기 (5)
 이전글 [lib추가] 웹에디터 SPAW

댓글

ci세상 / 2009/11/06 10:44:04 / 추천 0
Hook의 핵심이 모든 view 호출을 레이아웃 파일로 yield 를 통해서 넘겨주는 부분이네요 ~~

컨트롤러에서 view를 생성하는것보다 ~~ 레이아웃 자체에서 이미 스킨 형태로 다 만들어져 있었다면 더 좋았을것이라는 생각을 해보게 됩니다.^^

현재 방식의 훅 레이아웃이 결국은 css 코딩을 하시는 분들께는 유용하실 수 있다는 의견입니다.^^
Jeremy / 2011/04/15 10:55:33 / 추천 0
케이든님 이거 보고 따라했는데 전 다음과 같은 에러가 떠요.

Fatal error: Call to a member function get_output() on a non-object

아마 밑에 코드에 문제가 있는거 같은데 뭐가 문제 일까요?
$output = $CI->output->get_output();


희망2 / 2011/04/17 18:00:05 / 추천 0