테스트 사이트 - 개발 중인 베타 버전입니다

하나의 게시판에 여러 스킨을 적용해 보자

자유게시판 들여다 보면서 스킨을 좀 바꿔봤으면 좋겠는데 하는 생각을 하다가...

급하게 한 번 그누보드 가지고 구현해 봤읍니다.

 

개발을 잘 몰라서 혼자 보면서 실수하지 않으려고

주석을 덕지덕지 붙여가면서 구현해 봤는데,

저같은 초보자들한테는 도움이 될 것 같아서 그대로 올려봅니다.

 

효율적인지는 잘 모르겠네요... ㅎ

 

1) 관리자 > 환경설정 > 기본환경설정 > 여분필드 > 여분필드1 에 멀티스킨을 이용할 게시판 아이디(bo_table)값을 |로 구분하여 입력하세요.

예시: free|notice|gallery

 

2) 아래 구조의 DB 테이블을 추가합니다.

[code]CREATE TABLE `g5_select_bo_skin` (

    `skin_id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,

    `mb_id` varchar(20) NOT NULL,

    `bo_table` varchar(255) NOT NULL,

    `bo_skin` varchar(255) NOT NULL,

    `bo_mobile_skin` varchar(255) NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;[/code]

 

자 내가 여기서 어떻게 하는 건지 잘 모르겠다?

첨부파일 다운 받아서 그누보드 설치된 디렉토리에 업로드하고 실행하세요.

common.php 파일 있는 디렉토리에 업로드 하시면 됩니다.

그 다음에 회원님도메인/dbupdate.php 로 한 번 접속하고 끄세요.

 

3) extend 에 아무 이름으로 php 파일을 만들어서 아래 코드를 복붙합니다.

예시: selectskin.extend.php

[code]<?php

// 멀티 스킨을 이용하는 게시판 아이디 배열

$arr_select_bo = explode('|', $config['cf_1']);

 

// 스킨 선택값을 저장

if (isset($_GET['select_bo_skin']) && $_GET['select_bo_skin'])

    $_bo_skin = clean_xss_tags($_GET['select_bo_skin']);

 

// 멀티 스킨을 이용하는 게시판일 때만 동작

if (isset($bo_table) && in_array($bo_table, $arr_select_bo)) {

 

    // PC, 모바일 구분

    $bo_skin_device = 'bo_';

    if ($is_mobile) $bo_skin_device .= 'mobile_';

    $bo_skin_device .= 'skin';

 

    // 스킨을 선택했으면

    if (isset($_bo_skin) && !empty($_bo_skin)) {

 

        // 스킨(디렉토리 기준)이 존재하면 세션을 생성합니다.

        $dirname = get_skin_path('board', $_bo_skin);

        if (is_dir($dirname))

            set_session('ss_select_bo_skin', $_bo_skin);

 

    }

 

    $ss_bo_skin = get_session('ss_select_bo_skin');

 

    // 회원이면

    if ($is_member) {

 

        // 이전에 마지막으로 선택한 스킨 정보가 있는지 조회

        $sql = " SELECT {$bo_skin_device} FROM g5_select_bo_skin WHERE mb_id = '{$member['mb_id']}' and bo_table = '{$bo_table}' ORDER BY skin_id DESC ";

        $result = sql_fetch($sql);

 

        // 세션이 있으면

        if ($ss_bo_skin) {

 

            // 스킨 정보가 존재하고

            if ($result[$bo_skin_device]) {

 

                // 지금 선택한 스킨과 다르면 정보 업데이트

                if ($result[$bo_skin_device] != $ss_bo_skin)

                    sql_query(" UPDATE g5_select_bo_skin SET {$bo_skin_device} = '{$ss_bo_skin}' WHERE mb_id = '{$member['mb_id']}' AND bo_table = '{$bo_table}' ");

 

            // 스킨 정보가 없으면 정보 추가

            } else {

 

                sql_query(" INSERT INTO g5_select_bo_skin SET {$bo_skin_device} = '{$ss_bo_skin}', mb_id = '{$member['mb_id']}', bo_table = '{$bo_table}' ");

 

            }

 

        // 세션이 없으면

        } else {

 

            // 이전에 마지막으로 선택한 스킨이 있으면 적용

            if ($result[$bo_skin_device])

                $ss_bo_skin = $result[$bo_skin_device];

 

        }

 

    }

 

    // 선택한 스킨 적용

    if ($ss_bo_skin) {

        $board_skin_path = get_skin_path('board', $ss_bo_skin);

        $board_skin_url = get_skin_url('board', $ss_bo_skin);

    }

 

}[/code]

 

4) 게시판 스킨에 다음 형태의 링크를 추가합니다.

[code]<a href="<?php echo short_url_clean(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table.'&amp;page='.$page.$qstr.'&amp;select_bo_skin=basic'); ?>">목록형</a>

<a href="<?php echo short_url_clean(G5_HTTP_BBS_URL.'/board.php?bo_table='.$bo_table.'&amp;page='.$page.$qstr.'&amp;select_bo_skin=gallery'); ?>">갤러리형</a>[/code]

만약 테마에 있는 스킨이면 select_bo_skin=theme/basic 처럼 쓰시면 됩니다.

원하는만큼 추가해서 쓰세요. ㅎㅎ

 

 

추가! 만약 게시판마다 허용된 스킨만 적용 가능하게 하려면 다음과 같이 하세요.

4FLIXNETFLIX님 댓글을 보고 수정해 봤습니다. (근데 이건 테스트는 안 해봤어요. ㅎㅎ)

https://sir.kr/g5_tip/20106#c_20109

 

추가1) 게시판 관리에서 여분필드1에 허용할 스킨을 | 로 구분해서 입력합니다.

예시: basic|gallery

 

추가2) selectskin.extend.php 에서 (혹은 각자 지정한 파일명에서)

[code]<?php

// 멀티 스킨을 이용하는 게시판 아이디 배열

$arr_select_bo = explode('|', $config['cf_1']);


// 스킨 선택값을 저장

if (isset($_GET['select_bo_skin']) && $_GET['select_bo_skin'])

    $_bo_skin = clean_xss_tags($_GET['select_bo_skin']);

 

// 멀티 스킨을 이용하는 게시판일 때만 동작

if (isset($bo_table) && in_array($bo_table, $arr_select_bo)) {[/code]

이 부분을 아래처럼 고칩니다.

[code]<?php

// 멀티 스킨을 이용하는 게시판 아이디 배열

$arr_select_bo = explode('|', $config['cf_1']);

 

// 멀티 스킨으로 이용할 수 있는 스킨 배열

$arr_whitelist_skin = explode('|', $board['bo_1']);

 

// 스킨 선택값을 저장

if (isset($_GET['select_bo_skin']) && $_GET['select_bo_skin'])

    $_bo_skin = clean_xss_tags($_GET['select_bo_skin']);

 

// 멀티 스킨을 이용하는 게시판이고 이용허용된 스킨일 때만 동작

if (isset($bo_table) && in_array($bo_table, $arr_select_bo) && in_array($_bo_skin, $arr_whitelist_skin)) {[/code]

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 11개

이런 팁 정말 좋아요
[http://sir.kr/data/editor/2303/b60a3e721c744177e2240799c9e51f73_1677837382_9288.png]
추천이요.
이것과는 많이 다르지만 저도 최신버전에 추가된 게시판 상하단 삽입 hook 기능으로 내맘대로 스킨을 고를 수 있는 방법을 이리저리 생각하고 있었습니다.ㅋ
a 링크에 바로 select_bo_skin=basic 이걸로 하지말고
1이나 2로 선택하도록 해줘야합니다. 테마 경로를 이용해서 장난을 치거나 보안상 문제가 있을 수 있습니다.

<a href ..... &select_bo_skin=1">기본형</a> 이런형태로 쓰시는걸 권장합니다.

switch ($_GET['select_bo_skin'])
{
case 1:
$select_bo_skin = "basic";
case 2:
$select_bo_skin = "gallery";
default:
$select_bo_skin = "basic";
}
감사 합니다.
감사합니다 ^^
감사합니다.

게시판 목록

그누보드5 팁자료실

글쓰기