torry님 사이트구조 응용확장과 switch구문수정에 대해 질문드립니다 > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

torry님 사이트구조 응용확장과 switch구문수정에 대해 질문드립니다 정보

torry님 사이트구조 응용확장과 switch구문수정에 대해 질문드립니다

본문

40대 초보 플록입니다.
페이지 구조에 대한 질문입니다.

이것은 torry님의 사이트 구조 강좌를 응용해서 시작된 것이랍니다.
그누에 링크가 없는 관계로 torry님 사이트를 링크2합니다.

먼저 shop, family, test 세 그룹을 생성하고
각각의 그룹명을 접두어로 하는 보드를 생성 하였습니다.(예: shop_notice, family_album)
브라우저에서 http://dpishop.net/?ca_id=shop 이런식으로 호출해서 쓰고있습니다.
페이지의 레이아웃이나 장식적 요소들을 그룹별로 폴더를 만들어 쓸 수 있는 장점이 있습니다.
응용한다면 다른언어 그룹 페이지를 만들 수 도 있을것 같군요.
아무튼 여기까지는 잘 돌아갑니다.

*확장하고 싶은 부분에 대한 질문입니다.
여기에 각 위치(head, index, tail)별로 임의의 다른 그룹에 속한 파일을 지정해서 불러들이게 확장하고 싶은데 방법이 있는지요?

*switch구문을 수정해야 할 것같은데 40대 초보로서 도저히 접근이 안됩니다.
고수님들의 조언을 부탁드립니다.



head.php 전체내용
=================================================================================
<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
include_once("$g4[path]/head.sub.php");
include_once("$g4[path]/lib/outlogin.lib.php");
include_once("$g4[path]/lib/poll.lib.php");
include_once("$g4[path]/lib/visit.lib.php");
include_once("$g4[path]/lib/connect.lib.php");
include_once("$g4[path]/lib/popular.lib.php");

//print_r2(get_defined_constants());

//include_once("$g4[path]/gnusr/common/_gnusr1.php");

$gnusr = array();
$gnusr[g4]="/home/dpishop"; //그누 절대 경로
$gnusr[abs_root]="/home/dpishop"; //절대 경로
$gnusr[root]=$gnusr[abs_root]."/gnusr"; //gnusr 절대 경로
$gnusr[comm]=$gnusr[root]."/common"; //common 절대 경로

$gnusr[url]="http://dpishop.net/gnusr";//gnusr 경로
$gnusr[cus]=$gnusr[url]."/customer"; //customer 경로
$gnusr[etc]=$gnusr[url]."/etc"; //etc 경로
$gnusr[img]=$gnusr[url]."/images"; //이미지 경로
$gnusr[img_logo]=$gnusr[img]."/logo";//로고 경로
$gnusr[img_bg]=$gnusr[img]."/bg"; //각종 테이블과 배경들
$gnusr[img_btn]=$gnusr[img]."/btn"; //버튼

//switch ($ca_id) {
switch (TRUE) {
case (strstr("shop",$bo_table) || strstr("shop",$gr_id) || strstr("shop",$ca_id)):
$ca_id = "shop";
$gnusr_title = "ㅤㅅㅑㅍ";
break;

case (strstr("family",$bo_table) || strstr("family",$gr_id) || strstr("family",$ca_id)):
$ca_id = "family";
$gnusr_title = "가족";
break;

case (strstr("test",$bo_table) || strstr("test",$gr_id) || strstr("test",$ca_id)):
$ca_id = "test";
$gnusr_title = "빈페이지";
break;

case (strstr("commmon",$bo_table) || strstr("commmon",$gr_id) || strstr("commmon",$ca_id)):
$ca_id = "commmon";
$gnusr_title = "commmon";
break;

default: //기본값 shop
$ca_id = "shop";
$gnusr_title = "ㅤㅅㅑㅍ";
break;
}

$table_width = '990';

include_once("$gnusr[root]/{$ca_id}/top.php"); /*Top 파일 인클루드*/
include_once("$gnusr[root]/{$ca_id}/nav.php"); /*Nav 파일 인클루드*/
include_once("$gnusr[comm]/_nav_top.php"); /*현재위치*/
?>

