| 제목 | 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 코딩을 하시는 분들께는 유용하실 수 있다는 의견입니다.^^