공지가 있을때까지 구매요청/제휴/견적요청을 받지 않습니다.

특강. [그누보드를 알자4] 그누보드 스킨(board-list.skin.php) > PHP 강좌

본문 바로가기
사이트 내 전체검색

HOT - 펜션예약솔루션 - 그누보드5

HOT - 중고차매매솔루션 - 그누보드5

HOT - 중고차매매솔루션 - 그누보드4

HOT - 펜션예약솔루션 - 그누보드4

NEW - 인터넷뉴스 솔루션 - 그누보드5

계좌정보

  • 국민 : 028201-01-019932
  • 대구 : 068-07-021683-8
  •  
  • 예금주 : 림소프트/김상림
  •  

파트너쉽

PHP 강좌

특강. [그누보드를 알자4] 그누보드 스킨(board-list.skin.php)

페이지 정보

작성자 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일12-04-07 15:30 조회7,912회 댓글2건

본문

<?
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가 

// 선택옵션으로 인해 셀합치기가 가변적으로 변함
$colspan = 5;

//if ($is_category) $colspan++;
if ($is_checkbox) $colspan++;
if ($is_good) $colspan++;
if ($is_nogood) $colspan++;

// 제목이 두줄로 표시되는 경우 이 코드를 사용해 보세요.
// <nobr style='display:block; overflow:hidden; width:000px;'>제목</nobr>
?>



위는 list.skin.php 시작할때 소스입니다. 간단하지만 초보 분들을 위해 잠깐 살펴보겠습니다.

if (!defined("_GNUBOARD_")) exit;

인클루드 되는 파일에는 상단에 별도로 _common.php 파일을 인클루드 하지 않아도 됩니다. 그렇다고 그대로 나누면 외부에서 그 파일로 접근하면 웹페이지 상에 그대로 노출이 되기때문에 위와 같이 처리를 해 두면 하얀 백지가 나타날겁니다.

_GNUBOARD_ 상수로 define 되어 내려오기때문에 만약 이 상수값이 거짓이면 exit; 이하로 소스코드실행을 멈춰라는 의미입니다.

그리고 $colspan 은 html 에서 td 에 들어가는 속성입니다. html은 table 에서 tr td colspan rowspan 만 알면 반졸업한거나 마찬가집니다.

그래서, colspan rowspan 등 html에서 꼭 알아둬야 할 부분입니다.

그런 의미로 사용될 초기값으로 $colspan =5 로 두고, $is_category 가 값을 가지면 $colspan++, $colspan 값에 1을 더하라는 의미입니다. 셀을 하나 더 늘린다는 뜻이지요.

$colspan=$colspan+1;


여기서 $colspan++ 과 ++$colspan은 차이가 있습니다.

예제
$a=1;

$b=$a++;

echo $a."<br />";
echo $b."<br />";


$c=1;

$d=++$c;

echo $c."<br />";
echo $d."<br />";



결과는, 순서대로

2
1
2
2

많지는 않아도 꼭 다르게 쓰일 일이 있습니다. 위 부분들을 잘 이해해두시면 나중에 써먹을 것들이기때문에 중요합니다.

그리고 내려가면 css 지나 table 이 나오는데 변수 찍고 조건문등이 나오는데 쉽게 이해하실 거 같아 패스하겠습니다.


그리고 파일 중간쯤 다가보면 가장 중요한 부분은 for 문이 나옵니다. 글을 반복해서 보여주는 부분이겠죠?

