# STOVE GNB 연동

STOVE GNB를 연동에 대해 방법에 대해 제공합니다.
연동은 두가지로 방법으로 제공합니다.  
  1. CDN으로 직접 연동하는 방법
  2. CDN버전 정보를 통해 최신 버전을 유지하는 방법

# CDN 직접연동

환경별 제공 URL을 제공하며 CDN에 고정버전으로 연동 할 수 있습니다.

  • [DEV] : '//static-new-dev.onstove.com'
  • [QA] : '//static-new-qa.onstove.com'
  • [SANDBOX] : '//static-new.gate8.com'
  • [LIVE] : '//static-new.onstove.com'
// <script src="{환경별 URL}/sh-{버전}/cp-header.js"></script> 
// Example (LIVE & 6.0.48 Version & CP)

<script src="//static-new.onstove.com/sh-6.0.48/cp-header.js"></script>
1
2
3
4

# CDN 최신버전으로 연동

최신 버전 정보를 가져와 GNB를 최신버전으로 연동 할 수 있습니다.

/* 
환경별 staticUrl 변수화하여 사용
    sandbox => staticUrl: https://static-new.gate8.com
    stage => staticUrl: https://static-new-stage.onstove.com
    live => staticUrl: https://static-new.onstove.com
Example (Live)
    {환경별 URL}/static-common/version.json => //static-new.gate8.com/static-common/version.json
*/
var staticUrl = '//static-new.gate8.com'; // 위 환경별 지정해 놓은 staticUrl 값
var options = {
    wrapper: '.wrapper',
    skin: 'gnb-default',
    widget: {
        gameListAndService: false
    },
    global: {
        useGds: true
    },
    loginMethod: {
        params: {
            inflow_path: 'tr',
            redirect_url: Common.Http.Portal + "/member/simpleuserlogout.asp?u="+Base64LoginUrl.encode(location.href)+"&change_type=n",
            game_no: '2', // 각환경별 game_no값으로 변경부탁드립니다.
            show_play_button:'Y',
        },
        redirectCurrentPage: false
    },
    onCreatedHeaderElement: function(headerElement) {
        console.log(headerElement);
    }
// gnb width, z-index css 별도 필요 (.gnb-stove.gnb-default-mini 선택자 사용)
};

$.support.cors = true;
$.getJSON(staticUrl + '/static-common/version.json')
    .done(function(data) {
        var versionCpheader = data.library["cp-header"];
        var url = staticUrl + '/sh-' + versionCpheader+'/cp-header.js';
        $.getScript(url)
            .done(function () {
                var cpHeader = new window.cp.Header(options);
                cpHeader.render();
            })
            .fail(function(jqxhr, textStatus, error) {
                var err = textStatus + ", " + error;
                console.log( "Request Failed: " + err );
            });
    })
    .fail(function(jqxhr, textStatus, error) {
        var err = textStatus + ", " + error;
        console.log( "Request Failed: " + err );
    });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
  • CDN Request URL

//static-new.gate8.com/static-common/version.json

  • CDN Response json
"response data" :{
  "library": {
    "cp-header": "6.x.xx", // 외부서비스 사용
  }
}
1
2
3
4
5

# 서비스 별 특화기능 구현 (Customizing)

# JQuery 나 프론트프레임워크(Vue.js)를 사용하지 않는 환경

const gnbOption = {
    wrapper: '.wrapper',
    global: {
        useGds: true,
        useLanguageSelect: true,
    },
    widget: {
        // widget - customArea를 통해 서비스 영역의 커스텀
        customArea: {
            // widget - customArea - template 을 통해 해당 영역에 들어갈 html 코드를 옵션으로 작성
            template: `
                <div class="custom-area">
                  <button style="margin-right:20px;" class="alert-button">prue alert</button>
                  <a style="margin-right:20px;" href="https://www.naver.com">prue 네이버 바로가기</a>
                  <button class="click-button">prue console</button>
                </div>
            `,
            // widget - customArea - eventHandler 를 통해 template에 넣은 DOM의 이벤트를 컨트롤
            eventHandler: (customDom, gnbDom) => {
              document.querySelector('.alert-button').addEventListener('click', () => {
                alert('클릭 얼럿');
              });
              document.querySelector('.click-button').addEventListener('click', () => {
                console.log('클릭 콘솔');
              });
            },
        },
    },
    loginMethod: {
        redirectCurrentPage: true,
    }
}
const header = new window.stove.Header(gnbOption);
header.render();
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

# Vue Framework (프론트프레임워크(Vue.js)를 사용하는 환경

<script>
import Custom from '../components/Custom.vue'
import Vue from "vue";
export default {
    name: "VueTemplate",
    components: {
        Custom
    },
    created() {
        const gnbOption = {
            widget: {
                // widget - customArea를 통해 서비스 영역의 커스텀
                customArea: {
                    // widget - customArea - template 을 통해 해당 영역에 들어갈 vue component가 들어갈 컨테이너를 생성
                    template: `<div class="custom-area"></div>`,
                    // widget - customArea - eventHandler 를 통해 template에서 지정한 컨테이너에 추가할 컴포넌트를 mount하여 사용합니다.
                    eventHandler: (customDom, gnbDom) => {
                        (new (Vue.extend(Custom))).$mount(customDom.querySelector('.custom-area'));
                    }
                },
            }
        }
        this.loadHeader(gnbOption);
    },
    methods: {
        loadHeader(option) {
            let header = new window.stove.Header(option);
            header.render();
        }
    }
}
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

# 서비스 커스텀 테마(스킨) 작성 및 적용

GNB 생성 옵션에 테마(스킨)에 커스텀 클래스명을 추가하고, 테마 (CSS) 작성 할 수 있습니다.

  • GNB 생성 옵션
var options = {
    wrapper: '.wrapper',
    skin: 'gnb-camp', // 옵션 skin에 원하는 커스텀 클래스명을 입력시 gnb내에 커스텀 클래스명이 적용됨
    .........
};
1
2
3
4
5
  • GNB 적용 html
<div id="stoveGnb" class="gnb-stove gnb-camp">
    ::before
    <div class="gnb-inner">
    ..........
1
2
3
4
  • 커스텀 테마파일 작성예시
.gnb-stove.gnb-camp {
    background-color: #828282;
    color: #ff7d0d;
}
.gnb-stove.gnb-camp .gnb-inner {
    width:1024px;
}
.gnb-camp .gnb-title{
    margin-right:30px
}
.....
1
2
3
4
5
6
7
8
9
10
11

# BI로그 적용 방법

<a href="..." data-st-log="로그값">이동버튼</a> // data-st-log 어트리뷰트를 통해 로그값 적용 => 클릭시 로그발송
// GNB에서 보내는 로그는 전부 click에 대한 로그입니다.
data-st-log 어트리뷰트를 통해 로그값을 지정해놓으면 클릭시 로그가 발송됩니다.
발송형태는 아래와 같습니다.
 
{
    click_area: `gnb.${logArea}`, // option에서 지정한 logArea값 사용
    click_sarea: clickSarea // data-st-log 어트리뷰트를 통해 지정된값
}
1
2
3
4
5
6
7
8
9
  • 적용 예시
    confirm

Last Updated: 2023. 10. 20. 오후 1:35:09