서브도메인별 테마 및 DB적용방법(1) > 그누보드5 팁자료실

그누보드5 팁자료실

서브도메인별 테마 및 DB적용방법(1) 정보

서브도메인별 테마 및 DB적용방법(1)

첨부파일

서브도메인.zip (48.3K) 86회 다운로드 2018-05-15 10:19:29

본문

안녕하세요 빗아입니다.

 

글작성은 처음해보는데 작업하면서 그누보드상에서 서브도메인이 메인DB에 등록되어있으면 서브도메인으로된 테마와 DB를 적용하다가 필요하신분들이 있으실꺼같아서 올려봅니다ㅎㅎ

 

예를들어 test.domain.co.kr로 접속을하게되면 test란 단어가 메인DB에 등록되어있으면 test테마를 적용시키고 해당 DB를 가져옵니다. 등록되어있지 않다면 "등록된 사이트가 아닙니다." 라는 문구와함께 index로 넘어가게됩니다. 단 www로 접속하게되면 메인DB를 적용시켜줍니다.

 

우선 data/dbconfig.php를 열어준뒤 아래 코드를 지워줍니다.


<?php
define('G5_TABLE_PREFIX', 'g5_');
define('G5_SHOP_TABLE_PREFIX', 'g5_shop_');
?>

해당 코드를 지워주셨으면 아래 코드로 바꿔줍니다.


if (preg_match('/^([^.]+)\.domain\.co\.kr$/', $_SERVER['HTTP_HOST'], $match)) {
    if($match[1] == 'www'){
        define('G5_TABLE_PREFIX', 'g5_');
        define('G5_SHOP_TABLE_PREFIX', 'g5_shop_');
    } else {
        define('G5_TABLE_PREFIX', $match[1].'_');
        define('G5_SHOP_TABLE_PREFIX', $match[1].'_shop_');
    }
} else {
    define('G5_TABLE_PREFIX', 'g5_');
    define('G5_SHOP_TABLE_PREFIX', 'g5_shop_');
}

domain\.co\.kr 이부분은 여러분의 도메인으로 바꿔주시면됩니다. 카페24나 가비아에서 기본으로 제공해주는 도메인은 적용이 불가능하니 참고하시기바랍니다.

 

dbconfig.php파일이 끝나셨으면 adm/site_list.php를 생성하시고 아래코드를 붙여넣어주세요.


<?php
$sub_menu = "800000";
include_once('./_common.php');
$g5['title'] = '사이트관리';
include_once('./admin.head.php');
if(G5_TABLE_PREFIX != 'g5_') alert('권한이 없습니다.');
$cf_1 = explode(',', $config['cf_1']);
$cf_2 = explode(',', $config['cf_2']);
$cf_3 = explode(',', $config['cf_3']);
$cf_4 = explode(',', $config['cf_4']);
$total_count = count($cf_1);
if($config['cf_1'] == '') $total_count = 0;    
?>
<div class="local_ov01 local_ov">
    총 사이트수 <?php if($total_count > 0){ echo number_format($total_count) - 1;} else { echo '0'; } ?>개
</div>
<?php if ($is_admin == 'super') { ?>
<div class="btn_add01 btn_add">
    <a href="./site_form.php" id="member_add">사이트추가</a>
</div>
<?php } ?>
<form name="fmemberlist" id="fmemberlist" action="./site_list_update.php" onsubmit="return fmemberlist_submit(this);" method="post">
<input type="hidden" name="sst" value="<?php echo $sst ?>">
<input type="hidden" name="sod" value="<?php echo $sod ?>">
<input type="hidden" name="sfl" value="<?php echo $sfl ?>">
<input type="hidden" name="stx" value="<?php echo $stx ?>">
<input type="hidden" name="page" value="<?php echo $page ?>">
<input type="hidden" name="token" value="">
<div class="tbl_head02 tbl_wrap">
    <table>
    <caption><?php echo $g5['title']; ?> 목록</caption>
    <thead>
    <tr>
        <th scope="col" rowspan="2" id="mb_list_id">서브도메인</th>
        <th scope="col" id="mb_list_name">담당자</th>
        <th scope="col" id="mb_list_mobile">연락처</th>
        <th scope="col" id="mb_list_auth">상태</th>
        <th scope="col" rowspan="2" id="mb_list_mng">관리</th>
    </tr>
    </thead>
    <tbody>
    <?php  for ($i=1; $i<$total_count; $i++){?>
    <tr class="<?php echo $bg; ?>" style="text-align:center;">
        <td><a href="http://<?=$cf_1[$i].'.'.str_replace('www.','',$_SERVER['HTTP_HOST'])?>" target="_blank"><?=$cf_1[$i]?></a></td>
        <td><?=$cf_2[$i]?></td>
        <td><?=$cf_3[$i]?></td>
        <td>
            <?php if($cf_4[$i] == 1){ echo '열림'; } else { echo '닫힘'; }?>
        </td>
        <td>
            <a href="./site_form.php?w=u&num=<?=$i?>">수정</a>
            <a href="./site_form_update.php?w=d&num=<?=$i?>" id="delete">삭제</a>
        </td>
    </tr>
    <?php } if ($i == 1) echo "<tr><td colspan=\"40\" class=\"empty_table\">자료가 없습니다.</td></tr>";?>
    </tbody>
    </table>
