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

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

· 2년 전 · 3379 · 11

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

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

 

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

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

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

 

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

 

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개

2년 전
감사합니다.

게시글 목록

번호 제목
20141
20129
20120
20114
20106
20099
20097
20091
20050
20042
20039
20010
19996
19978
19969
19954
19911
19908
19907
19905
19904
19892
19882
19864
19861
19844
19831
19829
19820
19805