Skip to content

게시판 글 목록 스킨

글 목록 스킨은 list.skin.php 파일을 사용한다. 글 목록이 담긴 전역변수 $list 배열을 이용해 목록을 출력할 수 있다.

글 목록을 출력하는 주요 기능을 예시한 코드는 다음과 같다.

html
<table>
    <thead>
        <tr>
            <th>번호</th>
            <th>제목</th>
            <th>작성자</th>
        </tr>
    </thead>

    <tbody>
    <?php foreach($list as $idx => $article) { ?>
        <tr>
            <td><?= $article['num'] ?></dt>
            <td>
                <!-- 카테고리 -->
                <?php if ($is_category) { ?>
                    <a href="<?= $article['ca_name_href'] ?>"><?= $article['ca_name'] ?></a>
                <?php } ?>

                <!-- 제목 -->
                <a href="<?= $article['href'] ?>"><?= $article['subject'] ?></a>

                <!-- 댓글 수 -->
                <?php if (!!$article['wr_comment']) { ?>
                    댓글(<?= number_format((int) $article['wr_comment']) ?>)
                <?php } ?>

                <!-- 추천 수 -->
                <?php if ($is_good && !!$article['wr_good']) { ?>
                    추천(<?= $article['wr_good'] ?>)
                <?php } ?>
            </dt>
            <td><?= $article['name'] ?></dt>
        </tr>
    <?php } ?>
    </tbody>
</table>
for문으로 다루기

그누보드에 포함된 basic 스킨은 아래처럼 for()문을 사용한다. 가독성이 떨어지고 중첩된 반복문에서 실수를 유발할 수 있기 때문에 위 예시처럼 foreach() 반복문을 사용하는 것을 권장한다.

html
<?php for ($i = 0; $i < count($list); $i++) { ?>
    제목: <?= $list[$i]['subject'] ?>
<?php } ?>

글 목록

제목과 링크

subject에는 글 제목, href에는 글 주소가 담겨있다.

html
<!-- 예시: 글 제목에 링크 걸기 -->
<a href="<?= $article['href'] ?>">
    <?= $article['subject'] ?>
</a>

INFO

subject에는 게시판 검색 시 제목에서 검색어 강조를 위한 <b> 태그가 포함되어 있다. 검색 결과를 표시하기 위해 subject를 사용하는 것을 권장한다.

html
<!-- 원본 제목: $article['wr_subject'] -->
강조 표시된 제목

<!-- 검색한 '표시'가 강조된 제목: $article['subject'] -->
강조 <b class="sch_word">표시</b>된 제목

카테고리

html
카테고리 이름: <?= $article['ca_name'] ?>

$is_category(bool) 전역변수로 카테고리 사용 여부를 확인하여 출력

html
<?php if ($is_category) { ?>
    카테고리 이름: <?= $article['ca_name'] ?>
<?php } ?>

ca_name_href 키로 카테고리로 검색하는 링크를 걸 수 있다. 게시판 검색 기능으로 카테고리 명칭으로 검색한 글 목록을 표시한다.

html
<a href="<?= $article['ca_name_href'] ?>">
    <?= $article['ca_name'] ?>
</a>

작성자

name에는 글쓴이의 정보를 보거나 부가 기능을 위한 메뉴를 표시하는 "사이드뷰" 기능을 위해 <span> 태그로 감싼 메뉴가 포함되어 있다. 사이드뷰 태그가 포함되지 않은 원본 이름은 wr_name에 담겨있다.

html
작성자: <?= $article['name'] ?>
작성자: <?= $article['wr_name'] ?>

<!-- 출력 -->
작성자: <span ...>작성자이름</span>
작성자: 작성자이름

작성일시

작성일시는 wr_datetimedatetime, datetime2로 구분되어 날짜 표시 형식을 다르게 표시할 수 있다. datetime2는 작성 당일에는 시:분으로 표시되며, 작성 당일이 지난 글은 월-일로 표시된다.

html
작성일(년-월-일 시-분-초): <?= $article['wr_datetime'] ?>
작성일(년-월-일): <?= $article['datetime'] ?>
작성일(가변): <?= $article['datetime2'] ?>

<!-- 출력 -->
작성일(년-월-일 시-분-초): 2023-12-31 23:59:59
작성일(년-월-일): 2023-12-31
작성일(가변): 12-31 또는 23:59
글 수정일시는 제공하지 않음

그누보드는 글이 수정된 일시를 저장하지 않는다. 글이 수정되었는지 알 수 없다. 그누보드 이슈 #227

조회 수

조회 수는 1천 단위 이상일 때 읽기 쉽게 표시하기 위해 number_format() 함수를 사용하면 좋다.

html
조회수: <?= $article['wr_hit'] ?>
조회수: <?= number_format((float) $article['wr_hit']) ?>

<!-- 출력 -->
조회수: 100010
조회수: 100,010

추천, 비추천

$is_good(bool), $is_nogood(bool)으로 추천, 비추천 기능의 활성화 여부를 확인하고 표시하는 것이 좋다.

html
<?php if ($is_good) { ?>
    추천 수: <?= $article['wr_good'] ?>
<?php } ?>