</div>
</form>
<script>
$("#delete").click(function(){
    if(confirm('삭제 후 자료는 복구가 불가능합니다.\n정말 삭제하시겠습니까?')) location.href = $(this).attr('href');
    return false;
});
</script>
<?php include_once('./admin.tail.php');?>

코드를 보시면 메인DB 즉 G5_TABLE_PREFIX가 g5_일때 config테이블에 cf_1, cf_2, cf_3, cf_4를 가지고 서브도메인을 판단합니다. 굳이 저 필드를 안쓰시고 다른필드를 사용하셔도 상관없습니다.

 

G5_TABLE_PREFIX가 g5_가 아닐때 "권한이 없습니다."라는 안내창과함께 이전페이지로 이동합니다.

site_list.php가 끝나셨으면 adm/site_form.php를 생성해주시고 아래 코드를 붙여넣어주세요.


<?php
$sub_menu = "800000";
include_once('./_common.php');
$g5['title'] = '사이트관리';
include_once (G5_ADMIN_PATH.'/admin.head.php');
if(G5_TABLE_PREFIX != 'g5_') alert('권한이 없습니다.');
if($w == 'u'){
    $cf_1 = explode(',', $config['cf_1']);
    $cf_2 = explode(',', $config['cf_2']);
    $cf_3 = explode(',', $config['cf_3']);
    $cf_4 = explode(',', $config['cf_4']);
    $sql = "select cf_title from ".$cf_1[$num]."_config";
    $site = sql_fetch($sql);
}
?>
<form name="frmcontentform" action="./site_form_update.php" onsubmit="return frmcontentform_check(this);" method="post" enctype="MULTIPART/FORM-DATA" >
<input type="hidden" name="w" value="<?php echo $w; ?>">
<input type="hidden" name="num" value="<?php echo $num; ?>">
<input type="hidden" name="token" value="">
<div class="tbl_frm01 tbl_wrap">
    <table>
    <caption><?php echo $g5['title']; ?> 목록</caption>
    <colgroup>
        <col class="grid_4">
        <col>
    </colgroup>
    <tbody>
    <tr>
        <th scope="row"><label for="cf_1">서브도메인</label></th>
        <td>
            <?php echo help('20자 이내의 영문자, 숫자, _ 만 가능합니다.'); ?>
            <input type="text" value="<?php echo $cf_1[$num]; ?>" name="cf_1" id ="cf_1" required <?php echo $readonly; ?> class="required <?php echo $readonly; ?> frm_input" size="20" maxlength="20">
        </td>
    </tr>
    <tr>
        <th scope="row"><label for="cf_title">홈페이지 제목</label></th>
        <td><input type="text" name="cf_title" value="<?php echo $site['cf_title']; ?>" id="cf_title" required class="frm_input required" size="90"></td>
    </tr>
    <tr>
        <th scope="row"><label for="cf_2">담당자</label></th>
        <td><input type="text" name="cf_2" value="<?php echo $cf_2[$num]; ?>" id="cf_2" required class="frm_input required" size="90"></td>
    </tr>
    <tr>
        <th scope="row"><label for="cf_3">연락처</label></th>
        <td><input type="text" name="cf_3" value="<?php echo $cf_3[$num]; ?>" id="cf_3" required class="frm_input required" size="90"></td>
    </tr>
    <tr>
        <th scope="row"><label for="cf_8">상태</label></th>
        <td>
            <label for="cf_4">열림</label><input type="radio" name="cf_4" value="1" id="cf_4" <?=get_checked($cf_4[$num], '1')?> required class="frm_input required" size="90">
            <label for="cf_5">닫힘</label><input type="radio" name="cf_4" value="0" id="cf_5" <?=get_checked($cf_4[$num], '0')?> required class="frm_input required" size="90">
        </td>
    </tr>
    </tbody>
    </table>
</div>
<div class="btn_confirm01 btn_confirm">
    <input type="submit" value="확인" class="btn_submit" accesskey="s">
    <a href="./site_list.php">목록</a>
