CI 묻고 답하기

제목 [초보]레이아웃에 관하여 다시 질문...
글쓴이 헛발이 작성시각 2009/12/28 12:01:12
댓글 : 12 추천 : 0 스크랩 : 0 조회수 : 28219   RSS
자꾸 레이아웃에 관하여 질문해서 죄송해요.. 아직도 감이 잘 안와서리..
아래와 같이 A, B부분에 다른 콘텐츠를 넣고 싶어요..

blog콘트롤에서 list메소드의 페이지라고 가정하고..


웅파님께서 이야기 하신데로...
$data['contents_view'] = //별도컨텐츠데이터
$this->load->view('contents_view',$data);
이렇게 하면 된다구 하셨는데요.. 윗부분의 소스는 이해는 가요...
근데 윗처럼 해서 콘텐츠를 불러 온 다음에 레이아웃에 어떻게 넣는지가 이해가 안가네요..

blog콘트롤의 list메소드에 list_view의 뷰페이지에 contents_view뷰페이지를 넣고 싶은데..
ㅡ.ㅡ;
 다음글 [초보]이 소스 어케 가져 오는거에요? (3)
 이전글 [초보]배열에 관하여 기초상식좀.. (5)

댓글

변종원(웅파) / 2009/12/28 12:57:24 / 추천 0
blog controller의 list method
<?
function list(){

$this->load->view('top');
$data='메뉴 왼쪽 리스트 내용';
$this->load->view('left_view', $data);
$this->load->view('content');
$this->load->view('bottom');

}
?>
기본적으로 위와 같은 구조가 되겠죠.
native php에서의 1프레임사이트와 동일한 구조입니다.
전체 html을 각각 top, left, content, bottom 으로 나누어 저장을 하고
left_view의 경우 주소에 따라 $data를 다르게 만들어주면 되구요.

이렇게 쓰다보면 한단계 더 발전해서 다른 컨트롤러를 현재의 컨트롤러안에 넣어서 사용하고 싶어집니다.
(위의 이미지를 보면 다른컨트롤러의 뷰를 쓰고 싶다고 하셨는데 뷰는 그냥 불러다 쓰면 되지만 결국엔
컨트롤러 안에서 다른 컨트롤러를 호출하고 싶다는 말씀이 됩니다.)
이럴 경우엔 widget plugin을 사용하시면 됩니다.
http://codeigniter-kr.org/qna/view/463/page/1/q/widget

function list(){
  widget::run('top_controller');
  widget::run('left_controller');

  $this->load->view('content'); 
  widget::run('bottom_controller');
}
위와 같은 방식으로 컨트롤러안에서 다른 컨트롤러를 사용할 수 있습니다. (컨트롤러를 호출하여 만들어진 뷰를 삽입하는 효과)


변종원(웅파) / 2009/12/28 12:59:23 / 추천 0
제가 개발중인 웹메이커3 이야기가 또 나오지만
웹메이커3에서는 레이아웃(div로 외곽형태만 가지고 있는)안에 widget을 이용하여 해당 플러그인을
삽입하는 방식으로 사이트를 구현하고 있습니다.

지난 주인가 세미나를 하려고 했는데 참석자가 저조해서 취소했는데 웹메이커3의 구조에 대한 세미나였습니다.
아마 1월에는 진행을 할듯합니다. 글로만 설명하는게 한계가 있어서..... ^^;
보통 사이트를 만들때 미리 주소체계를 만들어놓고(게시판의 경우 board.php?id=tip&method=list) 또는 예상을 하고
만들게 됩니다. 그런데 미리 만들어진 주소가 없을 때(cms 같은 경우) 내가 만들고자 하는 사이트의 메뉴와 주소를
어떻게 연결을 하고 그 주소를 실제로 화면에 표현해낼 수 있는가에 대한 부분을 세미나로 진행할 겁니다.
cms 같은 툴을 개발하지 않으면 필요없는 부분일 수 있는데 그런 개념을 알고 있는 것과 모르고 개발하는 것에는
차이가 있겠죠.
그리고 웹메이커3의 3가지 큰 구조중 하나가 레이아웃과 디자인(플러그인)을 분리한 부분입니다.
그게 widget이라는 ci플러그인이 있었기에 쉽게 구현이 가능했습니다. 처음엔 제가 한 일주일 고민해서 나름 구현을
했는데 나중에 포럼 찾아보니 있더군요. ㅋㅋㅋ
widget + matchbox 를 쓰게 되면 사이트에 플러그인을 삽입할 수 있는 모듈구조로 개발을 할 수가 있습니다.
일반 사이트라고 하더라도 플러그인 구조로 개발을 한다면 재사용성, 개발시간 단축등 많은 이득을 취할 수 있습니다.
블럭 맞추듯이 끼워넣으면 되거든요... ^^
1월 중순에 오픈할 웹메이커3 설치해서 한번 써보세요.