<? 
    for ($i=0; $i<count($list); $i++) { 
        $bg = $i%2 ? 0 : 1;
    ?>

    <tr class="bg<?=$bg?>"> 
        <td class="num">
            <? 
            if ($list[$i][is_notice]) // 공지사항 
                echo "<b>공지</b>";
            else if ($wr_id == $list[$i][wr_id]) // 현재위치
                echo "<span class='current'>{$list[$i][num]}</span>";
            else
                echo $list[$i][num];
            ?>
        </td>
        <? if ($is_checkbox) { ?><td class="checkbox"><input type=checkbox name=chk_wr_id[] value="<?=$list[$i][wr_id]?>"></td><? } ?>
        <td class="subject">
            <? 
            echo $nobr_begin;
            echo $list[$i][reply];
            echo $list[$i][icon_reply];
            if ($is_category && $list[$i][ca_name]) { 
                echo "<span class=small><font color=gray>[<a href='{$list[$i][ca_name_href]}'>{$list[$i][ca_name]}</a>]</font></span> ";
            }

            if ($list[$i][is_notice])
                echo "<a href='{$list[$i][href]}'><span class='notice'>{$list[$i][subject]}</span></a>";
            else
                echo "<a href='{$list[$i][href]}'>{$list[$i][subject]}</a>";

            if ($list[$i][comment_cnt]) 
                echo " <a href=\"{$list[$i][comment_href]}\"><span class='comment'>{$list[$i][comment_cnt]}</span></a>";

            // if ($list[$i]['link']['count']) { echo "[{$list[$i]['link']['count']}]"; }
            // if ($list[$i]['file']['count']) { echo "<{$list[$i]['file']['count']}>"; }

            echo " " . $list[$i][icon_new];
            echo " " . $list[$i][icon_file];
            echo " " . $list[$i][icon_link];
            echo " " . $list[$i][icon_hot];
            echo " " . $list[$i][icon_secret];
            echo $nobr_end;
            ?>
        </td>
        <td class="name"><?=$list[$i][name]?></td>
        <td class="datetime"><?=$list[$i][datetime2]?></td>
        <td class="hit"><?=$list[$i][wr_hit]?></td>
        <? if ($is_good) { ?><td class="good"><?=$list[$i][wr_good]?></td><? } ?>
        <? if ($is_nogood) { ?><td class="nogood"><?=$list[$i][wr_nogood]?></td><? } ?>
    </tr>
    <? } // end for ?>

    <? if (count($list) == 0) { echo "<tr><td colspan='$colspan' height=100 align=center>게시물이 없습니다.</td></tr>"; } ?>



$list 는, 글들을 담고있는 배열변수입니다. count($list) 그걸 배열수 만큼 loop 하겠다는 뜻입니다.

이 변수가 넘어오는 부분은 bbs/list.php 파일일겁니다. 근데 여기서도 함수로 되어있어 lib/common.lib.php 파일에서 get_list() 함수를 참조하시면 될겁니다. 어떻게 해서 배열에 담겨져 넘어오는지 되어있습니다.

저는 학교다닐때 자료구조시간에 졸았지만, 위 처럼 query 문 가져온 걸 다시 배열에 담아 보여주는게 맞다고 하더군요.
왜일까요? 저도 궁금합니다.

하지만, 전 간단히 이렇게도 사용합니다.

$result=sql_query("select name from table ..........");
for($i=0;$list=sql_fetch_array($result);$i++){
	$name=$list[name];
	..
		...
}


즉, 스킨의 for문은 아래와 같이 해도 된다는 뜻입니다.


$result=sql_query("select * from ".$g4[write_prefix].$bo_table." order by .... ");
for($i=0;$list=sql_fetch_array($result);$i++){
	.......
}


간단하죠?


사실 스킨 list 파일에서 이부분은 상당히 중요한 부분입니다. 아니, 아주 많이 사용되는 것이기때문에 알아두어야 하죠.
예를 들면, 최근게시물로 글을 5개만 해서 조회수 많은 것만 불러올려면 이렇게 해주면 됩니다.

$result=sql_query("select * from ".$g4[write_prefix].$bo_table." order by wr_hit desc" );
for($i=0;$list=sql_fetch_array($result);$i++){
	echo "$list[wr_subject] <br />";
}


번호도 붙이고 회원 정보도 불러오면 좋겠죠?


$result=sql_query("select * from ".$g4[write_prefix].$bo_table." order by wr_hit desc" );
for($i=0;$list=sql_fetch_array($result);$i++){

	$mb=sql_fetch("select mb_name from $g4[member_table] where mb_id='$list[mb_id]'");//참고키로 불러옴
	echo ($i+1)." $list[wr_subject] by $mb[mb_name] <br />";
}


한 테이블에서 다른 테이블로 엮어져 있는 키값을 보통 참조키라 부릅니다. 게시판이라면 상식적으로 글작성할때 회원테이블이 따로 있으면 당연히 회원의 고유키값을 같이 저장해야 나중에 그 키값으로 위와같이 정보를 불러오겠죠?
그래서 이런경우 키값은 참조할 키값과 같게 주는게 좋습니다. mb_id 처럼요. 게시판의 필드들은 wr_ 로 시작합니다.
wr_mb_id 이러면 이상하죠? 그냥 요정도로 이해해두시면 도움이 되실겁니다.

그리고 물론, 위 소스와 별개로 그누보드에 최근게시물 함수가 있고 그걸로 skin 을 통해 노출시켜주기 때문에 일부러 대신하여 위처럼 사용할 필요는 없습니다. 필요해서 테이블을 하나 만들었다면 위와 같이 원하는 위치에 바로 써주면 되는 경우등에 해당하는 이야기입니다.

