TIP게시판

제목 통 레이아웃을 드라이버로 사용하기
글쓴이 발전기 작성시각 2015/05/29 18:13:43
댓글 : 1 추천 : 0 스크랩 : 0 조회수 : 13184   RSS
통 레이아웃을 사용할 방법을 찾다가 간단하게 만들어 봤습니다.
레이아웃 관련해서는 후킹을 사용하는 멋진 방법도 포럼에 공개되어 있지만,
header, footer 없이 통레이아웃을 개발하는 분들께는
그냥저냥 사용할만한 Tip이지 싶습니다.(이거슨 뼈대만 있습니다. 살과 피는 직접 붙여 쓰세요^^;)
초 간단하기에 코드 설명은 필요 없을 듯하고요, 그냥 사용법 정도 올립니다. 
CI 소스는 3.0버전입니다.

- 환경설정파일에 $config['theme'] = 'default' 를 작성하고 컨트롤러에서 사용 가능한 상태를 가정합니다.

- 드라이버 디렉토리 구조 만들기 (저는 Layout이라고 했습니다.)

- libraries/Layout/Layout.php
class Layout extends CI_Driver_Library {
	
	var $valid_drivers = array();
	var $CI, $theme;

	public function __construct() 
	{
		/**
			* 부모 생성자에서 인스턴스를 생성하면 
			* 자식 드라이버에서 새롭게 인스턴스를 생성할 필요가 없습니다.
			* $this->CI를 전역적으로 사용할 수 있습니다.
			*/ 
		$this->CI =& get_instance();
		$this->theme = $this->CI->config->item('theme');
		$this->valid_drivers = array('exec');
	}

}

- libraries/Layout/drivers/Layout_exec.php
class Layout_exec extends CI_Driver {

	public function view($data=array(), $obj=false)
	{
		//테마가 변경되었을 경우
		if ( @ is_array($data['theme']) ):
			$this->theme = $data['theme'][0];
		endif;
				
		//컨덴츠가 존재하는 경우
		if ( $obj !== FALSE && @is_array($data['obj']) ) :
			$data['obj'] = $this->contents($data['obj']);
		else:
			$data['obj'] = '';
		endif;

		//통 레이아웃을 포함하고 있는 파일 뷰
		$this->CI->load->view($this->theme.'/_main', $data);
	}
	
	/**
		* $data[0]	파일명
		**/
	private function contents($data) {
		return $this->CI->load->view($this->theme.'/'.$data[0], $data, true);
	}

}

- 컨트롤러에서 사용하기
	public function index() {
		$data = array(
			'theme'=>array('new-theme-name'),
			'obj'=>array('content-file-name')
		);
		$this->layout->exec->view($data, true);
	}


위와 같이 컨덴츠를 포함하는 경우  $data['obj']를 포함해서 넘기면 됩니다. 여기서 $data['obj'][0]은 파일명 입니다.
컨트롤러에서 테마를 강제로 변경해야할 경우 $data['theme'][0]으로 일시 변경할 수 있습니다.

 
 다음글 phpstorm과 xdebug 연동하기 (15)
 이전글 코드이그나이터 디버깅 라이브러리 (6)

댓글

한대승(불의회상) / 2015/05/31 14:32:26 / 추천 0
드라이버로 설계 하셨군요.
잘 사용하도록 하겠습니다.