본문 바로가기
재밌는 IT 개발/그누보드 테마 제작기(記)

그누보드 테마 제작 19 - 게시판 그룹 페이지 개발

by 만수킴 2020. 7. 6.

드디어 게시판 작업에 진입하였네요.
짝짝짝~ (자축의 박수~)

게시판, 그 중에서도 오늘은 게시판 그룹 페이지를 만들어봅니다.
먼저 그누 기본 테마 화면을 살펴보고,
현재 제작중인 테마의 모습을 살펴볼게요.

그누보드 기본 테마의 게시판 그룹 페이지

아주 심플하고 간결한 UI네요~
그리고 현재 작업 전이라 이상한 모습의 저의 게시판 그룹 페이지!

작업 전 이상하게 나오는 게시판 그룹 페이지

저 망가진 화면을 예쁜 화면으로 바꾸는게 오늘의 일인거죠~
웹에서 호출되는 페이지인 "/bbs/group.php" 분석부터 들어가봅니다.

5라인에서 바로 테마로 빠져버리네요~

제작중인 테마 페이지의 group.php를 다시 살펴보러 갑니다.
페이지의 소스는 아주 심플합니다.
그냥 그룹에 속한 게시판을 모두 검색하여,
latest 함수를 호출하여 화면에 출력하는 구조입니다.
메인 페이지 작업과 거의 유사한 구조에요. 즉 한 번 해본 일이라는거죠 ^^;

그룹 게시판의 글을 조회한 후 latest함수를 호출하고 있다.

저 위에 빨간 네모안의 latest 함수때문에
예전에는 고생한 기억이 좀 있었습니다.
생각보다 하는 일이 많은 함수더라구요.
(오죽하면 latest.lib.php 파일 안에 latest() 함수가 하나만 있겠어요~
능력이 되니 독방 차지하고 있는거겠죠~)

latest() 함수가 하는 일 (순서대로)
1. SKIN 디렉토리 알아내기
2. 캐싱 사용 여부 확인하여 DB 쿼리 조회 여부 판단
3. 캐싱 존재 여부 확인하여 캐싱과 쿼리 중 판단
4. 그룹에 속한 게시판 조회
5. 각 게시판 별 출력할 리스트 조회
6. 리스트의 각 항목들을 출력하기 좋게 변경
7. 캐싱되지 않은 게시판이라면 캐싱 저장(캐싱 사용 설정일때)
8. 1에서 결정된 SKIN 디렉토리 호출

 

이렇게 많은 일을 하는 함수인데, 
걍 DB 조회해서 편집하는 넘이겠지라고 과소평가했던거죠~
이제는 알았으니, 전처럼 고생하지 않을겁니다. ^^

 

우선 latest() 함수가 판단한 Skin 경로가 제작중인 테마와 같은지 확인을 합니다.
이 확인 과정을 안하면, 엉뚱한 파일을 고치면서
웹페이지에 반영이 안된다면서 우울해질 수 있습니다.

latest() 함수가 알아내 Skin의 경로를 확인함.

알아냈으니, 해당 스킨 폴더로 이동하여 다시 살펴보겠습니다.
/theme/mt703/skin/latest/basic/latest.skin.php

지난 메인 작업때 이미 Metronic Admin의 형태로 작업이 완료된 상태였다.

살펴보니, 지난 메인 작업때 이미 수정을 해놓은 파일입니다.
그렇다면, 테마의 group.php 파일의 상하단을 감싸는 태그가 문제겠네요.
index.php와 비교하면서 변경하면 바로 끝날 듯 합니다.

잉... 정말 끝났네요...
수정된 테마의 group.php 소스부터 보시겠습니다.

<?php
// [TANK] bbs/group.php 파일과 동일합니다. 그룹 최신글을 노출할 때 사용합니다.
// [TANK] 테마에 포함되어 있으면 bbs/group.php 대신 사용됩니다
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가

if (G5_IS_MOBILE) {
    include_once(G5_THEME_MOBILE_PATH.'/group.php');
    return;
}

if(!$is_admin && $group['gr_device'] == 'mobile')
    alert($group['gr_subject'].' 그룹은 모바일에서만 접근할 수 있습니다.');

$g5['title'] = $group['gr_subject'];
include_once(G5_THEME_PATH.'/head.php');
include_once(G5_LIB_PATH.'/latest.lib.php');
?>

<?php include G5_THEME_PARTIALS_PATH ."/_subheader/subheader-v1.php"; ?>
<!--begin::Entry-->

<div class="d-flex flex-column-fluid">
    <!--begin::Container-->
    <div class=" container ">


        <!--begin::Row-->
        <div class="row" style="margin-top:20px;">

<!-- 메인화면 최신글 시작 -->
<?php
//  최신글
$sql = " select bo_table, bo_subject
            from {$g5['board_table']}
            where gr_id = '{$gr_id}'
              and bo_list_level <= '{$member['mb_level']}'
              and bo_device <> 'mobile' ";
if(!$is_admin)
    $sql .= " and bo_use_cert = '' ";
$sql .= " order by bo_order ";
$result = sql_query($sql);
for ($i=0; $row=sql_fetch_array($result); $i++) {
?>
    <?php
    // 이 함수가 바로 최신글을 추출하는 역할을 합니다.
    // 사용방법 : latest(스킨, 게시판아이디, 출력라인, 글자수);
    echo latest('theme/basic', $row['bo_table'], 6, 25);
    ?>
<?php
}
?>
<!-- 메인화면 최신글 끝 -->
        </div>
        <!--end::Row-->



    </div>
    <!--end::Container-->
</div>
<!--end::Entry-->

<?php
include_once(G5_THEME_PATH.'/tail.php');
?>

완료된 화면의 모습입니다.

게시판 그룹 페이지가 완료된 모습

 

그냥 작업하면서 따라적다가보니 끝난 느낌이네요~
이제 본격적인 게시판 작업으로 진입하겠네요~
게시판 작업도 그룹 페이지처럼 술술 지나가면 좋겠다고 바래봅니다.

댓글