그누보드 동작방식과 구조에대해서 [타보드 사용자 구독용] 정보
그누호환 그누보드 동작방식과 구조에대해서 [타보드 사용자 구독용]본문
※ 메인 페이지를 만들때 초기 화면 (메인 페이지) index.php 파일 관련을 고쳐서 사용하시나요?
구조상 쉽게 설명드리면 include형태로 템플릿화 되어있습니다.
즉 모든 구성은 index.php에서 해결이 되는 1page all-in 방식이라고 생각하시면되요..
index 내용에 모든 내용을 인클루드 하여 인덱스가 변하지 않고 그내용물만 변하게 만듭니다.
구조를 보면..
===================================== index.php ================================================
////////////////////////////////////////////////////////////////
// 이 상수가 정의되지 않으면 각각의 개별 페이지는 별도로 실행될 수 없음
// define("_GNUBOARD_", TRUE);
//
// 이것은 유일하게 index.php에만 있습니다.
// 즉! 유일하게 다른 파일을 index.php에서 불러오게 해주는 값이라고 보시면됩니다.
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
// confing.php //인클루드 시킴
// 관련 변수에 대한 설정이 있음! 몇번 보셔야합니다.
// 각종 설정을 이파일에서 하실수 있습니다.
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
// lib 디렉토리에 있는 모든 php 파일을 인클루드 시킴
// 이것은 그누보드에서 반복적으로 사용하는 함수를 따로 분리시켜 논 것 입니다.
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
// dbconfig.php 파일 여부로 그누보드의 생성여부 판단
// 이파일은 DB 연결 정보가 있는 파일입니다.
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
// 세션파트 와 자동로그인
// 자동로그인이 되었는지를 검사하고 세션과 쿠키에 대한 처리를 합니다.
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
// 스킨 패스설정
// 그누 보드 특성상 index.php만 열리므로 이곳에 패스가 있어도 무방합니다.
// 차후 config.php로 패스 설정까지 옮겨놓으면 관리가 용이 할뜻 합니다.
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
// $doc 변수 체크 없으면 무조껀 main.php 함수를 호출합니다.
// 이것 때문에 보안 취약점이 발생하기도 하였으나, 빠른 버그 패치되었습니다.
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
// indexexpand.php,
// countinsert.inc.php,
// indexdoctype.php 파일을 인클루드 합니다.
//
// 이것들은 각각 인덱스 확장과, 문서타입, 카운터 사용에 의한 파일들입니다.
////////////////////////////////////////////////////////////////
========================================================================================
indexdoctype에 의해서 페이지 스타일을 변경할수가 있습니다.
몇가지 템플릿화 되어있는데..
============================indexdoctype.php===========================================
case "NONE" :
echo $ob_content;
break;
// STYLE 은 stylesheet 등만 적용하는 TYPE
case "STYLE" :
include './head.sub.php';
echo $ob_content;
include './tail.sub.php';
break;
// DESIGN 은 상단, 하단 파일을 필요로 하는 TYPE
case "DESIGN" :
include './head.sub.php';
include './head.php';
echo $ob_content;
include './tail.php';
include './tail.sub.php';
===========================================================================================
NONE는 상단 , 하단에 아무런 추가 파일이 붙지 않는 순수한 mail.php만 보입니다.
STYlE는 상단에 head.sub.php가 본문에 main.php가 하단에 tail.sub.php가 붙어서 표시됩니다.
DESIGN은 상단 head.sub.php 그다음 head.php 본문 main.php가 그밑에 tail.php 하단에 tail.sub.php가 표시됩니다.
또한 main.php는 index.php?doc=변수 <= 이변수에 파일명 main.php명으로 불러오는것과 같은 디폴트값이기때문에
메인에 들어가는 본문은 변수에 의해서 꾸준히 바뀌게 됩니다.
이러한 구조를 이해 하신다면 어느정도 응용이 되실 것이라 확신합니다.
그럼 일반적인 본문 페이지 구조인 main.php를 보시면
그누보드에 대한 구조를 확실하게 다까발려서 보신겁니다.
===================================== main.php ================================================
//////////////////////////////////////////////////////////////////////////////////////
// if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
// 이것은 index에서 선언되었던 "_GNUBOARD_" 의 변수가 있는지 확인합니다.
// 즉! index.php가 아닌 직접 또는 다른 페이지에서 불러오면 exit 한다는 뜻이죠.
//
// *여기서 잠깐 그러면 임의 php파일을 만들어서 본문을 불러올려면
// index.php있는 위의변수를 선언해주면 되겠죠?
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
// define("_DOCTYPE_", "DESIGN");
// indexdoctype.php에서 봤던 디자인 템플릿입니다. 이해되시죠? 문서 템플릿을 정해주네요
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
// 본문의 html과 주석을 뺀 핵심 코드는 이것이죠..
// <?
// // 최신글 시작
// $sql = " select bo_table, bo_subject from $cfg[table_board] order by gr_id, bo_table ";
// $result = sql_query($sql);
// for ($i=0; $row=mysql_fetch_array($result); $i++) {
// latest('', $row[bo_table], 5, 70);
// echo "<p>";
// }
// // 최신글 끝
// ?>
//
// 이것이 바로 최신글 추출입니다.
// 가만히 보면 for()함수로 result가 없을때까지 반복해서 출력하는군요..
// 즉..게시판수만큼 내용을 뿌려주는거죠..
// 이것을 원하는것만 뽑고 싶다면.. 이렇게 위의 for() { ~~~ }을 제거한뒤 추가하면 끝난다.
//
// <?latest('default', freeboard, 5, 70);?>
//
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
// 투표 인클루드 이다. (이것은 관리자 세팅에 의해서 보여지기도 하고 안보이기도한다.
// <? include "./bbs/vote.php"; ?>
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
// 카운터 인클루드이다 (이것은 config.php에서 카운터 기능을 1,0으로 제어할수있다.
// <? include "./bbs/count.php"; ?>
///////////////////////////////////////////////////////////////////////////////////////
========================================================================================
bbs 의 폴더내 파일들을 상위 디렉토리로 옮겨서 주소를 짧게하려면 수정해야 하는 파일들이 어떤건지 아시나요?
답은 간단합니다.
gnu3/의 내용을 전부 이동시키면 됩니다.
단 위에 bbs/안에 있는 head.php나 main.php, index.php가 기존에 있다면 중뷁이 되니 주의하시길 바래요
또한가지 ... /?doc=bbs/gnuboard.php&... 의 gnuboard.php 파일명을 임의로 바꾸어서 사용가능한가요?
위의 답처럼 만들어진 소스를 이용하시거나, 각종에디터로 일일이 수정하시거나.. 하시면됩니다.
단! 이것은 어느정도 그누보드를 알고있어야 가능할껏이라 생각되네요..
만들어진 소스 써보니.. 정말 편하더군요.. 테스트를 충분히 해보신후 사용하길 권합니다.
끝으로... 관심있게 소스를 하나하나 분석하시면 그리 어렵지 않는걸 느낄껍니다.
제로보드에 공들인 시간의 10/1만큼만... 소비한다면.. 훨신 만족할꺼라 봅니다.
참고로 압축을 풀어보시면 총 20개의 하위디렉토리와 208개의 파일이 존재 하며,
그누보드 인스톨후에는 gnu3/data/member/ , session/ , file/ 디렉토리와
gnu3/bbs/dbconfig.php 이 생성됩니다.
다른 보드를 쓰시다가 넘어오시는 초급자 분들을 위해 댓글을 달았다가..
다른분들도 보셨으면 해서 이곳에도 적습니다.
특히 제로보드 이용자분들..
얻어가려고만 하지 마시고 직접 보물찾기하는 심정으로 숨어진 것들을 찾아보세요
숨은 재미들이 많이 있습니다...
모르는것을 하나 둘 알아가는 재미 말이죠.
참고가 되셨으면 하네요.!
구조상 쉽게 설명드리면 include형태로 템플릿화 되어있습니다.
즉 모든 구성은 index.php에서 해결이 되는 1page all-in 방식이라고 생각하시면되요..
index 내용에 모든 내용을 인클루드 하여 인덱스가 변하지 않고 그내용물만 변하게 만듭니다.
구조를 보면..
===================================== index.php ================================================
////////////////////////////////////////////////////////////////
// 이 상수가 정의되지 않으면 각각의 개별 페이지는 별도로 실행될 수 없음
// define("_GNUBOARD_", TRUE);
//
// 이것은 유일하게 index.php에만 있습니다.
// 즉! 유일하게 다른 파일을 index.php에서 불러오게 해주는 값이라고 보시면됩니다.
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
// confing.php //인클루드 시킴
// 관련 변수에 대한 설정이 있음! 몇번 보셔야합니다.
// 각종 설정을 이파일에서 하실수 있습니다.
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
// lib 디렉토리에 있는 모든 php 파일을 인클루드 시킴
// 이것은 그누보드에서 반복적으로 사용하는 함수를 따로 분리시켜 논 것 입니다.
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
// dbconfig.php 파일 여부로 그누보드의 생성여부 판단
// 이파일은 DB 연결 정보가 있는 파일입니다.
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
// 세션파트 와 자동로그인
// 자동로그인이 되었는지를 검사하고 세션과 쿠키에 대한 처리를 합니다.
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
// 스킨 패스설정
// 그누 보드 특성상 index.php만 열리므로 이곳에 패스가 있어도 무방합니다.
// 차후 config.php로 패스 설정까지 옮겨놓으면 관리가 용이 할뜻 합니다.
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
// $doc 변수 체크 없으면 무조껀 main.php 함수를 호출합니다.
// 이것 때문에 보안 취약점이 발생하기도 하였으나, 빠른 버그 패치되었습니다.
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////
// indexexpand.php,
// countinsert.inc.php,
// indexdoctype.php 파일을 인클루드 합니다.
//
// 이것들은 각각 인덱스 확장과, 문서타입, 카운터 사용에 의한 파일들입니다.
////////////////////////////////////////////////////////////////
========================================================================================
indexdoctype에 의해서 페이지 스타일을 변경할수가 있습니다.
몇가지 템플릿화 되어있는데..
============================indexdoctype.php===========================================
case "NONE" :
echo $ob_content;
break;
// STYLE 은 stylesheet 등만 적용하는 TYPE
case "STYLE" :
include './head.sub.php';
echo $ob_content;
include './tail.sub.php';
break;
// DESIGN 은 상단, 하단 파일을 필요로 하는 TYPE
case "DESIGN" :
include './head.sub.php';
include './head.php';
echo $ob_content;
include './tail.php';
include './tail.sub.php';
===========================================================================================
NONE는 상단 , 하단에 아무런 추가 파일이 붙지 않는 순수한 mail.php만 보입니다.
STYlE는 상단에 head.sub.php가 본문에 main.php가 하단에 tail.sub.php가 붙어서 표시됩니다.
DESIGN은 상단 head.sub.php 그다음 head.php 본문 main.php가 그밑에 tail.php 하단에 tail.sub.php가 표시됩니다.
또한 main.php는 index.php?doc=변수 <= 이변수에 파일명 main.php명으로 불러오는것과 같은 디폴트값이기때문에
메인에 들어가는 본문은 변수에 의해서 꾸준히 바뀌게 됩니다.
이러한 구조를 이해 하신다면 어느정도 응용이 되실 것이라 확신합니다.
그럼 일반적인 본문 페이지 구조인 main.php를 보시면
그누보드에 대한 구조를 확실하게 다까발려서 보신겁니다.
===================================== main.php ================================================
//////////////////////////////////////////////////////////////////////////////////////
// if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
// 이것은 index에서 선언되었던 "_GNUBOARD_" 의 변수가 있는지 확인합니다.
// 즉! index.php가 아닌 직접 또는 다른 페이지에서 불러오면 exit 한다는 뜻이죠.
//
// *여기서 잠깐 그러면 임의 php파일을 만들어서 본문을 불러올려면
// index.php있는 위의변수를 선언해주면 되겠죠?
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
// define("_DOCTYPE_", "DESIGN");
// indexdoctype.php에서 봤던 디자인 템플릿입니다. 이해되시죠? 문서 템플릿을 정해주네요
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
// 본문의 html과 주석을 뺀 핵심 코드는 이것이죠..
// <?
// // 최신글 시작
// $sql = " select bo_table, bo_subject from $cfg[table_board] order by gr_id, bo_table ";
// $result = sql_query($sql);
// for ($i=0; $row=mysql_fetch_array($result); $i++) {
// latest('', $row[bo_table], 5, 70);
// echo "<p>";
// }
// // 최신글 끝
// ?>
//
// 이것이 바로 최신글 추출입니다.
// 가만히 보면 for()함수로 result가 없을때까지 반복해서 출력하는군요..
// 즉..게시판수만큼 내용을 뿌려주는거죠..
// 이것을 원하는것만 뽑고 싶다면.. 이렇게 위의 for() { ~~~ }을 제거한뒤 추가하면 끝난다.
//
// <?latest('default', freeboard, 5, 70);?>
//
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
// 투표 인클루드 이다. (이것은 관리자 세팅에 의해서 보여지기도 하고 안보이기도한다.
// <? include "./bbs/vote.php"; ?>
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
// 카운터 인클루드이다 (이것은 config.php에서 카운터 기능을 1,0으로 제어할수있다.
// <? include "./bbs/count.php"; ?>
///////////////////////////////////////////////////////////////////////////////////////
========================================================================================
bbs 의 폴더내 파일들을 상위 디렉토리로 옮겨서 주소를 짧게하려면 수정해야 하는 파일들이 어떤건지 아시나요?
답은 간단합니다.
gnu3/의 내용을 전부 이동시키면 됩니다.
단 위에 bbs/안에 있는 head.php나 main.php, index.php가 기존에 있다면 중뷁이 되니 주의하시길 바래요
또한가지 ... /?doc=bbs/gnuboard.php&... 의 gnuboard.php 파일명을 임의로 바꾸어서 사용가능한가요?
위의 답처럼 만들어진 소스를 이용하시거나, 각종에디터로 일일이 수정하시거나.. 하시면됩니다.
단! 이것은 어느정도 그누보드를 알고있어야 가능할껏이라 생각되네요..
만들어진 소스 써보니.. 정말 편하더군요.. 테스트를 충분히 해보신후 사용하길 권합니다.
끝으로... 관심있게 소스를 하나하나 분석하시면 그리 어렵지 않는걸 느낄껍니다.
제로보드에 공들인 시간의 10/1만큼만... 소비한다면.. 훨신 만족할꺼라 봅니다.
참고로 압축을 풀어보시면 총 20개의 하위디렉토리와 208개의 파일이 존재 하며,
그누보드 인스톨후에는 gnu3/data/member/ , session/ , file/ 디렉토리와
gnu3/bbs/dbconfig.php 이 생성됩니다.
다른 보드를 쓰시다가 넘어오시는 초급자 분들을 위해 댓글을 달았다가..
다른분들도 보셨으면 해서 이곳에도 적습니다.
특히 제로보드 이용자분들..
얻어가려고만 하지 마시고 직접 보물찾기하는 심정으로 숨어진 것들을 찾아보세요
숨은 재미들이 많이 있습니다...
모르는것을 하나 둘 알아가는 재미 말이죠.
참고가 되셨으면 하네요.!
추천
1
1
댓글 전체
님 글 읽구, 감이 좀 잡히네욤...감사^^
너무 감사합니다. 저같은 초보에게 너무 유익한 팁이네요...
정말 유용한 내용입니다.
배려에 감사드립니다. ^^*
배려에 감사드립니다. ^^*

