| 제목 | HOOK으로 레이아웃 한방에 훅~ | ||
|---|---|---|---|
| 글쓴이 | 케이든 | 작성시각 | 2009/11/03 15:57:13 | 
| 
                         | 
                |||
| 
                        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
                             
                             | 
                    
| 
                             
                                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
                             
                             | 
                    
컨트롤러에서 view를 생성하는것보다 ~~ 레이아웃 자체에서 이미 스킨 형태로 다 만들어져 있었다면 더 좋았을것이라는 생각을 해보게 됩니다.^^
현재 방식의 훅 레이아웃이 결국은 css 코딩을 하시는 분들께는 유용하실 수 있다는 의견입니다.^^