</div>
</form>
<script>
function frmcontentform_check(f)
{
    errmsg = "";
    errfld = "";
    check_field(f.co_id, "ID를 입력하세요.");
    if (errmsg != "") {
        alert(errmsg);
        errfld.focus();
        return false;
    }
    return true;
}
</script>
<?php include_once('./admin.tail.php');?>

해당 코드를 보시면 서브도메인칸에 작성하시는 이름으로 이후 site_form_update.php에서 테마생성과 DB를 생성을합니다.

 

site_form.php파일이 끝나셨으면 adm/site_form_update.php를 생성하시고 아래코드를 붙여넣어주세요.


<?php
$sub_menu = "800000";
include_once('./_common.php');
$g5['title'] = '사이트관리';
if(G5_TABLE_PREFIX != 'g5_') alert('권한이 없습니다.');
function rmdirAll($dir) { // 테마 삭제
   $dirs = dir($dir);
   while(false !== ($entry = $dirs->read())) {
      if(($entry != '.') && ($entry != '..')) {
         if(is_dir($dir.'/'.$entry)) {
            rmdirAll($dir.'/'.$entry);
         } else {
            @unlink($dir.'/'.$entry);
         }
       }
    }
    $dirs->close();
    @rmdir($dir);
}
$row = sql_fetch("select cf_1,cf_2,cf_3,cf_4 from {$g5['config_table']}");
if($cf_1 == 'g5') alert('등록이 불가능한 도메인입니다.');
if($w == ''){
    $bcf_1 = explode(',', $row['cf_1']);
    $folder = G5_PATH.'/theme/'.$cf_1; // 도메인으로 테마폴더를 생성합니다.
    if(in_array($cf_1, $bcf_1)) alert('이미 등록된 도메인입니다.');
    if(!is_dir($folder)) @mkdir($folder, 0755); 
    else alert('이미 등록된 테마입니다.');
    include_once(G5_LIB_PATH.'/pclzip.lib.php'); // 압축파일 LIB
    $zipfile = new PclZip(G5_PATH.'/install/theme.zip'); // 해당 압축파일로 테마 생성 후 자동 설치
    $extract = $zipfile -> extract($folder, $cf_1);
    $cf_1 = $row['cf_1'].','.$cf_1; 
    $cf_2 = $row['cf_2'].','.$cf_2; 
    $cf_3 = $row['cf_3'].','.$cf_3; 
    $cf_4 = $row['cf_4'].','.$cf_4; 
    
    // 테이블 생성
    $table_prefix = $_POST['cf_1'].'_';
    $file = implode('', file(G5_PATH.'/install/gnuboard5.sql'));
    eval("\$file = \"$file\";");
    $file = preg_replace('/^--.*$/m', '', $file);
    $file = preg_replace('/`g5_([^`]+`)/', '`'.$table_prefix.'$1', $file);
    $f = explode(';', $file);
    for ($i=0; $i<count($f); $i++) if (trim($f[$i]) != '') sql_query($f[$i]);
    // 쇼핑몰 테이블 생성
    $g5_shop_prefix = $table_prefix.'shop_';
    $file = implode('', file(G5_PATH.'/install/gnuboard5shop.sql'));
    $file = preg_replace('/^--.*$/m', '', $file);
    $file = preg_replace('/`g5_shop_([^`]+`)/', '`'.$g5_shop_prefix.'$1', $file);
    $f = explode(';', $file);
    for ($i=0; $i<count($f); $i++) if (trim($f[$i]) != '') sql_query($f[$i]);
    // 기본 관리자 계정
    $admin_id = 'admin';
    $admin_pass = '1234';
    $admin_name = '최고관리자';
    $admin_email = '*** 개인정보보호를 위한 이메일주소 노출방지 ***';
    $sql = " insert into `{$table_prefix}config`
                set cf_title = '".$cf_title."',
                    cf_theme = '".$_POST['cf_1']."',
                    cf_admin = '$admin_id',
                    cf_admin_email = '$admin_email',
                    cf_admin_email_name = '".G5_VERSION."',
                    cf_use_point = '1',
                    cf_use_copy_log = '1',
                    cf_login_point = '100',
                    cf_memo_send_point = '500',
                    cf_cut_name = '15',
                    cf_nick_modify = '60',
                    cf_new_skin = 'basic',
                    cf_new_rows = '15',
                    cf_search_skin = 'basic',
                    cf_connect_skin = 'basic',
                    cf_read_point = '$read_point',
                    cf_write_point = '$write_point',
                    cf_comment_point = '$comment_point',
                    cf_download_point = '$download_point',
                    cf_write_pages = '10',
                    cf_mobile_pages = '5',
                    cf_link_target = '_blank',
                    cf_delay_sec = '30',
                    cf_filter = '18아,18놈,18새끼,18년,18뇬,18노,18것,18넘,개년,개놈,개뇬,개새,개색끼,개세끼,개세이,개쉐이,개쉑,개쉽,개시키,개자식,개좆,게색기,게색끼,광뇬,뇬,눈깔,뉘미럴,니귀미,니기미,니미,도촬,되질래,뒈져라,뒈진다,디져라,디진다,디질래,병쉰,병신,뻐큐,뻑큐,뽁큐,삐리넷,새꺄,쉬발,쉬밸,쉬팔,쉽알,스패킹,스팽,시벌,시부랄,시부럴,시부리,시불,시브랄,시팍,시팔,시펄,실밸,십8,십쌔,십창,싶알,쌉년,썅놈,쌔끼,쌩쑈,썅,써벌,썩을년,쎄꺄,쎄엑,쓰바,쓰발,쓰벌,쓰팔,씨8,씨댕,씨바,씨발,씨뱅,씨봉알,씨부랄,씨부럴,씨부렁,씨부리,씨불,씨브랄,씨빠,씨빨,씨뽀랄,씨팍,씨팔,씨펄,씹,아가리,아갈이,엄창,접년,잡놈,재랄,저주글,조까,조빠,조쟁이,조지냐,조진다,조질래,존나,존니,좀물,좁년,좃,좆,좇,쥐랄,쥐롤,쥬디,지랄,지럴,지롤,지미랄,쫍빱,凸,퍽큐,뻑큐,빠큐,ㅅㅂㄹㅁ',
                    cf_possible_ip = '',
                    cf_intercept_ip = '',
                    cf_member_skin = 'basic',
                    cf_mobile_new_skin = 'basic',
                    cf_mobile_search_skin = 'basic',
                    cf_mobile_connect_skin = 'basic',
                    cf_mobile_member_skin = 'basic',
                    cf_faq_skin = 'basic',
                    cf_mobile_faq_skin = 'basic',
                    cf_editor = 'smarteditor2',
                    cf_captcha_mp3 = 'basic',
                    cf_register_level = '2',
                    cf_register_point = '1000',
                    cf_icon_level = '2',
                    cf_leave_day = '30',
                    cf_search_part = '10000',
                    cf_email_use = '1',
                    cf_prohibit_id = 'admin,administrator,관리자,운영자,어드민,주인장,webmaster,웹마스터,sysop,시삽,시샵,manager,매니저,메니저,root,루트,su,guest,방문객',
                    cf_prohibit_email = '',
                    cf_new_del = '30',
                    cf_memo_del = '180',
                    cf_visit_del = '180',
                    cf_popular_del = '180',
                    cf_use_member_icon = '2',
                    cf_member_icon_size = '5000',
                    cf_member_icon_width = '22',
                    cf_member_icon_height = '22',
                    cf_login_minutes = '10',
                    cf_image_extension = 'gif|jpg|jpeg|png',
                    cf_flash_extension = 'swf',
                    cf_movie_extension = 'asx|asf|wmv|wma|mpg|mpeg|mov|avi|mp3',
                    cf_formmail_is_member = '1',
                    cf_page_rows = '15',
                    cf_mobile_page_rows = '15',
                    cf_cert_limit = '2',
                    cf_stipulation = '해당 홈페이지에 맞는 회원가입약관을 입력합니다.',
                    cf_privacy = '해당 홈페이지에 맞는 개인정보처리방침을 입력합니다.'
                    ";
    sql_query($sql);
    // 1:1문의 설정
    $sql = " insert into `{$table_prefix}qa_config`
                ( qa_title, qa_category, qa_skin, qa_mobile_skin, qa_use_email, qa_req_email, qa_use_hp, qa_req_hp, qa_use_editor, qa_subject_len, qa_mobile_subject_len, qa_page_rows, qa_mobile_page_rows, qa_image_width, qa_upload_size, qa_insert_content )
              values
                ( '1:1문의', '회원|포인트', 'basic', 'basic', '1', '0', '1', '0', '1', '60', '30', '15', '15', '600', '1048576', '' ) ";
    sql_query($sql);
    // 관리자 회원가입
    $sql = " insert into `{$table_prefix}member`
                set mb_id = '$admin_id',
                     mb_password = PASSWORD('$admin_pass'),
                     mb_name = '$admin_name',
                     mb_nick = '$admin_name',
                     mb_email = '$admin_email',
                     mb_level = '10',
                     mb_mailling = '1',
                     mb_open = '1',
                     mb_email_certify = '".G5_TIME_YMDHIS."',
                     mb_datetime = '".G5_TIME_YMDHIS."',
                     mb_ip = '{$_SERVER['REMOTE_ADDR']}'
                     ";
    sql_query($sql);
    // 내용관리 생성
    sql_query(" insert into `{$table_prefix}content` set co_id = 'company', co_html = '1', co_subject = '회사소개', co_content= '<p align=center><b>회사소개에 대한 내용을 입력하십시오.</b></p>', co_skin = 'basic', co_mobile_skin = 'basic' ");
    sql_query(" insert into `{$table_prefix}content` set co_id = 'privacy', co_html = '1', co_subject = '개인정보 처리방침', co_content= '<p align=center><b>개인정보 처리방침에 대한 내용을 입력하십시오.</b></p>', co_skin = 'basic', co_mobile_skin = 'basic' ");
    sql_query(" insert into `{$table_prefix}content` set co_id = 'provision', co_html = '1', co_subject = '서비스 이용약관', co_content= '<p align=center><b>서비스 이용약관에 대한 내용을 입력하십시오.</b></p>', co_skin = 'basic', co_mobile_skin = 'basic' ");
    // FAQ Master
    sql_query(" insert into `{$table_prefix}faq_master` set fm_id = '1', fm_subject = '자주하시는 질문' ");
    // 이미지 사이즈
    $simg_width = 230;
    $simg_height = 230;
    $mimg_width = 320;
    $mimg_height = 320;
    // default 설정 (쇼핑몰 설정)
    $sql = " insert into `{$g5_shop_prefix}default`
                set de_admin_company_name = '회사명',
                    de_admin_company_saupja_no = '123-45-67890',
                    de_admin_company_owner = '대표자명',
                    de_admin_company_tel = '*** 개인정보보호를 위한 전화번호 노출방지 ***',
                    de_admin_company_fax = '*** 개인정보보호를 위한 전화번호 노출방지 ***',
                    de_admin_tongsin_no = '제 OO구 - 123호',
                    de_admin_buga_no = '12345호',
                    de_admin_company_zip = '123-456',
                    de_admin_company_addr = 'OO도 OO시 OO구 OO동 123-45',
                    de_admin_info_name = '정보책임자명',
                    de_admin_info_email = '정보책임자 E-mail',
                    de_shop_skin = 'basic',
                    de_shop_mobile_skin = 'basic',
                    de_type1_list_use = '1',
                    de_type1_list_skin = 'main.10.skin.php',
                    de_type1_list_mod = '3',
                    de_type1_list_row = '2',
                    de_type1_img_width = '$simg_width',
                    de_type1_img_height = '$simg_height',
                    de_type2_list_use = '1',
                    de_type2_list_skin = 'main.10.skin.php',
                    de_type2_list_mod = '3',
                    de_type2_list_row = '2',
                    de_type2_img_width = '$simg_width',
                    de_type2_img_height = '$simg_height',
                    de_type3_list_use = '1',
                    de_type3_list_skin = 'main.10.skin.php',
                    de_type3_list_mod = '1',
                    de_type3_list_row = '3',
                    de_type3_img_width = '$simg_width',
                    de_type3_img_height = '$simg_height',
                    de_type4_list_use = '1',
                    de_type4_list_skin = 'main.10.skin.php',
                    de_type4_list_mod = '3',
                    de_type4_list_row = '1',
                    de_type4_img_width = '$simg_width',
                    de_type4_img_height = '$simg_height',
                    de_type5_list_use = '1',
                    de_type5_list_skin = 'main.10.skin.php',
                    de_type5_list_mod = '3',
                    de_type5_list_row = '1',
                    de_type5_img_width = '$simg_width',
                    de_type5_img_height = '$simg_height',
                    de_mobile_type1_list_use = '1',
                    de_mobile_type1_list_skin = 'main.10.skin.php',
                    de_mobile_type1_list_mod = '3',
                    de_mobile_type1_list_row = '2',
                    de_mobile_type1_img_width = '$simg_width',
                    de_mobile_type1_img_height = '$simg_height',
                    de_mobile_type2_list_use = '1',
                    de_mobile_type2_list_skin = 'main.10.skin.php',
                    de_mobile_type2_list_mod = '3',
                    de_mobile_type2_list_row = '2',
                    de_mobile_type2_img_width = '$simg_width',
                    de_mobile_type2_img_height = '$simg_height',
                    de_mobile_type3_list_use = '1',
                    de_mobile_type3_list_skin = 'main.10.skin.php',
                    de_mobile_type3_list_mod = '3',
                    de_mobile_type3_list_row = '2',
                    de_mobile_type3_img_width = '$simg_width',
                    de_mobile_type3_img_height = '$simg_height',
                    de_mobile_type4_list_use = '1',
                    de_mobile_type4_list_skin = 'main.10.skin.php',
                    de_mobile_type4_list_mod = '3',
                    de_mobile_type4_list_row = '2',
                    de_mobile_type4_img_width = '$simg_width',
                    de_mobile_type4_img_height = '$simg_height',
                    de_mobile_type5_list_use = '1',
                    de_mobile_type5_list_skin = 'main.10.skin.php',
                    de_mobile_type5_list_mod = '3',
                    de_mobile_type5_list_row = '2',
                    de_mobile_type5_img_width = '$simg_width',
                    de_mobile_type5_img_height = '$simg_height',
                    de_bank_use = '1',
                    de_bank_account = 'OO은행 12345-67-89012 예금주명',
                    de_vbank_use = '0',
                    de_iche_use = '0',
                    de_card_use = '0',
                    de_settle_min_point = '5000',
                    de_settle_max_point = '50000',
                    de_settle_point_unit = '100',
                    de_cart_keep_term = '15',
                    de_card_point = '0',
                    de_point_days = '7',
                    de_pg_service = 'kcp',
                    de_kcp_mid = '',
                    de_send_cost_case = '차등',
                    de_send_cost_limit = '20000;30000;40000',
                    de_send_cost_list = '4000;3000;2000',
                    de_hope_date_use = '0',
                    de_hope_date_after = '3',
                    de_baesong_content = '배송 안내 입력전입니다.',
                    de_change_content = '교환/반품 안내 입력전입니다.',
                    de_rel_list_use = '1',
                    de_rel_list_skin = 'relation.10.skin.php',
                    de_rel_list_mod = '3',
                    de_rel_img_width = '$simg_width',
                    de_rel_img_height = '$simg_height',
                    de_mobile_rel_list_use = '1',
                    de_mobile_rel_list_skin = 'relation.10.skin.php',
                    de_mobile_rel_list_mod = '3',
                    de_mobile_rel_img_width = '$simg_width',
                    de_mobile_rel_img_height = '$simg_height',
                    de_search_list_skin = 'list.10.skin.php',
                    de_search_img_width = '$simg_width',
                    de_search_img_height = '$simg_height',
                    de_search_list_mod = '3',
                    de_search_list_row = '5',
                    de_mobile_search_list_skin = 'list.10.skin.php',
                    de_mobile_search_img_width = '$simg_width',
                    de_mobile_search_img_height = '$simg_height',
                    de_mobile_search_list_mod = '3',
                    de_mobile_search_list_row = '5',
                    de_listtype_list_skin = 'list.10.skin.php',
                    de_listtype_img_width = '$simg_width',
                    de_listtype_img_height = '$simg_height',
                    de_listtype_list_mod = '3',
                    de_listtype_list_row = '5',
                    de_mobile_listtype_list_skin = 'list.10.skin.php',
                    de_mobile_listtype_img_width = '$simg_width',
                    de_mobile_listtype_img_height = '$simg_height',
                    de_mobile_listtype_list_mod = '3',
                    de_mobile_listtype_list_row = '5',
                    de_simg_width = '$simg_width',
                    de_simg_height = '$simg_height',
                    de_mimg_width = '$mimg_width',
                    de_mimg_height = '$mimg_height',
                    de_item_use_use = '1',
                    de_level_sell = '1',
                    de_code_dup_use = '1',
                    de_card_test = '1',
                    de_sms_cont1 = '{이름}님의 회원가입을 축하드립니다.\nID:{회원아이디}\n{회사명}',
                    de_sms_cont2 = '{이름}님 주문해주셔서 고맙습니다.\n{주문번호}\n{주문금액}원\n{회사명}',
                    de_sms_cont3 = '{이름}님께서 주문하셨습니다.\n{주문번호}\n{주문금액}원\n{회사명}',
                    de_sms_cont4 = '{이름}님 입금 감사합니다.\n{입금액}원\n주문번호:\n{주문번호}\n{회사명}',
                    de_sms_cont5 = '{이름}님 배송합니다.\n택배:{택배회사}\n운송장번호:\n{운송장번호}\n{회사명}'
                    ";
    sql_query($sql);
    // 게시판 그룹 생성
    sql_query(" insert into `{$table_prefix}group` set gr_id = 'shop', gr_subject = '쇼핑몰' ");
    // 게시판 생성
    $tmp_bo_table   = array ("qa", "free", "notice");
    $tmp_bo_subject = array ("질문답변", "자유게시판", "공지사항");
    for ($i=0; $i<count($tmp_bo_table); $i++){
        $sql = " insert into `{$table_prefix}board`
                    set bo_table = '$tmp_bo_table[$i]',
                        gr_id = 'shop',
                        bo_subject = '$tmp_bo_subject[$i]',
                        bo_device           = 'both',
                        bo_admin            = '',
                        bo_list_level       = '1',
                        bo_read_level       = '1',
                        bo_write_level      = '1',
                        bo_reply_level      = '1',
                        bo_comment_level    = '1',
                        bo_html_level       = '1',
                        bo_link_level       = '1',
                        bo_count_modify     = '1',
                        bo_count_delete     = '1',
                        bo_upload_level     = '1',
                        bo_download_level   = '1',
                        bo_read_point       = '-1',
                        bo_write_point      = '5',
                        bo_comment_point    = '1',
                        bo_download_point   = '-20',
                        bo_use_category     = '0',
                        bo_category_list    = '',
                        bo_use_sideview     = '0',
                        bo_use_file_content = '0',
                        bo_use_secret       = '0',
                        bo_use_dhtml_editor = '0',
                        bo_use_rss_view     = '0',
                        bo_use_good         = '0',
                        bo_use_nogood       = '0',
                        bo_use_name         = '0',
                        bo_use_signature    = '0',
                        bo_use_ip_view      = '0',
                        bo_use_list_view    = '0',
                        bo_use_list_content = '0',
                        bo_use_email        = '0',
                        bo_table_width      = '100',
                        bo_subject_len      = '60',
                        bo_mobile_subject_len      = '30',
                        bo_page_rows        = '15',
                        bo_mobile_page_rows = '15',
                        bo_new              = '24',
                        bo_hot              = '100',
                        bo_image_width      = '600',
                        bo_skin             = 'basic',
                        bo_mobile_skin      = 'basic',
                        bo_include_head     = '_head.php',
                        bo_include_tail     = '_tail.php',
                        bo_content_head     = '',
                        bo_content_tail     = '',
                        bo_mobile_content_head     = '',
                        bo_mobile_content_tail     = '',
                        bo_insert_content   = '',
                        bo_gallery_cols     = '4',
                        bo_gallery_width    = '174',
                        bo_gallery_height   = '124',
                        bo_mobile_gallery_width = '125',
                        bo_mobile_gallery_height= '100',
                        bo_upload_count     = '2',
                        bo_upload_size      = '1048576',
                        bo_reply_order      = '1',
                        bo_use_search       = '0',
                        bo_order            = '0'
                        ";
        sql_query($sql);
        // 게시판 테이블 생성
        $file = file("sql_write.sql");
        $sql = implode($file, "\n");
        $create_table = $table_prefix.'write_' . $tmp_bo_table[$i];
        // sql_board.sql 파일의 테이블명을 변환
        $source = array("/__TABLE_NAME__/", "/;/");
        $target = array($create_table, "");
        $sql = preg_replace($source, $target, $sql);
        sql_query($sql);
    }
} elseif($w == 'u' || $w == 'd'){
    $cf_11 = '';
    $cf_12 = '';
    $cf_13 = '';
    $cf_14 = '';
    $bcf_1 = explode(',', $row['cf_1']);
    $bcf_2 = explode(',', $row['cf_2']);
    $bcf_3 = explode(',', $row['cf_3']);
    $bcf_4 = explode(',', $row['cf_4']);
    if($cf_1 != $bcf_1[$num] && $w == 'u'){
        $folder = G5_PATH.'/theme/';
        if(in_array($cf_1, $bcf_1)) alert('이미 등록된 도메인입니다.');
        
        if(is_dir($folder.$cf_1)) alert('이미 등록된 테마입니다.');
        rename($folder.$bcf_1[$num], $folder.$cf_1); // 도메인 이름 변경시 테마 이름도 변경
        // db 이름 변경
        $dbs = sql_query("show tables like '%".$bcf_1[$num]."_%'");
        $name = 'Tables_in_DB이름을 넣어주세요 (%'.$bcf_1[$num].'_%)';
        while($dbrow = sql_fetch_array($dbs)){
            $after = str_replace($bcf_1[$num], $cf_1, $dbrow[$name]);
            sql_query('RENAME TABLE `'.$dbrow[$name].'` TO `'.$after.'`');
        }
    }
    for($i=1; $i<=count($bcf_1); $i++){
        if($i != count($bcf_1)){
            if($w == 'u'){
                if($i == $num){
                    $cf_11 .= ','.$cf_1;
                    $cf_12 .= ','.$cf_2;
                    $cf_13 .= ','.$cf_3;
                    $cf_14 .= ','.$cf_4;
                } else {
                    $cf_11 .= ','.str_replace(',','',$bcf_1[$i]);
                    $cf_12 .= ','.str_replace(',','',$bcf_2[$i]);
                    $cf_13 .= ','.str_replace(',','',$bcf_3[$i]);
                    $cf_14 .= ','.str_replace(',','',$bcf_4[$i]);
                }
            } else {
                if($i != $num){
                    $cf_11 .= ','.str_replace(',','',$bcf_1[$i]);
                    $cf_12 .= ','.str_replace(',','',$bcf_2[$i]);
                    $cf_13 .= ','.str_replace(',','',$bcf_3[$i]);
                    $cf_14 .= ','.str_replace(',','',$bcf_4[$i]);
                } else $df = $bcf_1[$i];
            }
        }
    }
    $cf_1 = $cf_11;
    $cf_2 = $cf_12;
    $cf_3 = $cf_13;
    $cf_4 = $cf_14;
    if($w == 'd'){
        rmdirAll(G5_PATH.'/theme/'.$df); // 테마 삭제
        
        // db 삭제
        $dbs = sql_query("show tables like '%".$bcf_1[$num]."_%'");
        $name = 'Tables_in_DB이름을 넣어주세요 (%'.$bcf_1[$num].'_%)';
        while($dbrow = sql_fetch_array($dbs)) sql_query('DROP TABLE `'.$dbrow[$name].'`');
    }
}
$sql = "update {$g5['config_table']} set cf_1 = '{$cf_1}', cf_2 = '{$cf_2}', cf_3 = '{$cf_3}', cf_4 = '{$cf_4}'";
sql_query($sql);
$sql = "update {$_POST['cf_1']}_config set cf_title = '{$cf_title}'";
sql_query($sql);
if($w == '') alert('등록되었습니다.', '/adm/site_list.php');
elseif($w == 'u') alert('수정되었습니다.', '/adm/site_list.php');
elseif($w == 'd') alert('삭제되었습니다.', '/adm/site_list.php');
?>

