CI 묻고 답하기

제목 아직도 개념정리가 잘 안되는 초보질문(다중게시판)
글쓴이 헛발이 작성시각 2009/11/03 15:59:02
댓글 : 3 추천 : 0 스크랩 : 1 조회수 : 37606   RSS
이렇게 편하게 질문하고 알게 되어 저야 좋치만 다들 여러분들의 덕분이라고 생각합니다.
조금만 개념이 생길때 까지만 기초질문을 해 보려 합니다..

예전엔 다중으로 게시판을 만들게 되면 항상 가지고 다니는 변수 $tbl 속에 테이블명을 가지고 다니면서
게시판소스는 하나만 만들어 놓고 사용했는데..

공개해주신 포럼 소스를 봐도 약간은 이해가 가려고 하지만...
주된 개념이 들어서질 않네요...

예를 들면

게시판 소스는 controllers/bbs/에 하나만 존재 하는것이고...
routes.php에 정의 하거나 다른 조작방법으로 실제 path즉 도메인/bbs/index/가 아닌
도메인/테이블명/index/가 되는거 같은데요..

좀더 구체적인 설명을 해 주시려면 귀찮으시겠죠?  ㅋㅋ
 다음글 CI DB session 사용 중인데요. 이상 현상. (6)
 이전글 케이든님 계시나요? (5)

댓글

변종원(웅파) / 2009/11/03 17:06:05 / 추천 0
굳이 포럼소스처럼 하실 필요 없습니다.
포럼의 소스는 CMS툴의 일부(게시판 플러그인)를 가져와서 컨버팅 작업을 한것이라
routes.php에 정의를 해서 사용을 했습니다. (빨리 오픈하려고 주소체계를 그대로 사용했습니다)

일반적인 게시판을 사용하신다면 예전처럼 도메인/bbs/list/no/3 이렇게 사용하시면 됩니다.

일반적으로 개발을 할때는 주소를 개발자가 미리 다 셋팅(머리속이나 개념상)을 해놓고 프로그래밍을
하기때문에 기존 주소체계(도메인/bbs/list/no/3)를 사용하면 되나 CMS는 게시판이던지 그외 어떤
플러그인이던지 동일한 주소체계에 대응을 해야해서 위 방식(도메인/테이블명/list)으로 사용하게
된겁니다.

그리고 주소를 현재 포럼처럼 쓸 경우 한가지 잇점이 있다면 주소가 무얼 의미하는지 명확해진다는 것이죠
bbs.php?l=list&no=3 --> 3번 게시판의 리스트 표시
위의 주소 보다는
/qna/list/ --> qna게시판 리스트

/qna/view/3 -> qna게시판 3번 글보기
이것이 더 직관적이 되는거죠.

거의 작업이 완료된 CMS툴의 경우 주소체계가

도메인/1차분류/2차분류/3차분류/?method=list&page=1
이렇게 되어있어서 1차분류가 product(상품), 2차분류가 car(자동차), 3차분류가 sonata(상세차종)일 경우

도메인/product/car/sonata
 
이렇게 접근이 됩니다.
이게 게시판인지 일반 html페이지인지는 프로그램에서 처리가 되고 일반사용자는 알 필요가 없죠.
화면에 나오기만 하면 되니까요. ^^
http://icms.kiissoft.com/helpdesk/notice/ 여기 참고하시면 이해가 빠르실 겁니다.

헛발이 / 2009/11/03 18:02:25 / 추천 0
http://도메인/테이블명/view/3

이렇게 해서 테이블명만 바꿔가면서 하나의 게시판으로 여러개를 사용하려면
디랙토리를 어떻게 처리 하는지가 점점 궁굼해 지네요.. ^^;;

스스로 찾아 보는게 오래 기억에 남겠죠?

^^;; ㅡ.ㅡ;
변종원(웅파) / 2009/11/03 19:38:37 / 추천 0
어렵게 생각하지 마시구요. ^^

테이블명변수=uri->segment(1) 이런 식으로 변수를 받아서 처리를 합니다.
프로그램은 하나이고 테이블명 변수, 메소드 변수로 받아서 처리를 하죠.

$route['qna/(:any)'] = "board/index";
그리고 config/routes.php를 보시면 qna, tip 등 각 게시판의 이름이 나열되어 있고
qna로 시작하는 주소가 들어오면 board 컨트롤러의 index method를 호출하라는 의미입니다.
routes.php에 나열되어 있는 것 이외의 주소는 원래대로 해당 컨트롤러로 이동을 하구요.
게시판 테이블명으로 시작하는 주소만 게시판으로 연결을 시키는 것입니다.
board.php의 index 메소드를 보시면 두번째 세그먼트(lists, view, write 등)에 해당하는
다른 메소드를 호출하여 그 역할을 해주게 됩니다.
그래서 qna/view/1340 이라면 board 컨트롤러의 index 메소드에서 $this->uri->segment(2)의 값인
view() 메소드를 호출하게 되는 겁니다. view 메소드 안에 보시면 게시판 내용을 불러올때
 $this->uri->segment(1)인 qna와  $this->uri->segment(3)인 1340을 이용하여 내용을 불러오는 것을
보실 수 있습니다.
function index() {
		switch($this->uri->segment(2)) {
		case 'lists':
			$this->lists();
		break;
		case 'view':
			$this->view();
		break;
		case 'write':
			$this->write();
		break;
		case 'delete':
			$this->delete();
		break;
		case 'edit':
			$this->edit();
		break;
		case 'reply_edit':
			$this->reply_edit();
		break;
		case 'download':
			$this->download();
		break;

		default:
			$this->lists();
		break;
		}
	}
그리고 헷갈리실만한게 테이블명을 넘겨주는 부분이 없어서 그러는것 같네요.
기본정보들은 상수로 만들어서 사용합니다.
board컨트롤러 생성자를 보시면
$rew = $this->db->get_where('board_list', array('name_en'=>'board_'.$this->uri->segment(1)));
		$item = $rew->row();
		define('MENU_ID', $item->no);
		define('MENU_SKIN', $item->skin);
		define('MENU_BOARD_NAME', $item->name);
		define('MENU_BOARD_NAME_EN', $item->name_en);
		define('MENU_BOARD_PERM', $item->permission);
		define('MENU_BOARD_DETAIL_SETTING', $item->detail_setting);
이런 부분이 있습니다. 이게 게시판 정보를 가져와서 상수로 선언한 겁니다.
이후 board컨트롤러와 관계된 모델, 뷰에서는 모두 상수를 쓰실 수 있습니다.
게시판 테이블명은 위에서 'MENU_BOARD_NAME_EN' 입니다.