CI 묻고 답하기

제목 오토로드 에서 DB접속
글쓴이 웨인 작성시각 2009/12/20 23:13:37
댓글 : 10 추천 : 0 스크랩 : 0 조회수 : 35020   RSS
 안녕하세요 .. 

1. 오토로드를 사용하여 블로그를 제작중입니다. 
<table align="center" cellpadding="0" cellspacing="0" border="0">
    <tr><td><? include 'top.php'; ?></td></tr>
    <tr><td><? include 'menu.php'; ?></td></tr>
이런식으로 제작을 하려고 하는데요 
각각의 include파일에서 db접속을 하지 못하고 있습니다.
$query = $this->db->query("select * from menu");

foreach ($query->result() as $row)
{
   echo $row->no;
   echo $row->name;
   echo $row->url;
}

사용시 db 에서 애러 발생합니다. 이렇게 개발시 include된 파일에서는 디비접속을 하지 못하나요?
콘트롤러에서는 디비접속이 잘되고 있습니다. 
오토로드를 사용하여 접속할시에는 잡속이 않되네요 




2. 1.번처럼 오토로드를 사용하는것이 맞나요? 코딩을 하면 할수록 .. 산으로가는 기분이네요..  고수님들은 
    어떤식으로 사용을 하시나요?  구성은 

------------------------------
|            상단                  |
------------------------------
|    메뉴  |  내용             |
------------------------------
|             하단                 |
------------------------------
이런식으로 하고 싶은데요.. 이런경우  콘트롤러에서  include 할경우 화면마다 include해야되는경우가 생기는것 같아 
저런식으로 그성했는데요.. 이런경우 어떤방법이 좋을까요? 



 다음글 [초보]파일삭제 (7)
 이전글 [초보]character_limiter로 문자 자르기 (4)

댓글

변종원(웅파) / 2009/12/21 09:45:05 / 추천 0
include 하시면 당연히 codeigniter의 함수를 쓰지 못합니다.
ci의 문법(?)대로하시는게 나을것 같네요. $this->load->view('top'); 으로요.
현재 게시판에서 레이아웃 으로 검색해보세요. 답이 있습니다.

컨트롤러
$data['top'] = //top용 데이터처리
$data['menu'] = //menu용 데이터처리
$this->load->view('top',$data); 
$this->load->view('menu',$data); 
$this->load->view('a', $data); 


특별히 꼭 include해서 사용해야하는 이유가 있는지요?

헛발이 / 2009/12/21 10:07:20 / 추천 0

근데 저도 궁굼한게 있는데요.. 사실 우리가 특히 사이드바(왼쪽메뉴들..)에 예를 들어 "N" 새로운글을 표시 하고자 하면 SQL로 일단 쿼리를 날려 새로운 글이 있는가.. 그것을 해 줘야 하잖아요...
그러면 왼쪽 부분을 일단 아래와 같이
 

$this->load->view('sidemenu',$data);
이렇게 하고 레이아웃에서 그 결과값을 보여 주면 된다고 생각하는데요..
그러면 콘트롤에서 계속 그 부분을 넣어 줘야 하나요? 아래와 같이?
....
function list(){
   $this->load->view('sidemenu',$data);
   ...
}

function write(){
   $this->load->view('sidemenu',$data);
   ...
}

function view(){
   $this->load->view('sidemenu',$data);
   ...
}
이런식으로 계속 넣어 줘야 하는건가요?
사실 아직 저도 그 부분을 이해 하지 못했어요... ^^
변종원(웅파) / 2009/12/21 10:39:41 / 추천 0
헛발이/ _remap()을 쓰면 컨트롤러당 딱 한번만 선언하면 되구요.
케이든님이 올리신 레이아웃을 사용하면 사이트당 딱 한번만 선언하면 되겠죠?
^^
웨인 / 2009/12/21 12:36:19 / 추천 0
먼저 답변주셔 감사합니다.
제가 include를 사용하려고 하는이유는