멋지네요.....배려와 존중의 의미가 느껴집니다.
늦었지만 복 많이 받으세요.
늦었지만 복 많이 받으세요.
자상한 설명 감사드립니다.
배려를 생각하시는 모습이 멋집니다. 고생하셨습니다.
> 숨은 재미들이 많이 있습니다...
> 모르는것을 하나 둘 알아가는 재미 말이죠.
너무 다급하신(?!) 분들께서는 이 과정을 뛰어 넘는(?!) 경우가 자주 있는 듯 합니다.
정말 아쉬운 부분들입니다.
앞으로도 유용한 내용 많이 부탁드립니다.
> 숨은 재미들이 많이 있습니다...
> 모르는것을 하나 둘 알아가는 재미 말이죠.
너무 다급하신(?!) 분들께서는 이 과정을 뛰어 넘는(?!) 경우가 자주 있는 듯 합니다.
정말 아쉬운 부분들입니다.
앞으로도 유용한 내용 많이 부탁드립니다.
참 좋은 글입니다.
전 *&보드만 사용하다가요 그누보드 알게 된지.. 한달 정도 되엇읍니다. 무진장..깝깝하고. 당황햇었읍니다.
물론.. php지식은 없고 그냥 ㅡ*&보드의 팁랑등을 보고 따라하기 수준이었기 때문이겟죠..
그누보드에 겨우 적응.(아장아장) 하고 있읍니다.
저같은 사람들에게는 참으로 유익한 글 이라고 생각 됩니다. 많은 시간을 단축시켜주는 정보 인것 같읍니다.
전 *&보드만 사용하다가요 그누보드 알게 된지.. 한달 정도 되엇읍니다. 무진장..깝깝하고. 당황햇었읍니다.
물론.. php지식은 없고 그냥 ㅡ*&보드의 팁랑등을 보고 따라하기 수준이었기 때문이겟죠..
그누보드에 겨우 적응.(아장아장) 하고 있읍니다.
저같은 사람들에게는 참으로 유익한 글 이라고 생각 됩니다. 많은 시간을 단축시켜주는 정보 인것 같읍니다.
바보물음 묻던 제가 해결받고 리플답니다... 좋은 글이네요... 그런데 통합검색에 뭐라고 치면 이 글을 빨리 찾아올지 궁금하네요...

좋은 글이네요
좋은글입니다.
페이지구조