다시 list.skin.php 파일로 돌아와서..

$list 변수는 배열이 2차 3차 들어가있습니다.

$list[$i][wr_id] 을 예를 들면 첫번째 값인

$list[0][wr_id] 가 첫글의 글번호입니다. $list[1][wr_id],... 각 row 마다 get_list() 함수에 정의된대로 글번호, 제목,내용,등등이 넘어오고 그걸 게시판형식으로 리스팅 시켜놓은 것이라 이해하시면 됩니다.

계속 내려가면 검색폼과 자바스크립트 부분이 나옵니다만, 여기정도까지만 잘 이해를 하셔도 어느정도 스킨을 만진다거나 원하는 위치에 스킨사용없이 최근게시물을 직접 불러들인다거나 가능하겠습니다.

워낙에 해야 할일들이 줄을 서있어.. 자주 못하고 이번강좌 늦게 올린점 죄송합니다.

도움이 되셨길 바랍니다.

그럼 담주에 뵙지요^^

댓글목록

INBEST님의 댓글

INBEST 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물

것멋에 흔들리지 않고 겸손하게 뚜벅뚜벅 정상을 향하는 림스님,

뭐 하나 똑떨어지게 하는게 없이 겉멋만 든 나로서는 챙피와 반성 !!
좋은 사부를 맞났는데 열심히 해야 겠다는 !!

이번 너무 알찬 강좌를 몇번이고  되새김질 하고 있습니다.

전번에, 자랑질 하라고 ...?  쑥스럽지만 아래 사이트,
익스7, 8, 9 에서 테스트 완료, 다른 브라우져에서는 ...??
http://in-best.com/bbs/board.php?bo_table=greetings

혹, 네이트온 하시면 이-메일로 알려 주시지요 ??

투표하시고... 좋은 휴식을 보내시길....

rimsoft님의 댓글

rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물

과찬의 말씀입니다^^

저는 제가 올리는 글에 더도 덜도 말고 딱 참고용으로만 활용됐으면 하는데,
그래도 도움이 되시는지 다행이라 생각이 듭니다.

사이트는.. 잘만드셨네요~ 크롬인데 문제없이 잘 보이구요.
보니,jquery 비쥬얼을 좋아하시는거 같은데,  전 그쪽으로는 무관심한부분도 있구요, 약한 부분이기도 합니다 ㅠㅠ
사이트는 산뜻한게 좋은데요?

그리고, 예전에 일적으로 메신져 사용은 해봤습니다만,
이후로 개인적으로 메신져로 이야기하는걸 좋아하지 않아 메신져는 사용하지 않습니다.

좋은 날 되세요~

Total 18건 1 페이지
PHP 강좌 목록
번호 제목 글쓴이 날짜 조회
공지 강좌 들어가기전에.. 댓글6 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 02-11 3188
17 php 초급에서 반드시 짜 보아야 할 것들 댓글1 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 07-09 3703
16 알고리즘과 경우의 수 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 06-02 3403
15 그누보드 게시판 테이블 그리고 댓글 댓글2 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 05-02 6862
14 웹표준? 댓글2 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-13 2962
열람중 특강. [그누보드를 알자4] 그누보드 스킨(board-list.skin.php) 댓글2 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 04-07 7913
12 특강. [그누보드를 알자3] 그누보드 스킨(board-write.skin.php) 댓글2 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 03-21 24929
11 특강. [그누보드를 알자2] 그누보드 스킨 댓글3 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 03-14 8679
10 특강. [그누보드를 알자1] 그누보드 루트파일들 댓글3 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 03-08 7591
9 7강. 썸네일 댓글5 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 03-07 3378
8 6강. 중간 마무리 댓글2 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 03-03 2357
7 5강. html에서 form 개념과 php, mysql 연관성 댓글3 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 02-27 4579
6 4강. [문법] 반복문 for, while 댓글7 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 02-25 3317
5 [그누보드관련] 쉬는 타임 댓글3 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 02-21 3416
4 3강. [문법] 조건문 if, else, elseif, switch 인기글 rimsoft 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 02-18 19447
게시물 검색

접속자집계

오늘
53
어제
130
최대
425
전체
364,727
그누보드5

림소프트 / 515-08-36933 / 제2014-경북경산-00079 / 양명주 / ifnelse@gmail.com
© Copyright rimsoft.co.kr . All Rights Reserved.

댓글이 달렸습니다.

모바일 버전으로 보기