1. table안에 넣고 전체 레이아웃을 움직 요리조리 컨트롤 하려고 합니다.

2. 웅파님께서 설명해주신 방법으로 하면 화면마다 저렇게 해줘야되는것 아닌가요? 
    제 생각으로는 오토로드에서 설정을하면 자동으로 읽어드려 화면마다 설정할필요가
   없다고 생각되어 include를 하였습니다.
케이든 / 2009/12/21 13:04:17 / 추천 0
일단 테이블태그로 전체 페이지 레이아웃 잡는 방식(nested table)이라면

상당히 오랜만에 보네요

별로 좋은방법은 아니지만 굳이 저렇게 하셔야 할땐

http://williamsconcepts.com/ci/codeigniter/libraries/template/index.html

위의 라이브러리와 _remap을 적당히 맞춰쓰시면 될거같긴 합니다
변종원(웅파) / 2009/12/21 13:16:03 / 추천 0
웨인/ 헛발이님 질문에도 답을 했지만 컨트롤러마다 선언할 수도 있고 전체 프로그램에서 딱 한번만 선언하여 사용할 수도 있습니다. 케이든님 답변으로 처리하시는 것이 관리하기가 편할 것 같습니다.
웨인 / 2009/12/21 13:18:23 / 추천 0
헛.. ㅡㅡ;;; 그게 오래된 형식이였군요.. ..
컨트롤러
$data['top'] = //top용 데이터처리
$data['menu'] = //menu용 데이터처리
$this->load->view('top',$data); 
$this->load->view('menu',$data); 
$this->load->view('a', $data); 
1. 이런형식으로 개발할때는 위치 조정은 어떻게하죠? 
제머리로는 도대체 감이 않오네요..
top,meme 따로 따로 한다면 위치 조정시 테이블위치가
재대로 않나올뜻 싶습니다..

2. 각화면마다 컨트롤러 호출시 저 코드를 다 써주어야되는것 아닌가요? 
    그럼 더 불편하지 않나요?? 


웨인 / 2009/12/21 13:35:48 / 추천 0

웅파님..
 

function _remap($method)
{
    if ($method == 'some_method')
    {
        $this->$method();
    }
    else
    {
        $this->default_method();
    }
}
_remap사용법을 잘 모르겠습니다
설명서를 읽었는데요 어찌 쓰는지 젼혀 감이 않오네요 ㅡㅜ;;;
변종원(웅파) / 2009/12/21 14:06:06 / 추천 0

  http://codeigniter-kr.org/source/view/18/page/1/q/remap

웨인님이 말씀하신 테이블 구조 자체를 찢어서(잘라서) top, menu, contents 파일에 나눠넣고
컨트롤러에서 리맵으로 호출인데 위 링크 참고하시면 그림과 소스로 설명되어 있습니다.
참고하세요.

$this->$method(); 
이 부분에 대한 설명만 드리자면 $methode는 주소와 연결된 부분입니다.
만약 주소가 http://www.a.com/index.php/admin/login/check 일 경우
admin 디렉토리의 login.php 컨트롤러의 check() 메소드를 호출합니다.
위 주소의 경우 $this->method() == check 가 됩니다.
특별히 check라는 메소드를 호출했는데 다른 메소드를 호출해야할 필요가 없다면(주소 그대로, 기본으로 쓴다면)
$this->method()를 쓰면 됩니다.

컨트롤러 파일

function _remap($method){
  $this->load->view('top');
  $this->load->view('menu');
  $this->$method();
  $this->load->view('bottom');
}
위와 같이 선언되어 있다면 해당 컨트롤러 파일에서는 더이상 top, menu, bottom 부분을 추가하지 않아도
자동으로 추가가 됩니다.
_remap()에서 예외처리도 가능하구요. 팝업의 경우 상하단 인클루드가 필요없다면 if문으로 빼버리면 되겠죠

웨인 / 2009/12/21 14:14:27 / 추천 0
답변감사합니다.