index.php 전체내용
=================================================================================
<?
// 상대 경로
$g4_path = ".";
include_once("$g4_path/common.php");
include_once("$g4[path]/lib/latest.lib.php");

$g4[title] = "";
include_once("$g4[path]/head.php");

include_once("$gnusr[root]/{$ca_id}/body.php"); /*Body 파일 인클루드*/
include_once("$gnusr[root]/{$ca_id}/banner.php"); /*Banner 파일 인클루드*/

include_once("$g4[path]/tail.php");
?>

tail.php 전체내용
=================================================================================
<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가

include_once("$gnusr[root]/{$ca_id}/bottom.php"); /*Bottom 파일 인클루드*/

include_once("$g4[path]/tail.sub.php");
?>

읽어주셔서 감사합니다.
*아침부터 가족들에게 큰소리 내고 영 마음이 좋지않습니다.
행복한 하루 되십시오.

댓글 전체

디데이님 소스를 적용해 보았습니다.

디데이님의 방법 즉 index중심으로 설정파일의 둘 경우 index.php로 접근했을때는 정상이나
게시판을 불려올경우 상,하단 파일의 설정에 문제가 있습니다.
다만 switch문 자리에 디데이님의 모드판별부분의 if문만 떼어 적용한 경우 잘 돌아갑니다.
그래서 if문 부분만을 헤더에 인클루드 하는 방법으로 테스트해본 것이구요.

제가 원했던 헤드, 인덱스, 테일 부분에 타그룹의 파일을 지정해서 불러오게 하는
-경우에 따라 a그룹의 헤더, b그룹의 인덱스, c그룹의 테일 또는 a그룹의 헤더, a그룹의 인덱스, c그룹의 테일등-
것은 모드판별부분의 세분화가 필요할것 같습니다.

그룹에 속하지 않은 공용폴더를 두고 일반적인 경우에 그것을 사용하도록 하고
경우에 따라 타그룹에서 원하는 파일을 가져다 쓸수 있다면 좋겠네요.

'욕구'만 있고 '능력'은 없으니 그저 죄송할따름입니다.
힌트라도 주신다면 고맙겠습니다.
prosper님 답변 고맙습니다.
링크해주신 관련페이지도 보았으나 초초보인 저로서는 잘 이해가 되질 않습니다.
질문에서 밝혔듯이 처음에 torry님의 사이트 구조에 대한 팁을 보고 삽을 들고 나섰으니 무우라도 파내어야겠다는 삽질정신으로 여러 고수님을 괴롭히는점 정말 죄송합니다.
양해해 주시고 온정을 베풀어주시길 기대합니다.

torry님의 경우 디렉토리 구조가 다음과 같습니다.
루트에 pages 폴더를 두고 하위에
top, nav, body, banner, bottom 폴더가 있으며,
위 네개의 폴더에 각각 common.php, papa.php, torry.php, suzy.php 문서가 위치합니다.
즉 top, nav, body, banner, bottom 폴더에 가각의 변수명.php  파일이 있는것입니다.
그리고 <? include "$my[abs_root]/pages/top/{$doc}.php";?> 인클루드....

=========================================================================
*여기서 문서이름이 변수명으로만 제약되어 문서특성을 나타낼 수 없으므로 여러문서를 띄우고 작업할 경우 어려움을 겪게되었습니다.
디렉토리 구조를 보다 직관적 내지는 알기쉽게(?) 구성하고자
'폴더를 그룹명(변수명)으로 하고 하위에  top, nav, body, banner, bottom.php 파일을 두고
인클루드 <?include_once("$gnusr[root]/{$ca_id}/top.php");?> 변경했는데 이렇게 해놓고 보니 초보의 단순한 생각보다 심각한 어려움이 있다는 것을 깨닫게된 것입니다.
=========================================================================

prosper님께서 제시한 다중 스위치문에 대해 몇군데 기웃거려 보았으나 쉽지않네요.

참고로 아래는 torry님의 원본 소스 입니다.


<?
///5월 17일 수정했습니다. prg_match() 대신 strstr()함수를 써서, 더 간단히 했습니다.
// 개인 변수 분기: switch문