해당코드를 보시면 그누보드를 설치할때 사용되는 sql파일로 넘어온 서브도메인값으로 테이블 이름을변경시켜주고 DB를 생성해줍니다. 테마 또한 pclzip.lib.php파일을 통해 install.php/theme.zip 파일을 서브도메인으로 폴더 생성 후 압축을 풀어줍니다. DB를 생성할때 기본테마를 합축해제된 테마로 설정하고 관리자의 계정은 기본적으로 admin / 1234로 생성이됩니다.

 

install.php/theme.zip 파일은 여러분이 원하시는 테마로 압축하셔서 업로드해주세요. 이때 테마폴더 안에있는 내용물만 압축해주시면 되겠습니다.

 

site_form_update.php까지 완료하셨으면 내용이 너무 긴 관계로 다음 글에서 마무리를 하겠습니다ㅎㅎ

추천
5

댓글 22개

우와 좋은팁이네요!!
혹시 서브도메인별 테마만 적용할 수도 있을까요?
예를들어 테마를 10개 만들어서 각각 다른 디자인으로 수정하고,
서브도메인마다 같은 이름의 테마를 불러오면, 그누보드 템플릿 사이트로 운영이 가능하지 싶어서요.
이경우 운영되는 사이트는 아니기때문에 db를 각각 사용할 필요는 없어보이거든요.
위 소스에서 어떤 부분만 갖다쓰면 되는것인지... 궁금하군요 ㅠ
해당 소스상에서는 말씀하신것처럼 서브도메인별 테마만 적용되게 되어있습니다.
그누보드 템플릿을 서브도메인명으로 폴더명만 바꿔주면 바로 테마가 적용됩니다.
만약 다른 템플릿을 사용하고싶으시면 `서브도메인_config` 테이블에서 `cf_theme` 필드값을 직접 수정해주시면 됩니다ㅎㅎ

예를들어 서브도메인이 test라면 `test_config` 테이블에서 `cf_theme` 필드값을 수정해주시면 됩니다.
이 방식에선 테마 폴더에있는 파일들을 제외하고는 소스코드를 변경하게되면 모든 서브도메인이 똑같이 적용된다는 점이죠 또 사이트 분양을하게되면 분양기간 필드를 하나 추가해서 날짜가 지나게되면 접속안되게할수도 있구요 여러가지 방법으로 이용할수 있을꺼같네요ㅎㅎ
$folder = G5_PATH.'/theme/'.$cf_1; // 도메인으로 테마폴더를 생성합니다.

위 경로에 폴더가 생성이 되지 않는데 왜 그런지 알고 싶습니다.

가르쳐주세요....
전체 2,424 |RSS
그누보드5 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT