본문으로 바로가기

그누보드5 - index 파일 분석

category 그누보드 2018.12.01 19:54

파일 분석은 파서의 흐름, 즉 코드가 실행되는 순서를 기준으로 작성됩니다. 그누보드5의 흐름을 이해하는데 도움이 되길 바랍니다.

index.php 개요

index.php는 그누보드5로 제작된 사이트에서 HOME 역할을 하는 가장 처음 접하는 페이지이다. 테마 기능이 추가되면서 index.php는 theme 디렉토리에도 존재하게 되었으며, 루트의 index.php 파일이 테마의 유무에 따라 테마의 index.php를 포함(include)시킨다.

포함 파일

  • _common.php
  • 테마 index.php
  • 모바일용 index.php
  • head.php
  • tail.php

_common.php 포함

_common.php 파일은 상대 경로를 이용하여 루트에 있는 common.php를 포함시킨다. 상대 경로로 포함하기 때문에 그누보드5 곳곳에 존재하는 _common.php에서 common.php를 포함시키는 경로는 서로 다를 수 있다.

include_once('./_common.php');

common.php는 공통으로 사용하는 그누보드의 변수, 함수, 쿠키/세션등을 정의하고 설정파일들(config.php, theme.config.php)을 포함하기때문에 반드시 각각의 파일에서 포함되어야 한다.

PHP : include_once('파일경로')

일반적인 문서 포함방식으로 매번 재실행되는 include 와 달리 한번만 파일을 포함한다. 이는 중복 실행시 발생하는 Warning 오류를 방지할 수 있다.

index 페이지 설정

현재 페이지가 index로 활용될 것이기에 이를 상수로 정의한다. _index_ 상수를 통해 index 페이지에서만 구현하는 기능등을 설정할 수 있는 분기의 기준점으로 삼을 수 있다.

define('_INDEX_', true);

PHP : define('상수명', '값')

상수는 한번 값을 대입하면 변경할 수 없으며, 상수명은 대문자 알파벳으로 만드는 것이 관례이고, 띄어쓰기는 밑줄(언더스코어)문자인 "_"를 사용한다.

개별 페이지 접근 불가

_GNUBOARD_ 상수는 config.php:11에 정의되어 있으며, 이 상수가 정의되어 있지 않다면 즉, 개별 페이지에 접근하면 바로 종료된다.

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

PHP : defined('찾을 상수명')

찾을 상수명에 입력된 값과 같은 상수가 정의되어 있는지 검사한다. 있다면 true 없다면 false를 반환한다.

_GNUBOARD_ 상수 정의 보기

테마의 index.php 포함

G5_THEME_PATH 상수는 common.php:471에 정의되어 있으며, 테마 경로를 이용해 테마의 index.php를 포함시키고 return 에 의해 종료된다. 테마 사용자는 이로써 테마를 불러온다.

if(defined('G5_THEME_PATH')) {
    require_once(G5_THEME_PATH.'/index.php');
    return;
}

PHP : require_once('파일경로')

require 는 실패시에 치명적인 E_ERROR 등급 오류가 발생한다는 점을 제외하면, include와 동일하다. 즉, include가 경고(E_WARNING)만 발생시키고 스크립트는 계속 진행되는 것과 달리, 스크립트가 중단된다. require_once 는 PHP 파일을 이미 포함하였는지 확인하여 다시 include(require)하지 않는 점을 제외하면, require와 동일하다.

PHP : return 의 사용

return 은 함수 안에서 사용되면 함수 실행을 종료시키고, 그 함수를 호출했던 지점으로 돌아가서 계속 실행한다. 함수 밖에서 실행되면 현재 파일을 포함(include)했던 파일로 돌아가서 계속 실행한다. 함수 밖인데 포함한 것도 없으면 그냥 종료된다. 즉 exit와 동일한 효과를 낸다.

G5_THEME_PATH 상수 설정 보기

모바일용 index.php 포함

G5_IS_MOBILE 상수를 이용하여 접속기기가 모바일이라면 모바일용 index.php를 포함시키고, return 에 의해 종료된다.

if (G5_IS_MOBILE) {
    include_once(G5_MOBILE_PATH.'/index.php');
    return;
}

G5_IS_MOBILE 상수 설정 보기

head.php 포함

사이트의 header 영역을 구성하는 head.php 파일을 포함한다.

include_once(G5_PATH.'/head.php');

G5_PATH 상수 설정 보기

최신글 불러오기

그누보드의 기본 index.php 파일은 모든 게시판의 최신 게시물을 불러온다.

콘텐츠 블록의 제목

