| 제목 | ci세상님께 물어봤었는데..header, contents, footer 에 대해서 | ||
|---|---|---|---|
| 글쓴이 | 터프키드 | 작성시각 | 2009/08/26 15:22:10 |
|
|
|||
|
해당 컨트롤러에서 (예를들어 blog 컨트롤러) $this->load->view('header'); $this->load->view('contents'); $this->load->view('footer'); 처럼 하시던데요 물론 레이아웃 하나로 쓰는 방식도 있구요 근데 저는 그렇게 view를 불러오는 방법이 궁금한게 아니구요 각각 header, footer 컨트롤러가 필요합니다; 컨트롤러 없이 blog 컨트롤러 안에서 header에 들어갈 php랑 footer에 들어갈 php코드랑 다 짜고 위에처럼 불러오면 되겠지만, 그럼 컨트롤러가 변경될때마다 같은 코드를 계속 중복해서 써줘야하잖아요 게다가 지금 만드는 사이트는 header footer가 섹션별로 달라집니다 (디자인도 바뀌지만 php코드들도..) 이럴땐 어떻게 구조를 세우는게 좋을지 감이 안오네요; 혹시 완전한 사이트 소스같은걸 구할 수있을까요? |
|||
| 다음글 | views 디렉토리를 루트로 빼려다 실패했습니다; (8) | ||
| 이전글 | Template_ 연동해보는데요 클래스생성이 안되는거 ... (6) | ||
|
터프키드
/
2009/08/26 16:41:08 /
추천
0
|
|
변종원(웅파)
/
2009/08/26 17:21:01 /
추천
0
컨트롤러 파일에서 아래 소스처럼 상단에 넣어놓으시면 됩니다.
function _remap($method)
{
//상단
$this->load->view('admin/header_v', $this->data);
//해당 메소드 호출
$this->{$method}();
//하단
$this->load->view('admin/footer_v');
}
/**
* function 값이 없을때.
*/
function usage() {
//뷰만 선언
$this->load->view('usage_v');
}
|
|
ci세상
/
2009/08/26 17:26:38 /
추천
0
1. 공용상수 http://codeigniter-kr.org/qna/view/754/page/2/ 웅파님 댓글 참조 2. 후킹 http://codeigniter-kr.org/tip/view/104/ => 스킨형태를 어떻게 지정하는지 잘 설명해 두셨습니다. ^^ 너무나 좋은 정보를 주시는 웅파님 ㅎㅎ |
|
터프키드
/
2009/08/26 18:05:02 /
추천
0
헉헉 지금 전에 웅파님이 이전 게시판에 올려두신 글 어찌어찌 찾아서
해외 컨트롤러에서 컨트롤러 불러오는 위젯을 발견했습니다 어찌저찌해서 구현 동작이 완료된것까지 했네요! 두분 신경써주셔서 감사드려요^^ 다른 방법도 있겠지만, 일단 되는걸로 빨리빨리 해야하기때문에..ㅠㅠ 아래는 제가 구현한 방법입니다 inc/header.php
class Header extends MY_PageController {
public function __construct()
{
parent::getInstance();
}
function index()
{
$this->template_->define('header', 'header_view.php');
$this->template_->assign('title', '아이어러너너어리');
$this->template_->print_('header');
}
}inc/footer.php
class Footer extends MY_PageController {
public function __construct()
{
parent::getInstance();
}
function index()
{
$this->template_->define('footer', 'footer_view.php');
$this->template_->assign('copyright', '그런쇼쇼쇼');
$this->template_->print_('footer');
}
}main.php (최초 컨트롤러)
class Main extends MY_PageController {
public function __construct()
{
parent::getInstance();
}
function index()
{
$this->load->controller('_inc/header');
$this->header->index();
$this->set_contents();
$this->load->controller('_inc/footer');
$this->footer->index();
}
function set_contents(){
$data['bank_result'] = $this->db->get('pb_user_bank_account')->result_array();
$this->template_->define('main', 'main_view.php');
$this->template_->assign('data', $data);
$this->template_->print_('main');
}
}이렇게 해봤습니다My 관련된 클래스들은 application/libraries 에 넣어뒀구요 template_ 와 my_pagecontroller는 autoload 해뒀습니다 |
|
변종원(웅파)
/
2009/08/26 19:31:52 /
추천
0
현재 개발중인 CMS에서는 widget 플러그인(컨트롤러에서 다른 컨트롤러 호출)을 이용해서
각각의 플러그인들을 호출하여 만들어진 html을 조합해서 사이트를 표현해줍니다. 현재 구현하신 것도 페이지(메소드)마다 상하단을 선언해줘야 하는 구조입니다. 시간 되실때 _remap으로 바꿔보시기 바랍니다. 그러면 한번만 선언해놓으면 나머지 메소드에서는 선언할 필요없습니다. |
|
터프키드
/
2009/08/26 23:17:02 /
추천
0
웅파 // 넵 정말 감사합니다^^
근데 remap 은 한번 선언해놓으면 나머지 메소드에서 선언할 필요가 없다고 하셨는데요 만약 header, sidebar, footer 등이 필요없는 팝업창 같은 경우에는 어떻게 제외해줄 수 있나요? 제가 한 방법은 좀 귀찮긴 하지만, 제가 아직 수준이 낮아서 ㅎㅎ; 저런방법밖에 생각이 나지 않네요 그리고 remap을 넣을 파일이 컨트롤러 파일이라고 하셨는데요.. system/libraries/Controller.php 파일을 말씀하시는건가요? 그럼 $this->load->view('admin/header_v', $this->data) 하게되면 모든 자식 컨트롤러에서 사용되는데 admin 부분을 대체할수 있는 변수가 있는지.. (admin 일수도 service 일수도.. 여러가지 디렉토리가 있어서요..) segment(1)."/header_v" 하면 되려나요 ㅎㅎ; 아 정말 어렵고도 먼 CI와 MVC 패턴이군요..ㅠㅠ |
|
ci세상
/
2009/08/27 00:22:07 /
추천
0
_remap 재매핑을 이용하면 메쏘드를 체크해서 있으면 상하단 적용 없으면 팝업처리
## 컨트롤러 예제 ##
<?
function _remap($method)
{
// 메쏘드가 있으면 상하단 적용 없으면 팝업창
if ( method_exists($this,$method.'_method'))
{
$this->load->view(''.$this->uri->segment(1).'/header_v');
$this->{"{$method}_method"}();
$this->load->view(''.$this->uri->segment(1).'/footer_v');
}
else
{
if(!$this->uri->segment(3))
{
$this->_CreatePopup();
} else {
$this->_CreateExe();
}
}
}
function list_method()
{
echo "목록";
}
function _CreatePopup()
{
echo "팝업창 띄우기";
}
function _CreateExe()
{
echo "팝업창 실행";
}
사용예)http://domain.com/member/list 라고 하면 => view폴더에 member 폴더에 header, footer가 열리고 list 메쏘드를 사용 http://domain.com/member/id_search 라고 하면 => _CreatePopup 메쏘드가 실행되면서 지정된 새창이 열리게 될것이구요 http://domain.com/member/id_search/exe 라고 하면 => _CreateExe 메쏘드가 실행되면서 팝업창을 처리완료후 닫게 만들게 됩니다. |
|
케이든
/
2009/08/27 00:50:25 /
추천
0
만약 header와 footer가 페이지마다 정말! 많이! 다이나믹 하다면
컨트롤러에서 컨트롤러를 부르는 hmvc나 좀더 나아가서는 모듈 방식으로 개발하면 관리하기가 좀 더 수월할겁니다.. |
|
터프키드
/
2009/08/27 08:51:51 /
추천
0
ci세상 // 자세한 설명 감사드립니다^^ Controller.php 에 넣는게 아니군요!
관련부분에 대해서 좀 더 찾아보고 실 개발 전에 선택해야겠습니다^^ 케이든 // 그다지 완전 심하게 다이나믹하진 않지만, 레이아웃 자체가 달라지는 경우도 많고 그렇네요..ㅠㅠ |
|
변종원(웅파)
/
2009/08/27 09:55:00 /
추천
0
ci세상님이 자세하게 올려주셨네요. ^^
|
그냥 index.php 최상단 파일에다가 header, footer 에 관련된 php 코드 다 짜놓고 해도 될지
helper에 header_helper.php , footer_helper.php 등록하고 해야할지
도데체 함수, 클래스 외에 디폴트로 사용해야하는 코드는 어디에 넣어야하나요..ㅠㅠ