헛발이 / 2009/12/28 13:06:06 / 추천 0
그러면 결국 이렇게 해야 한다는 말씀인가요?

$this->load->view('header';
$this->load->view('content', $data);
$this->load->view('footer'); 
이렇게 되어 있다면

header_view.php에서는
<html>
<head><title></title></head>
<body>
<div id="content">

footer_view.php에서는
</div>
<body>
</html>
이렇게 해야 한다는건가요?
변종원(웅파) / 2009/12/28 13:10:18 / 추천 0
네. 맞습니다.
widget을 쓰시면 헤더나 푸터도 컨트롤러로 만들어서 사용할 수 있습니다.
컨트롤러로 만들면 자유도가 좀 더 높아지겠죠?
헛발이 / 2009/12/28 13:55:22 / 추천 0
그러면 또 궁굼해 지는게 있는데요..
일반적으로 그냥 포럼과 같이 쭉~ 페이지를 만들다가요...
중간에 갑자기 특정페이지에서만 사이드에 특정 부분을 끼워 넣기를 하려면
그거 골치 아프겠군요.. ㅡ.ㅡ;
헛발이 / 2009/12/28 13:56:38 / 추천 0
아 ajax로 끼워 넣기를 해도 되겠군요.. ㅋㅋ
변종원(웅파) / 2009/12/28 14:18:32 / 추천 0
그럴때는 주소에 따라서(특정 주소에서만 끼워넣기를 할테니) if로 처리
왼쪽메뉴 담당하는 컨트롤러가 주소에 따라 변하게 만들면 끝~ ^^
헛발이 / 2009/12/28 14:25:49 / 추천 0
이런 방법은 할수 없는건가요?
Hook로 해서 레이아웃파일을 만듭니다..

myLayout.php
<html>
<head><title></title></head>
<body>

<div id="content">
{yield}
</div>

</body>
</html>

이렇게 한다음에..sidemenu부분을요..
<html>
<head><title></title></head>
<body>

<div id="sidemenu">
{sidemenu}
</div>

<div id="content">
{yield}
</div>

</body>
</html>
이렇게 레이아웃파일에 넣고 그 부분을 다른 콘트롤의 view를 넣을수 있을까 해서요...
변종원(웅파) / 2009/12/28 15:01:10 / 추천 0
레이아웃에 {sidemenu}를 추가하시려면 hooks/Yield.php 파일을 수정하셔야 합니다.
{yield}에 대한 처리만 있습니다.

그런데 사용예에 보면 content라고 큰 레이아웃만 감싼거라

	function index()
	{
		//로드되는 view 파일들은 레이아웃 파일안에 {yield} 와 항상 replace  됨.
                $this->load->view('left_menu');
		$this->load->view('main');
	}
형식으로 쓰시면 될것 같은데요?


헛발이 / 2009/12/28 15:25:25 / 추천 0
어렵군요...어떤 방식으로 하는게 가장 좋은건지... 아무리 개발자의 선택에 따라 다르다지만...
그래도 뭔가.. 정해진 레이아웃 룰이 있음 좋겠군요... ^^;
케이든 / 2009/12/28 15:25:46 / 추천 0
yield를 바꾸면 되긴할텐데 사용할때

좀 번거로워 질거같습니다


또 다른 컨트롤러의 view를 넣기를 원하셧는데

이부분은 모듈러 적용하시면 한방에 빵 해결되구요

모듈러 시킬만큼 큰 프로젝트가 아니다 싶으시면

sidebar 라이브러리 만들어서

라이브러리에서 view를 로드한다는 개념으로 해보세요

그러면 위에 웅파님께서 말씀하신것처럼

사이드바와 메인을 동시에 로드한 후 {yield}와 바꿔주면 됩니다
헛발이 / 2009/12/28 15:28:50 / 추천 0
넵 알겠습니다..
읽어 보니 그렇게 큰 프로젝트도 아니라서 케이든님 말씀처럼 라이브러리를 사용하는겟도 괜찮겠다는 생각이 드네요... 감사합니다... ^^