switch (TRUE) {
case (strstr("common",$bo_table) || strstr("common",$gr_id) || strstr("common",$doc)): //common 변수
$doc=$top=$nav=$body=$banner=$bottom="common";
$my_title = "현과 수지네 가족 공간";
$border_style="border-collapse: collapse;
border-left: 1px solid #0378B4;
border-right: 1px solid #0378B4;
border-top-width: 0;
border-bottom-width: 0"; // 테이블 테두리
break;

case (strstr("papa",$bo_table) || strstr("papa",$gr_id) || strstr("papa",$doc))://papa 변수
$doc=$nav = $body = "papa";
$top = $banner = $bottom = "common";
$my_title = "아빠의 인터넷";
$border_style="border-collapse: collapse;
border-left: 1px solid #603e3e;
border-right: 1px solid #603e3e;
border-top-width: 0;
border-bottom-width: 0"; // 테이블 테두리
break;

case (strstr("torry",$bo_table) || strstr("torry",$gr_id) || strstr("torry",$doc)): //torry 변수
$doc=$nav = $body = "torry";
$top = $banner = $bottom = "common";
$my_title = "현의 인터넷";
$border_style="border-collapse: collapse;
border-left: 1px solid #0219c7;
border-right: 1px solid #0219c7;
border-top-width: 0;
border-bottom-width: 0"; // 테이블 테두리
break;

case (strstr("suzy",$bo_table) || strstr("suzy",$gr_id) || strstr("suzy",$doc)): //suzy 변수
$doc=$nav = $body = "suzy";
$top = $banner = $bottom = "common";
$my_title = "수지의 인터넷";
$border_style="border-collapse: collapse;
border-left: 1px solid #c70202;
border-right: 1px solid #c70202;
border-top-width: 0;
border-bottom-width: 0"; // 테이블 테두리
break;

default: //기본 값 common
$doc=$top=$nav=$body=$banner=$bottom="common";
$my_title = "현과 수지네 가족 공간";
$border_style="border-collapse: collapse;
border-left: 1px solid #0378B4;
border-right: 1px solid #0378B4;
border-top-width: 0;
border-bottom-width: 0"; // 테이블 테두리
break;
}

$red_bullet="<img src='/my/images/bullets/circle03_orange.gif' width='6' height='10' align='middle'> &nbsp;";
$blue_bullet="<img src='/my/images/bullets/icon_nemo.gif' align='middle'> &nbsp;";

?>

읽어주셔서 고맙습니다!!
순서가 중요하지않나 싶습니다... 우선 가장 먼저 어떤 파일이 로드 되는지를 확인하시기 바랍니다...

index.php 가 가장 먼저 로드 되죠..??

그렇다면.. head.php에 들어간 내용들이 head에 들어가야 할것이 아니라, index.php 에 들어가줘야 합니다..

그리고 index.php 에서 인클루드하기 전에 현제 페이지를 판별해서 각 페이지의 head와 tail을 불러 들이면 됩니다..