일반적으로 구조적 의미를 더하기 위해 각각의 콘텐츠마다 제목(heading)을 붙여 이후 시작되는 콘텐츠를 알리곤 한다. 그누보드에서도 마찬가지이며, 굳이 시각적으로 알리지 않아도 되는 요소에는 .sound_only 를 사용한다.

<h2 class="sound_only">최신글</h2>

기본적으로 그누보드의 스타일시트는 css/default.csscss/mobile.css 이며, 사용기기 설정에 따라 알맞은 스타일시트가 적용된다.

.msg_sound_only, 
.sound_only {
  display: inline-block !important;
  position: absolute; 
  top: 0;
  left: 0;
  margin: 0 !important;
  padding: 0 !important;
  font-size: 0;
  line-height: 0;
  border: 0 !important;
  overflow: hidden !important
}

그누보드5에서 사용되는 .sound_only 는 시각적으로만 숨길뿐 스크린리더와 같은 음성 장치로 접근시에는 이를 읽어주게 된다. 다만 그누보드5에 적용한 스타일시트 코드가 구형 안드로이드 기기에서 완전히 숨겨지지 못하고 티끌같은 잡티가 남기에 필자는 같은 역할을 하는 부트스트랩의 코드를 이용해 이를 수정해 사용한다.

.msg_sound_only, 
.sound_only {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0 !important;
  overflow: hidden !important;
  clip: rect(0,0,0,0);
  border: 0 !important; 
}

SQL 구문작성

사용기기 설정이 mobile이 아닌 경우, 게시판 설정 테이블의 그룹 id와 그룹 테이블의 그룹 id와 같은 것을 게시판 설정 테이블쪽으로 합치는 구문이 작성되어 있다. mobile은 따로 index.php를 포함하기에...(위에 설명됨)

$sql = " select bo_table
            from `{$g5['board_table']}` a left join `{$g5['group_table']}` b on (a.gr_id=b.gr_id)
            where a.bo_device <> 'mobile' "; 
  • bo_table 은 게시판 테이블 id를 가리키며, bo_device 는 both, pc, mobile 중에 하나의 값을 가지는 접속기기 설정이다. gr_id 는 게시판이 속한 그룹이다.
  • $g5[board_table] 변수는 dbconfig.php:17에 정의되어 있는 게시판 설정 테이블이며, $g5['group_table'] 변수는 dbconfig.php:15에 정의되어 있는 게시판 그룹 테이블이다.

SQL 추가구문

관리자인지 확인하여 아니라면 본인확인을 위한 sql 구문을 추가한 후에, 정렬을 위한 그룹 테이블의 출력순와 게시판 설정 테이블의 출력 순서를 기준으로하는 sql 구문을 또 추가한다. 그리고 완성된 sql 문을 sql_query() 를 이용해 결과를 얻어낸다.

if(!$is_admin)
    $sql .= " and a.bo_use_cert = '' ";  

$sql .= " order by b.gr_order, a.bo_order ";  

$result = sql_query($sql);  

$is_admin 설정 보기

최신글 출력

최신글을 출력하며 홀수번째의 게시판은 왼쪽 여백을 추가한다. latest()lib/latest.lib.php에 정의되어 있다.


for ($i=0; $row=sql_fetch_array($result); $i++) {  
    if ($i%2==1) $lt_style = "margin-left:20px";
    else $lt_style = "";
?>
    <div style="float:left;<?php echo $lt_style ?>">
        <?php
        // 이 함수가 바로 최신글을 추출하는 역할을 합니다.
        // 사용방법 : latest(스킨, 게시판아이디, 출력라인, 글자수);
        // 테마의 스킨을 사용하려면 theme/basic 과 같이 지정
        echo latest("basic", $row['bo_table'], 5, 25);
        ?>
    </div>
<?php
}
?>
<!-- } 최신글 끝 -->

SQL : select [컬럼] from [테이블] where [조건]

데이터베이스에서 테이블을 선택하고 조건에 맞는 것을 컬럼(열)에서 조회한다. 조건은 생략 가능하며, 전체 컬럼을 조회하려면 * 를 사용한다.

SQL : [테이블 a] left join [테이블 b] on [join 조건]

테이블 a(별칭)에 join조건에 맞는 테이블 b 컬럼을 합친다.

SQL : order by [컬럼]

컬럼을 기준으로 정렬


'그누보드' 카테고리의 다른 글

그누보드5 - index 파일 분석  (0) 2018.12.01
그누보드5 반응형 준비사항  (0) 2018.12.01

댓글을 달아 주세요

티스토리 툴바