<?php if ($is_nogood) { ?>
    비추천 수: <?= $article['wr_nogood'] ?>
<?php } ?>

기능이 활성화 되어있고 추천/비추천 수가 있을 때(1 이상)만 표시하려면...

html
<?php if ($is_good && !!$article['wr_good']) { ?>
    추천 수: <?= $article['wr_good'] ?>
<?php } ?>

<?php if ($is_nogood && !!$article['wr_nogood']) { ?>
    비추천 수: <?= $article['wr_nogood'] ?>
<?php } ?>

댓글

html
댓글 수 : <?= $article['wr_comment'] ?>

댓글이 있는지 구분하려면 wr_comment 값을 확인하면 된다.

html
<?php if (!!$article['wr_comment']) { ?>
    댓글 수: <?= $article['wr_comment'] ?>
<?php } ?>

기타


위 예시에서 foreach() 반복문으로 $list를 순회하면서 $article에 담긴 변수를 이용해 글 목록을 출력할 수 있다.

타입설명
namestring글 작성자 이름 (사이드뷰 기능이 포함)
wr_namestring글 작성자 이름 (원본)
datetimestring글 작성일 (년-월-일)
datetime2string글 작성일 (가변. 월-일 또는 시:분)
wr_datetimestring글 작성일시 (년-월-일 시:분:초)
laststring최근 댓글의 작성일 (년-월-일)
last2string최근 댓글의 작성일 (가변. 월-일 또는 시:분)
wr_laststring최근 댓글의 작성일시 (년-월-일 시:분:초)
wr_hitstring조회 수
wr_goodstring추천 수
wr_nogoodstring비추천 수
wr_commentstring댓글 수
subjectstring글 제목 (검색어 강조 표시)
wr_subjectstring글 제목 (원본)
hrefstring글 주소
wr_idstring글의 고유 번호
ca_namestring글이 속한 카테고리 이름
wr_subjectstring글 제목
wr_namestring글 작성자 이름
wr_goodstring추천 수
wr_nogoodstring비추천 수
wr_hitstring조회 수
wr_numstring글 정렬 번호(음수)
wr_replystring답변글의 정렬.
비어있으면 답변글이 아니며, 값이 있다면 답변글이다
wr_parentstring답변글일 때 원글 번호
wr_is_commentstring댓글 여부. 1이면 댓글, 0이면 글(또는 답변글)
wr_commentstring댓글 갯수
wr_comment_replystring댓글의 답변글 여부

INFO

wr_last는 마지막에 작성된 댓글의 작성일시이며, 마지막 댓글이 삭제되면 그 이전에 작성된 댓글의 작성일시로 변경되므로 이 값을 활용할 때 용도에 맞는지 주의해야 한다.

목록 정렬

카테고리 목록

검색

페이징

전역변수타입설명
$total_countstring전체 또는 검색 결과의 게시물 수
카테고리를 선택했거나 검색 시 검색 결과의 게시물 수
$notice_countint표시된 공지사항 수
$total_pagefloat총 페이지 수
$pageint현재 페이지 번호
$from_recordint시작 열의 인덱스(0부터 시작)
$write_pagesstring페이지 이동 네비게이션
현재 페이지를 가리키고 다른 페이지로 이동하는 링크를 담은 HTML
html
게시물 수: <?= number_format((int) $total_count) ?>
공지사항 수: <?= number_format((int) $notice_count) ?>
전체 페이지 수: <?= number_format($total_page) ?>
현재 페이지: <?= number_format((int) $page) ?>
시작 열: <?= number_format((int) $from_record) ?>

$total_count 게시물 수

$total_count 전역변수는 카테고리를 선택했거나 검색 결과를 나타낼 때는 검색 결과의 게시물 수를 나타낸다. 검색 여부에 상관없이 전체 게시물 수를 나타내려면 $board['bo_count_write'] 전역변수를 사용하면 된다.

php
echo $total_count; // 전체 또는 검색 결과의 게시물 수
echo $board['bo_count_write']; // 전체 게시물 수
$total_pagefloat 타입

$total_page전역변수는float타입이다. 소수점 이하를 올림 처리했지만 float 타입으로 유지되므로 필요에 따라 정수로 변환해 사용해야 한다.

php
echo $total_page; // 1234.0
echo (int) $total_page; // 1234
echo number_format((float) $total_page); // 1,234
$from_record 시작 열

$from_record는 시작 열의 인덱스(0부터 시작)이다. 게시물을 10개씩 표시할 때 3페이지의 $from_record는 20이다.

링크

글 쓰기 페이지 링크는 $write_href 전역변수

html
<?php if ($write_href) { ?>
    <a href="<?= $write_href ?>">글 쓰기</a>
<?php } ?>

게시판 설정 링크는 $admin_href 전역변수

html
<?php if ($admin_href) { ?>
    <a href="<?= $admin_href ?>">게시판 설정</a>
<?php } ?>

RSS 링크는 $rss_href 전역변수

html
<?php if ($rss_href) { ?>
    <a href="<?= $rss_href ?>">RSS</a>
<?php } ?>

기타