head.php 파일의 경우...
구문에 오류가 있지 않나 싶은데요.. 일단 중간부분에..
switch (TRUE) { << 이부분을 보면.. TRUE 란 함수가 있나요..? 현제 페이지에는 TRUE란 함수가 없네요.. 그럼..일단 오류가 나겠지요..

그리고 index.php 파일의 구조를 다음과 같이 해주시면 원하시는 데로 하실수 있을것 같습니다.
<?
// 상대 경로
$g4_path = ".";
include_once("$g4_path/common.php");
include_once("$g4[path]/lib/latest.lib.php");

/* 여기부터 추가.... */
// 모드 판별
if (eregi('shop', $bo_table) || eregi('shop', $gr_id) || eregi('shop', $ca_id)) $page_mode = 'shop';
else if (eregi('family', $bo_table) || eregi('family', $gr_id) || eregi('family', $ca_id)) $page_mode = 'family';
else if (eregi('test', $bo_table) || eregi('test', $gr_id) || eregi('test', $ca_id)) $page_mode = 'test';
else if (eregi('commmon', $bo_table) || eregi('commmon', $gr_id) || eregi('commmon', $ca_id)) $page_mode = 'commmon';
else $page_mode = 'shop'; //기본값이 shop 이므로..

$ca_id = $page_mode;

$g4[title] = "";
include_once("$gnusr[root]/".$ca_id."/head.php");

include_once("$gnusr[root]/".$ca_id."/body.php"); /*Body 파일 인클루드*/
include_once("$gnusr[root]/".$ca_id."/banner.php"); /*Banner 파일 인클루드*/

include_once("$gnusr[root]/".$ca_id."/tail.php");
?>

이렇게 해주시고 각각의 디렉토리에 head.php, body.php, tail.php를 만들어 사용하시면 될것 같습니다.
그리고 각각의 헤드 파일에 $gnusr_title = "빈페이지"; 요부분을 추가 해주시면 될듯 하구요..

case (eregi('family', $bo_table) || eregi('family', $gr_id) || eregi('family', $ca_id)):
요 구문이 허용되는지 잘 몰라서 일단은 if문으로 만들었습니다..
디데이님 친절한 답변 감사드립니다.
적용해보고 정식 보고 드리도록 하겠습니다.

에러를 염려하신 switch (TRUE) 부분은 switch ($ca_id) 했다가 작동에 문가가 있어서 switch (TRUE) 하니까 작동하더군요.
어제 모사이트에서 검색하보니 case값을 비교하는 순서(a-->c, a-->b)와 관계된 설명을 보긴했습니다만 정확치 않습니다.
결국 switch구문은 위의 상태로는 구문이 맞지않는 것이라고 합니다.
순전히 초보의 상상으로 예측컨데 http://dpishop.net/?ca_id=shop 식의 호출시 값이 정해지는 것이 아닌가 싶습니다.
위 질문내용의 소스는 경로설정 부분에서 $gnusr = array(); 부분 switch문 까지 동일한 내용의 환경파일을 만들어
include_once("$g4[path]/gnusr/common/_gnusr.php"); 식으로 인클루드 해준것외에는 현재 제가 테스트하고 있는곳의 소스 그대로 입니다.
실제링크(http://dpishop.net/?ca_id=shop)에  family 나 test 를 대입해봐도 모두 잘 작동됩니다.
현재로 보면 구문은 맞지 않으나 정상적으로 돌아간다고 해야 할까요? 아무튼 의문입니다.

디데이님의 소스를 적용해보고 다시한번 정리해보겠습니다.
거듭 감사드립니다!!
//switch (TRUE) { << 이부분을 보면.. TRUE 란 함수가 있나요..? 현제 페이지에는 TRUE란 함수가 없네요..
//그럼..일단 오류가 나겠지요..

True 는  bool  대수의 conts절로 사용할 수 있는 상수입니다.

언어마다 조금식 틀리지만. 기본적으로 True, False는 공통적이며,
php에서는 True = 1 , False = 0(또는 1을뺀 전부) 으로 되어있습니다.

오류가 나는지는 직접 코딩해보시면 눈으로 확인 할 수 있음에도 생각이 앞서서 글을적으신듯 생각됩니다.

답변은 정답이 될순 없지만  오답으로 인해 고생하시는분들도 생길수 있습니다.
그래서 저는 답변을 달때 항상 신중하게 생각해서 달지만.. 계속 수정하게 되더군요.



제가 답변단것으로 플록님께서 적용하신거라서 제가 이의 제기를 하게 됬습니다.

또한 참고 문서도 링크 걸어 두었는데 보시지 못한듯 싶어 다시 링크겁니다.

Reference URL : http://kr.php.net/manual/kr/control-structures.switch.php


프로그래밍에서 정석이란 없습니다. 스타일만 있을뿐..


테스트.. URL입니다.
http://eznara.info/switch.php

switch.php  source입니다.
/////////////////////////////////////////////////////////////////////////////////////////////
<?
 $v_BAL = 60;
 $b = 43;
 $c = 1;
switch (TRUE){
  case ($v_BAL <= $b):   
    echo $b;
  break;
  case ($v_BAL <= 10 AND $v_BAL >= 1):   
    echo $v_BAL;
  break; 
  default:                //default
    echo $c;
  break;
}
?>
///////////////////////////////////////////////////////////////////////////////////////////

ps. 댓글 수정기능이 있으니 정말 좋군요..
전체 66,554 |RSS
그누4 질문답변 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT