merge master into develop - CscListRForm.jsp FAQ 아코디언 버그 수정

This commit is contained in:
jilee4unity
2026-05-28 23:34:06 +09:00
7250 changed files with 570509 additions and 25 deletions

View File

@@ -0,0 +1,196 @@
function mobion(list, url) {
if(fn_is_empty(list)){
return false;
}
/*웹, 모바일 각각 공통적으로 호출하는 header 레이아웃에 삽입합니다.
*
* **디바이스 타입
- 웹 W, 모바일 M, 반응형 B**
* */
const commonHeaderAt = adScriptCommonHeaderAt(list);
const deviceTy = $('#adScriptDeviceTy').val()
const device = deviceTy==='sopmal'?"W":"M";
if(commonHeaderAt){
const adMediaId = commonHeaderAt.adMediaId;
let mobionScript = document.createElement('script');
mobionScript.async = true;
mobionScript.defer = true;
mobionScript.src = `https://cdn.megadata.co.kr/dist/prod/v2/mtm.js?adverId=${adMediaId}&device=${device}`
const header = document.querySelector('header')
header.appendChild(mobionScript);
}//common header end
//상품상세 페이지
if(url.includes(selectGoodsDtl)){
//# 상품상세페이지가 로드되면 아래 코드 실행
const goodsDtlFormAt = adScriptGoodsDtlFormAt(list);
if(goodsDtlFormAt){
/*
* 상품 상세페이지에 설치.
장바구니 버튼에 다음 클래스 추가 : <button class="mobonCart"
장바구니 담기 트래킹 목적.
장바구니 담기 횟수가 보고서에 나옴.
스크립트에 취소선 그은 컬럼은 제외하고 삽입
네이버페이 추적은 자동으로 됨. (클릭을 전환으로 추적. 별도 전환값으로 구분)
--> 네이버페이 추적을 제외하고 싶다면 담당자가 모비온에 별도 요청 필요
--> 네이버페이 전환값은 모비온 광고관리자에서 주문번호로 구분됨
*
* */
const goodsInnb = $('#goodsInnb').val()
const goodsNm = $('#goodsNm').val()
const cnsmrpric = $('#cnsmrpric').val()
const slepric = $('#slepricDscntAmt').val()
const goodsSttusCd = $('#goodsSttusCd').val()
const ctgryNm = $('#ctgryNm').val()
let goodsSttusAt = goodsSttusCd === '01'?'N':'Y'
//pc일 경우
let goodsImg;
if(device ==='W'){
goodsImg = $('.productDetailGallery__item').find('img').first().prop('src')
}else{
//mobile일 경우
goodsImg = $('.productDetailImages').find('img').first().prop('src')
}
let goodsDtlScript = document.createElement('script');
goodsDtlScript.type = 'text/javascript';
goodsDtlScript.innerHTML = `
window.ENP_VAR = {
collect: {}
};
ENP_VAR.collect.productCode = '${goodsInnb}';
ENP_VAR.collect.productName = '${goodsNm}';
ENP_VAR.collect.price = '${parseInt(cnsmrpric)}';
ENP_VAR.collect.dcPrice = '${parseInt(slepric)}';
ENP_VAR.collect.soldOut = '${goodsSttusAt}'; //Y: 품절제품 or N: 판매제품
ENP_VAR.collect.imageUrl = '${goodsImg}';
ENP_VAR.collect.topCategory = '${ctgryNm}';
`;
document.head.appendChild(goodsDtlScript);
}
}//상품 상세 END
//장바구니 페이지
if(url.includes(selectSpbk)) {
const cartListFormAt = adScriptCartListFormAt(list)
if(cartListFormAt){
const adScriptGoodsList = JSON.parse($('#adscriptCartGoodsList').val());
// 데이터를 저장할 배열
let productDataArray = [];
let totalPrice = 0;
let totalQty = 0;
if(!fn_is_empty(adScriptGoodsList.goodsList)){
adScriptGoodsList.goodsList.forEach(optn => {
// 객체로 저장
const productData = {
productCode: optn.goodsInnb.toString(),
productName: optn.goodsNm,
price: optn.subSlepric.toString(),
qty: optn.qy.toString()
};
// 배열에 추가
productDataArray.push(productData);
totalPrice += optn.subSlepric
totalQty += optn.qy;
});
}
const cartScript = document.createElement('script');
cartScript.type = 'text/javascript';
cartScript.innerHTML = `
window.ENP_VAR = { basket: { product: ${JSON.stringify(productDataArray)} } }; // 주문한 각 제품들을 배열에 저장
ENP_VAR.basket.totalPrice = '${totalPrice}'; // 없는 경우 단일 상품의 정보를 이용해 계산
ENP_VAR.basket.totalQty = '${totalQty}'; // 없는 경우 단일 상품의 정보를 이용해 계산
`
document.head.appendChild(cartScript);
}
}//장바구니 페이지 END
//주문 완료 페이지
if(url.includes(selectOrdrCompt)){
//# 주문완료 페이지가 로드되면 아래 코드 실행.
const purchsCompleteFormAt = adScriptPurchsCompleteFormAt(list)
if(purchsCompleteFormAt){
// 상품정보 배열
let productDataArray = [];
const adscriptVal = $('#adscript').val()
const decode = decodeURIComponent(atob(adscriptVal).split('').map(function (c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
const adscriptParse = JSON.parse(decode);
let price = parseInt(adscriptParse.total.setleAmt)
let finalOrderNo = adscriptParse.order.ordrInnb.toString()
let totalQty = 0;
for(let obj of adscriptParse.goodsList){
let productData = {
productCode: obj.goodsInnb.toString(),
productName: obj.goodsNm,
price: parseInt(obj.applyDscntAmt)/obj.ordrQy,
qty: obj.ordrQy
};
totalQty += parseInt(obj.ordrQy)
// 배열에 추가
productDataArray.push(productData);
}
let purchsComplateFormScript = document.createElement('script');
purchsComplateFormScript.innerHTML= `
window.ENP_VAR = { conversion: { product: [] } };
// 주문한 각 제품들을 배열에 저장
ENP_VAR.conversion.product.push(
// 주문 상품
${JSON.stringify(productDataArray)}
);
ENP_VAR.conversion.ordCode= '${finalOrderNo}';
ENP_VAR.conversion.totalPrice = '${price}';
ENP_VAR.conversion.totalQty = '${totalQty}';
`;
document.head.appendChild(purchsComplateFormScript);
}
}//주문 완료 페이지 END
}

View File

@@ -0,0 +1,514 @@
function loadScript(src) {
return new Promise((resolve, reject) => {
const script = document.createElement('script');
script.type = 'text/javascript';
script.src = src;
script.onload = () => resolve();
script.onerror = () => reject(new Error(`Failed to load script: ${src}`));
document.head.prepend(script);
});
}
function adn2dot0(list, url) {
if(fn_is_empty(list)){
return false;
}
/*공통헤더*/
const commonHeaderAt = adScriptCommonHeaderAt(list);
/*방문자 스크립트 */
const commonFooterAt = adScriptCommonFooterAt(list);
/*상품상세 스크립트*/
const goodsDtlFormAt = adScriptGoodsDtlFormAt(list);
//# 장바구니 페이지가 로드되면 아래 코드 실행.
const cartListFormAt = adScriptCartListFormAt(list);
/*주문완료페이지 */
const purchsCompleteFormAt = adScriptPurchsCompleteFormAt(list);
(async function() {
// Header 스크립트 로드
if (commonHeaderAt) {
try {
// adn2dot0HeaderScript 로드 및 실행 대기
await loadScript('//fin.rainbownine.net/js/across_adn_2.0.1.js');
} catch (error) {
console.error('error', error);
return; // 스크립트 로드 실패 시 이후 진행 중지
}
}
// Footer 스크립트 실행 로직
if (commonFooterAt) {
const adMediaId = commonFooterAt.adMediaId;
let adn2dot0FooterScript = document.createElement('script');
adn2dot0FooterScript.type = 'text/x-javascript';
adn2dot0FooterScript.innerHTML = `
var across_adn_contain = new fn_across_adn_contain();
var across_adn_param = [];
across_adn_param = {"ut":"Home","ui":"${adMediaId}"};
var checkAdnInterval = setInterval(() => {
if(adn_health_flag ==='ok'){
console.log('adn_health_flag',adn_health_flag);
clearInterval(checkAdnInterval);
across_adn_contain.init(across_adn_param);
}
}, 100 );
`;
// footer 태그가 없으면 새로 생성
let footer = document.getElementsByTagName('footer')[0];
if (!footer) {
footer = document.createElement('footer');
document.body.appendChild(footer);
}
footer.appendChild(adn2dot0FooterScript);
}
/*
* 상품 상세페이지에 설치.
<body></body> 태그 사이 최하단에 설치.
* */
if(url.includes(selectGoodsDtl) && goodsDtlFormAt) {
const adMediaId = goodsDtlFormAt.adMediaId
const goodsInnb = $('#goodsInnb').val()
const goodsDtl = document.createElement('script')
goodsDtl.type = '';
goodsDtl.innerHTML = `
var across_adn_item_contain = new fn_across_adn_contain();
var across_adn_item_param = [];
across_adn_item_param = {"ut":"Item","ui":"${adMediaId}", "items":{"i":"${goodsInnb}","s":""} };
var checkInterval = setInterval(() => {
if(adn_health_flag ==='ok'){
clearInterval(checkInterval);
across_adn_item_contain.init(across_adn_item_param);
}
}, 100 )
`;
document.body.appendChild(goodsDtl)
}
/* 장바구니 페이지 조회
* 장바구니 페이지에 설치.
<body></body> 태그 사이 최하단에 설치.
→ 장바구니 버튼 클릭이 아니라 페이지 조회로 공유하였음.
* */
if(url.includes(selectSpbk)){
if(cartListFormAt){
const adScriptGoodsList = JSON.parse($('#adscriptCartGoodsList').val())
// 데이터를 저장할 배열
let productDataArray = [];
let totalPrice = 0;
if(!fn_is_empty(adScriptGoodsList.goodsList)){
adScriptGoodsList.goodsList.forEach(optn => {
// 객체로 저장
const productData = {
i: optn.goodsInnb, //상품번호
c: '',
s: optn.optn, //상품명
p: optn.subSlepric, //옵션주문단가*옵션주문수량
q: optn.qy //옵션주문수량
};
// 배열에 추가
productDataArray.push(productData);
totalPrice += optn.subSlepric
});
}
let cartListScript = document.createElement('script');
const adMediaId = cartListFormAt.adMediaId
cartListScript.innerHTML= `
var across_adn_cart_contain = new fn_across_adn_contain();
var across_adn_cart_param = [];
across_adn_cart_param = {"ut":"Cart","ui":"${adMediaId}", "items":${JSON.stringify(productDataArray)}
};
var checkCartInterval = setInterval(() => {
if(adn_health_flag ==='ok'){
clearInterval(checkCartInterval);
across_adn_cart_contain.init(across_adn_cart_param);
}
}, 100 )
`;
document.body.appendChild(cartListScript);
}
}//장바구니 페이지 END
/*주문완료 페이지
*
* <body></body> 태그 사이 최하단에 설치.
→ 네이버페이를 전환추적은 제외하기로 하였음.
* */
//주문 완료 페이지
if(url.includes(selectOrdrCompt)){
//# 주문완료 페이지가 로드되면 아래 코드 실행.
if(purchsCompleteFormAt){
const adscriptVal = $('#adscript').val()
const decode = decodeURIComponent(atob(adscriptVal).split('').map(function (c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
const adscriptParse = JSON.parse(decode);
let price = parseInt(adscriptParse.total.setleAmt)
let finalOrderNo = adscriptParse.total.ordrInnb
let purchsComplateFormScript = document.createElement('script');
purchsComplateFormScript.innerHTML= `
var across_adn_order_contain = new fn_across_adn_contain();
var across_adn_order_param = [];
across_adn_order_param = {"ut":"Purchase","ui":"${purchsCompleteFormAt.adMediaId}", "uo":"${finalOrderNo}", "up":"${price}"};
var checkOrderInterval = setInterval(() => {
if(adn_health_flag ==='ok'){
clearInterval(checkOrderInterval);
across_adn_order_contain.init(across_adn_order_param);
}
}, 100 )
`;
document.body.appendChild(purchsComplateFormScript);
}
}//주문 완료 페이지 END
//회원가입 완료 페이지
/*회원가입 완료 페이지
* <body></body> 태그 사이 최하단에 설치.
* */
if(url.includes(selectJoinCompleteR)){
//# 회원가입 완료 페이지 로드되면 아래 코드 실행
const mbrRegstFormAt = adScriptMbrRegstFormAt(list);
if(mbrRegstFormAt){
const adMediaId = mbrRegstFormAt.adMediaId
let joinScript = document.createElement('script');
joinScript.innerHTML = `
var across_adn_complete_contain = new fn_across_adn_contain();
var across_adn_complete_param = [];
across_adn_complete_param = {"ut":"Complete","ui":"${adMediaId}","uo":"types1"};
var checkMemInterval = setInterval(() => {
if(adn_health_flag ==='ok'){
clearInterval(checkMemInterval);
across_adn_complete_contain.init(across_adn_complete_param);
}
}, 100 )
`;
document.body.appendChild(joinScript);
}
}//회원가입 완료 페이지 END
})();
/*클로징 패널(MO)
*모바일 버전에 설치
만약 PC와 Mobile의 URL 주소가 같다면(반응형 페이지), 해당 페이지에 PC와 Mobile 패널 둘 다 설치.
모든 페이지. <footer></footer> 태그 사이에 설치.
→ 실제로 사용
* */
const mblFooterAt = adScriptMblFooterAt(list)
if(mblFooterAt) {
const instlPgeLbl = mblFooterAt.instlPgeLbl;
let mblFooterScript = document.createElement('script');
mblFooterScript.innerHTML = `
var adn_mobile_panel_param = adn_mobile_panel_param || [];
adn_mobile_panel_param.push([${instlPgeLbl}]);
`;
// footer가 없으면 새로 생성
let footer;
if (!document.getElementsByTagName('footer').length) {
footer = document.createElement('footer');
document.body.appendChild(footer); // body에 footer 추가
} else {
footer = document.getElementsByTagName('footer')[0];
}
footer.appendChild(mblFooterScript);
let closeMblScript = document.createElement('script')
closeMblScript.type = 'text/javascript'
closeMblScript.async = true;
closeMblScript.src = "//fin.rainbownine.net/js/across_adn_closed_mobile_ad_1.0.4.js";
footer.appendChild(closeMblScript)
}
/*클로징패널 PC
* PC 버전에 설치.
만약 PC와 Mobile의 URL 주소가 같다면(반응형 페이지), 해당 페이지에 PC와 Mobile 패널 둘 다 설치.
모든 페이지. <footer></footer> 태그 사이에 설치.
→ 실제로 사용
* */
const pcFooterAt = adScriptPcFooterAt(list)
if(pcFooterAt){
const instlPgeLbl = pcFooterAt.instlPgeLbl;
let pcFooterScript = document.createElement('script');
pcFooterScript.innerHTML = `
var adn_panel_param = adn_panel_param || [];
adn_panel_param.push([${instlPgeLbl}]);
`;
// footer가 없으면 새로 생성
let footer;
if (!document.getElementsByTagName('footer').length) {
footer = document.createElement('footer');
document.body.appendChild(footer); // body에 footer 추가
} else {
footer = document.getElementsByTagName('footer')[0];
}
footer.appendChild(pcFooterScript);
let closePcScript = document.createElement('script')
closePcScript.type = 'text/javascript'
closePcScript.async = true;
closePcScript.src = "//fin.rainbownine.net/js/across_adn_closed_pc_ad_1.0.4.js";
footer.appendChild(closePcScript)
}
//main page
if(url === mainPage || url === mainIndex) {
/* 메인 패널(MO)
* 모바일 버전에 설치
만약 PC와 Mobile의 URL 주소가 같다면(반응형 페이지), 해당 페이지에 PC와 Mobile 패널 둘 다 설치.
메인 페이지에 설치.
<body></body> 태그 사이 최하단에 설치.
→ 실제로 사용
*
* */
const mblMainFormAt = adScriptMblMainFormAt(list);
if(mblMainFormAt) {
let mainMo = document.createElement('script')
const instlPgeLbl = mblMainFormAt.instlPgeLbl;
mainMo.type = 'text/javascript'
mainMo.innerHTML = `
var adn_mobile_pinad_param = adn_mobile_pinad_param || [];
adn_mobile_pinad_param.push([${instlPgeLbl}]);
`;
document.body.appendChild(mainMo)
let mainMoScript = document.createElement('script')
mainMoScript.type = 'text/javascript'
mainMoScript.async = true;
mainMoScript.src = "//fin.rainbownine.net/js/across_adn_mainpanel_mobile_ad_1.0.4.js";
document.body.appendChild(mainMoScript)
}
/*메인패널 PC
* PC 버전에 설치.
만약 PC와 Mobile의 URL 주소가 같다면(반응형 페이지), 해당 페이지에 PC와 Mobile 패널 둘 다 설치.
메인 페이지에 설치.
<body></body> 태그 사이 최하단에 설치.
→ 실제로 사용
* */
const pcMainFormAt = adScriptPCMainFormAt(list)
if(pcMainFormAt) {
const instlPgeLbl = pcMainFormAt.instlPgeLbl
const mainPc = document.createElement('script')
mainPc.type = '';
mainPc.innerHTML = `
var adn_pinad_param = adn_pinad_param || [];
adn_pinad_param.push([${instlPgeLbl}]);
`;
document.body.appendChild(mainPc)
const mainPcScript = document.createElement('script')
mainPcScript.type = 'text/javascript'
mainPcScript.async = true;
mainPcScript.src = "//fin.rainbownine.net/js/across_adn_mainpanel_pc_ad_1.0.5.js";
document.body.appendChild(mainPcScript)
}
}//main end
//상품 상세 페이지
if(url.includes(selectGoodsDtl)){
/* 상품 패널(MO)
* 모바일 버전에 설치
만약 PC와 Mobile의 URL 주소가 같다면(반응형 페이지), 해당 페이지에 PC와 Mobile 패널 둘 다 설치.
상품 상세페이지에 설치.
→ 실제로 사용
상품 상세페이지 탭 바로 위에 설치.
상세페이지 설명 맨 아래에 설치.
→ 상세페이지 탭 바로 위에, 리뷰 아래에 설치
* */
const mblGoodsDtlFormAt =adScriptMblGoodsDtlFormAt(list)
if(mblGoodsDtlFormAt) {
//상세페이지 탭 바로 위에, 리뷰 아래에 위치
const prodDtlTab = document.querySelector('.productDetailTab')
const container = document.createElement('div')
container.id = 'suggestad_mobie_wrap_container';
prodDtlTab.parentNode.insertBefore(container, prodDtlTab);
const instlPgeLbl = mblGoodsDtlFormAt.instlPgeLbl
const mblGoodsDtlForm = document.createElement('script')
mblGoodsDtlForm.type='text/javascript'
mblGoodsDtlForm.innerHTML = `
var adn_suggestad_mobile_param = adn_suggestad_mobile_param || [];
adn_suggestad_mobile_param.push([${instlPgeLbl}]);
`
container.appendChild(mblGoodsDtlForm)
const mblGoodsDtlScript = document.createElement('script')
mblGoodsDtlScript.type = 'text/javascript'
mblGoodsDtlScript.src = "//fin.rainbownine.net/js/across_adn_recommend_mobile_ad_1.0.5.js";
container.appendChild(mblGoodsDtlScript)
}
/*상품패널 PC
* PC 버전에 설치.
만약 PC와 Mobile의 URL 주소가 같다면(반응형 페이지), 해당 페이지에 PC와 Mobile 패널 둘 다 설치.
상품 상세페이지에 설치.
→ 실제로 사용
상품 상세페이지 탭 바로 위에 설치.
상세페이지 설명 맨 아래에 설치.
→ 상세페이지 탭 바로 위에, 리뷰 아래에 설치
* */
const pcGoodsDtlFormAt =adScriptPcGoodsDtlFormAt(list)
if(pcGoodsDtlFormAt) {
//상세페이지 탭 바로 위에, 리뷰 아래에 위치
const prodDtlTab = document.querySelector('.productDetailTab')
const container = document.createElement('div')
container.id = 'suggestad_wrap_container';
prodDtlTab.parentNode.insertBefore(container, prodDtlTab);
const pcGoodsDtlForm = document.createElement('script')
const instlPgeLbl = pcGoodsDtlFormAt.instlPgeLbl
pcGoodsDtlForm.innerHTML = `
var adn_suggestad_param = adn_suggestad_param || [];
adn_suggestad_param.push([${instlPgeLbl}]);
`
container.appendChild(pcGoodsDtlForm)
const pcGoodsDtlScript = document.createElement('script')
pcGoodsDtlScript.type = 'text/javascript'
pcGoodsDtlScript.src = "//fin.rainbownine.net/js/across_adn_recommend_pc_ad_1.0.5.js";
container.appendChild(pcGoodsDtlScript)
}
}
}

View File

@@ -0,0 +1,118 @@
function criteo(list, url) {
if(fn_is_empty(list)){
return false;
}
/*
* Criteo OneTag를 활성화하려면 로더 스크립트(Loader script)가 필요합니다.
* 아래 스크립트를 사이트의 '헤드(head)' 부분에 위치시켜 모든 페이지에 포함되도록 해야, 동시에 로딩되는 다른 스크립트로 인해 지연이 발생하지 않습니다.
* 페이지에서 한번만 트리거되면 되고, 단일 페이지에서 여러차례 트리거되어도 상관없습니다.
* */
const commonHeaderAt = adScriptCommonHeaderAt(list);
if(commonHeaderAt){
const adMediaId = commonHeaderAt.adMediaId;
let criteoScript = document.createElement('script');
criteoScript.type ='text/javascript'
criteoScript.async = true;
criteoScript.src = `//dynamic.criteo.com/js/ld/ld.js?a=${adMediaId}`;
document.head.appendChild(criteoScript);
}
//상품상세 페이지
if(url.includes(selectGoodsDtl)){
//# 상품상세페이지에서 장바구니 담기 버튼을 클릭할 때 아래 코드 실행. addEventListner 등 사용
const addCartEventAt = adScriptAddCartEventAt(list);
if(addCartEventAt){
addCartStorage(addCartEventAt)
}
}//상품 상세 END
//주문 완료 페이지
if(url.includes(selectOrdrCompt)){
//# 주문완료 페이지가 로드되면 아래 코드 실행.
const purchsCompleteFormAt = adScriptPurchsCompleteFormAt(list)
if(purchsCompleteFormAt){
let purchsComplateFormScript = document.createElement('script');
let adMediaId = purchsCompleteFormAt.adMediaId
// 상품정보 배열
let productDataArray = [];
const adscriptVal = $('#adscript').val()
const decode = decodeURIComponent(atob(adscriptVal).split('').map(function (c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
const adscriptParse = JSON.parse(decode);
let finalOrderNo = adscriptParse.total.ordrInnb
const orderInfo = adscriptParse.order
const email = orderInfo.ordrrEmail.trim().replaceAll(' ','').toLowerCase()
for(let obj of adscriptParse.goodsList){
let productData = {
id: obj.goodsInnb.toString(),
price: parseInt(obj.applyDscntAmt)/obj.ordrQy,
quantity: obj.ordrQy
};
// 배열에 추가
productDataArray.push(productData);
}
//우편번호
let zipCode = '';
for(let obj of adscriptParse.shippingList){
if(!fn_is_empty(obj.dlvylcZip)){
zipCode = obj.dlvylcZip
}
}
purchsComplateFormScript.innerHTML= `
window.criteo_q = window.criteo_q || [];
var deviceType = /iPad/.test(navigator.userAgent) ? "t" : /Mobile|iP(hone|od)|Android|BlackBerry|IEMobile|Silk/.test(navigator.userAgent) ? "m" : "d";
window.criteo_q.push(
{ event: "setAccount", account: ${adMediaId}},
// To Do 1. 현재 유저의 이메일 주소(공백 제거 및 소문자로 변환 후) 전달. 유저의 이메일을 알수 없는 상황이면 빈 문자열로 전달
{ event: "setEmail", email: "${email}", hash_method: "sha256" },
{ event: "setEmail", email: "${email}", hash_method: "md5" },
// To Do 2. 현재 유저의 저장된 배송지 우편번호. 유저의 배송지 우편번호를 알수 없는 상황이면 빈 문자열로 전달
{ event: "setZipcode", zipcode: "${zipCode}" },
{ event: "setSiteType", type: deviceType},
// To Do 3. 확인 또는 주문 번호를 전달. 확인 또는 주문 번호가 없을 경우, Math.floor(Math.random()*99999999999)와 같이 랜덤한 숫자를 만들어 전달
{ event: "trackTransaction", id: ${finalOrderNo}
, item: ${JSON.stringify(productDataArray)} // 상품정보
// To Do 4. 현재 유저가 추가한 상품의 정보(상품 ID, 상품 단가, 추가한 수량)를 아래 객체 포멧으로 전달
// 상품 ID는 태그에서 전달되는 상품 ID와 피드에서 전달 주신 상품 ID가 매칭이 되어야 함
// 상품 단가는 유저가 선택한 상품의 단가로 전달(옵션 추가 가격 및 할인 가격 포함). 통화 기호 및 천단위 구분자는 제외
// 수량은 유저가 선택한 값으로 전달
// Tip 1. 복잡한 추가 구성 상품 및 옵션으로 인해 제대로된 상품 단가 및 수량 전달이 어려운 경우, 최종 가격으로 전달 후 수량은 1로 전달 해주셔도 됩니다.
// Tip 2. 크리테오는 이 세일즈 태그에서 전달 주는 상품 단가와 수량을 곱하기하여 매출을 리포팅 하오니, 최대한 정확하게 전달이 중요합니다.
//{id: "상품번호", price: 옵션주문단가, quantity: 옵션주문수량 }
// 장바구니에 추가 된 각 상품에 대한 새 객체 추가. 새 객체를 추가하실때, 객체 사이를 쉼표(,)로 구분
}
);
`;
document.head.appendChild(purchsComplateFormScript);
}
}//주문 완료 페이지 END
}

View File

@@ -0,0 +1,121 @@
//구글애즈
function googleAds(list, url){
if(fn_is_empty(list)){
return false;
}
/*
* * 구글 애즈 공통 헤더
<!-- Google tag (gtag.js) -->
* */
const commonHeaderAt = adScriptCommonHeaderAt(list);
if(commonHeaderAt){
const adMediaId = commonHeaderAt.adMediaId;
let gtagScript = document.createElement('script');
gtagScript.async = true;
gtagScript.src = 'https://www.googletagmanager.com/gtag/js?id=' + adMediaId;
document.head.appendChild(gtagScript);
// gtag 설정
let configScript = document.createElement('script');
configScript.innerHTML = `
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '` + adMediaId + `');
`;
document.head.appendChild(configScript);
}
//상품 상세 페이지
if(url.includes(selectGoodsDtl)){
//# 상품상세페이지에서 장바구니 담기 버튼을 클릭할 때 아래 코드 실행. addEventListner 등 사용
const addCartEventAt = adScriptAddCartEventAt(list);
if(addCartEventAt){
addCartStorage(addCartEventAt)
}
//# 네이버페이 버튼 클릭 시 아래 코드 실행.
const nPayEventAt = adScriptNpayEventAt(list)
if(nPayEventAt){
addNpayStorage(nPayEventAt)
}
}//상품 상세 END
//주문 완료 페이지
if(url.includes(selectOrdrCompt)){
//# 주문완료 페이지가 로드되면 아래 코드 실행.
const PurchsCompleteFormAt = adScriptPurchsCompleteFormAt(list);
if(PurchsCompleteFormAt){
let finalOrderNo = 0;
let price = 0;
const adscriptVal = $('#adscript').val()
const decode = decodeURIComponent(atob(adscriptVal).split('').map(function (c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
const adscriptParse = JSON.parse(decode);
price = parseInt(adscriptParse.total.setleAmt)
finalOrderNo = adscriptParse.order.ordrInnb.toString()
let purchsComplateFormScript = document.createElement('script');
const adMediaId = PurchsCompleteFormAt.adMediaId
const adLbl = PurchsCompleteFormAt.instlPgeLbl
purchsComplateFormScript.innerHTML= `
gtag('event', 'conversion', {
'send_to': '${adMediaId}/${adLbl}',
'value': ${price},
'currency': 'KRW',
'transaction_id':'${finalOrderNo}'
});
`;
document.head.appendChild(purchsComplateFormScript);
}
}//주문 완료 페이지 END
//회원가입 완료 페이지
if(url.includes(selectJoinCompleteR)){
//# 회원가입 완료 페이지 로드되면 아래 코드 실행
const mbrRegstFormAt = adScriptMbrRegstFormAt(list)
if(mbrRegstFormAt){
let joinScript = document.createElement('script');
const adMediaId = mbrRegstFormAt.adMediaId
const adLbl = mbrRegstFormAt.instlPgeLbl
// 회원가입 방법 (예: general, kakao 등)
joinScript.innerHTML = `
gtag('event', 'conversion', {
'send_to': '${adMediaId}/${adLbl}',
'value': 1.0,
'currency': 'KRW'
});
`;
document.head.appendChild(joinScript);
}
}
}//구글애즈END

View File

@@ -0,0 +1,272 @@
//구글 애널리틱스
function googleAnalytics(list, url){
if(fn_is_empty(list)){
return false;
}
/*
* * 구글 애널리틱스 공통 헤더
<!-- Google tag (gtag.js) -->
태그를 복사한 후 웹사이트의 각 페이지 코드에서 <head> 요소 바로 다음에 붙여넣으세요.
* */
const commonHeaderAt = adScriptCommonHeaderAt(list);
if(commonHeaderAt){
const adMediaId = commonHeaderAt.adMediaId;
let gtagScript = document.createElement('script');
gtagScript.async = true;
gtagScript.src = 'https://www.googletagmanager.com/gtag/js?id=' + adMediaId;
document.head.appendChild(gtagScript);
// gtag 설정
let configScript = document.createElement('script');
configScript.innerHTML = `
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '` + adMediaId + `');
`;
document.head.appendChild(configScript);
}
//상품 상세 페이지
if(url.includes(selectGoodsDtl)){
const goodsInnb = $('#goodsInnb').val();
const goodsNm = $('#goodsNm').val();
let price = parseInt($('#slepricDscntAmt').val());
//# 상품상세페이지가 로드되면 아래 코드 실행
const goodsDtlFormAt = adScriptGoodsDtlFormAt(list)
if(goodsDtlFormAt){
let goodsDtlScript = document.createElement('script')
goodsDtlScript.innerHTML=`
gtag("event", "view_item", {
currency: "KRW",
value: ${price},
items: [
{
item_id: ${goodsInnb},
item_name: '${goodsNm}',
price: ${price},
quantity: 1
}
]
});
`;
document.head.appendChild(goodsDtlScript);
}
//# 상품상세페이지에서 장바구니 담기 버튼을 클릭할 때 아래 코드 실행. addEventListner 등 사용
const addCartEventAt = adScriptAddCartEventAt(list);
if(addCartEventAt){
addCartStorage(addCartEventAt);
}
//# 네이버페이 버튼 클릭 시 아래 코드 실행.
const npayEventAt = adScriptNpayEventAt(list);
if(npayEventAt){
addNpayStorage(npayEventAt);
}
}//상품 상세 END
//장바구니 페이지
if(url.includes(selectSpbk)){
//# 장바구니 페이지가 로드되면 아래 코드 실행.
const cartListFormAt = adScriptCartListFormAt(list)
if(cartListFormAt){
//JSON PARSE
const adScriptGoodsList = JSON.parse($('#adscriptCartGoodsList').val())
// 데이터를 저장할 배열
let productDataArray = [];
let totalPrice = 0;
if(!fn_is_empty(adScriptGoodsList.goodsList)){
adScriptGoodsList.goodsList.forEach(optn => {
// 객체로 저장
const productData = {
item_id: optn.goodsInnb,
item_name: optn.goodsNm,
item_variant: optn.optn,
price: optn.subSlepric,
quantity: optn.qy
};
// 배열에 추가
productDataArray.push(productData);
totalPrice += optn.subSlepric
});
}
let cartListScript = document.createElement('script');
cartListScript.innerHTML= `
gtag("event", "view_cart", {
currency: "KRW",
value: ${totalPrice},
items: ${JSON.stringify(productDataArray)}
});
`;
document.head.appendChild(cartListScript);
}
}//장바구니 페이지 END
//주문서 작성 페이지
if(url.includes(selectNmbrPurchsForm) || url.includes(selectMbrPurchsForm)){
//# 주문서 페이지가 로드되면 아래 코드 실행
const purchsFormAt = adScriptPurchsFormAt(list);
if(purchsFormAt){
let purchsFormScript = document.createElement('script');
// 총 결재 금액
let price = $('#setleAmtSapn').text().replace(",","");
// 상품정보 배열
let productDataArray = [];
if($('#adScriptDeviceTy').val() ==='sopmal'){ //pc일 경우
$('#goodsList tr').each(function(){
// 객체로 저장
let productData1 = {
item_id: $(this).find(".goodsInnb").val(),
item_name: $(this).find(".cartItem__productTitle").text(),
item_variant: $(this).find(".cartItem__productOption").text(),
price: $(this).find(".cartItem__afterPrice").children('.comma').text().replace(",",""),
quantity: $(this).find(".qy").val()
};
// 배열에 추가
productDataArray.push(productData1);
});
}else{ // 모바일 일 경우
$('#goodsList .orderInfo__item').each(function(){
// 객체로 저장
let productData1 = {
item_id: $(this).find(".goodsInnb").val(),
item_name: $(this).find(".cartItem__productTitle").text(),
item_variant: $(this).find(".cartItem__productOption").text().replaceAll(' ', '').trim(),
price: $(this).find(".cartItem__afterPrice").children('.comma').text().replace(",",""),
quantity: $(this).find(".qy").val()
};
// 배열에 추가
productDataArray.push(productData1);
});
}
purchsFormScript.innerHTML= `
gtag("event", "begin_checkout", {
currency: "KRW",
value: ${price}, //총결제금액
items: ${JSON.stringify(productDataArray)} // 상품정보
});
`;
document.head.appendChild(purchsFormScript);
}
}//주문서 작성 페이지 END
//주문 완료 페이지
if(url.includes(selectOrdrCompt)){
//# 주문완료 페이지가 로드되면 아래 코드 실행.
const purchsCompleteFormAt = adScriptPurchsCompleteFormAt(list);
if(purchsCompleteFormAt){
// // 상품정보 배열
let productDataArray = [];
const adscriptVal = $('#adscript').val()
const decode = atob(adscriptVal)
const adscriptParse = JSON.parse(decode);
let price = parseInt(adscriptParse.total.setleAmt)
let finalOrderNo = adscriptParse.order.ordrInnb.toString()
let purchsComplateFormScript = document.createElement('script');
for(let obj of adscriptParse.goodsList){
let productData = {
item_id: obj.goodsInnb.toString(),
item_name: obj.goodsNm,
item_variant: obj.optnNm,
price: parseInt(obj.applyDscntAmt)/obj.ordrQy,
quantity: obj.ordrQy
};
// 배열에 추가
productDataArray.push(productData);
}
purchsComplateFormScript.innerHTML= `
gtag("event", "purchase", {
transaction_id: '${finalOrderNo}',
currency: "KRW",
value: ${price},
items: ${JSON.stringify(productDataArray)} // 상품정보
});
`;
document.head.appendChild(purchsComplateFormScript);
}
}//주문 완료 페이지 END
//# 취소/환불 요청 페이지에서 취소/환불 요청을 할 경우 아래 코드 실행
const refundReqEventAt = adScriptRefundReqEventAt(list);
if(refundReqEventAt){
addReturnReqStorage(refundReqEventAt)
}
//회원가입 완료 페이지
if(url.includes(selectJoinCompleteR)){
//# 회원가입 완료 페이지 로드되면 아래 코드 실행
const mbrRegstFormAt = adScriptMbrRegstFormAt(list);
if(mbrRegstFormAt){
let joinScript = document.createElement('script');
// 회원가입 방법 (예: general, kakao 등)
const joinMthCd = $('#joinMthCd').val()
joinScript.innerHTML = `
gtag("event", "sign_up", {
method: "${joinMthCd}"
});
`;
document.head.appendChild(joinScript);
}
}
}

View File

@@ -0,0 +1,312 @@
//구글태그매니저
function googleTagManager(list, url){
const commonHeaderAt= adScriptCommonHeaderAt(list)
if(commonHeaderAt){
const adMediaId = commonHeaderAt.adMediaId;
//공통헤더
//1. 페이지의 <head>에서 최대한 위에 이 코드를 붙여넣으세요.
// loadGTMCommonHeader(adMediaId)
function get_cookie(name) {
let value = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
return value? value[2] : null;
}
const agentId = get_cookie('gc_agent_id')
let agentScript = document.createElement('script')
agentScript.innerHTML=`
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({
agent_id: '${agentId}'
});
`;
let headFucScript = document.createElement('script')
headFucScript.innerHTML='(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({\'gtm.start\':\n' +
'new Date().getTime(),event:\'gtm.js\'});var f=d.getElementsByTagName(s)[0],\n' +
'j=d.createElement(s),dl=l!=\'dataLayer\'?\'&l=\'+l:\'\';j.async=true;j.src=\n' +
'\'https://www.googletagmanager.com/gtm.js?id=\'+i+dl;f.parentNode.insertBefore(j,f);\n' +
`})(window,document,'script','dataLayer','${adMediaId}');`
document.head.prepend(headFucScript);
// 2. 여는 <body> 태그 바로 뒤에 코드를 붙여넣으세요.
//<!-- Google Tag Manager (noscript) -->
let configScript = document.createElement('noscript');
//let configScript;
let iframeEle = document.createElement('iframe')
iframeEle.src = 'https://www.googletagmanager.com/ns.html?id=' + adMediaId
iframeEle.height = '0'
iframeEle.width = '0'
iframeEle.style = 'display:none; visibility:hidden'
configScript.append(iframeEle)
document.body.prepend(agentScript);
document.body.prepend(configScript);
}
//상품 상세 페이지
if(url.includes(selectGoodsDtl)){
const goodsInnb = $('#goodsInnb').val()
const goodsNm = $('#goodsNm').val()
//# 상품상세페이지가 로드되면 아래 코드 실행
const goodsDtlFormAt = adScriptGoodsDtlFormAt(list);
if(goodsDtlFormAt){
const price = $('#_salesPrice').find('.comma').text().replaceAll(",","")
let goodsDtlScript = document.createElement('script')
goodsDtlScript.innerHTML=`
dataLayer.push({ ecommerce: null });
dataLayer.push({
event: "view_item",
ecommerce: {
currency: "KRW",
value: ${price},
items: [
{
item_id: ${goodsInnb},
item_name: '${goodsNm}',
price: ${price},
quantity: 1
}
]
}
});
`;
document.head.appendChild(goodsDtlScript);
}
//# 상품상세페이지에서 장바구니 담기 버튼을 클릭할 때 아래 코드 실행. addEventListner 등 사용
const addCartEventAt = adScriptAddCartEventAt(list)
if(addCartEventAt){
addCartStorage(addCartEventAt);
}
//# 네이버페이 버튼 클릭 시 아래 코드 실행.
const npayEventAt= adScriptNpayEventAt(list)
if(npayEventAt){
addNpayStorage(npayEventAt);
}
}//상품 상세 END
//장바구니 페이지
if(url.includes(selectSpbk)){
//# 장바구니 페이지가 로드되면 아래 코드 실행.
const cartListFormAt = adScriptCartListFormAt(list)
if(cartListFormAt){
//JSON PARSE
const adScriptGoodsList = JSON.parse($('#adscriptCartGoodsList').val())
// 데이터를 저장할 배열
let productDataArray = [];
let totalPrice = 0;
if(!fn_is_empty(adScriptGoodsList.goodsList)){
adScriptGoodsList.goodsList.forEach(optn => {
// 객체로 저장
const productData = {
item_id: optn.goodsInnb,
item_name: optn.goodsNm,
item_variant: optn.optn,
price: optn.subSlepric,
quantity: optn.qy
};
// 배열에 추가
productDataArray.push(productData);
totalPrice += optn.subSlepric
});
}
let cartListScript = document.createElement('script');
cartListScript.innerHTML= `
dataLayer.push({ ecommerce: null });
dataLayer.push({
event: "view_cart",
ecommerce: {
currency: "KRW",
value: ${totalPrice},
items: ${JSON.stringify(productDataArray)}
}
});
`;
document.head.appendChild(cartListScript);
}
}//장바구니 페이지 END
//주문서 작성 페이지
//# 주문서 페이지가 로드되면 아래 코드 실행. order/settle 페이지에 삽입
if(url.includes(selectNmbrPurchsForm) || url.includes(selectMbrPurchsForm) ){
//# 주문서 페이지가 로드되면 아래 코드 실행
const purchsFormAt = adScriptPurchsFormAt(list)
if(purchsFormAt){
// 총 결재 금액
let price = $('#setleAmtSapn').text().replace(",","");
// 상품정보 배열
let productDataArray = [];
if($('#adScriptDeviceTy').val() ==='sopmal'){ //pc일 경우
$('#goodsList tr').each(function(){
// 객체로 저장
let productData1 = {
item_id: $(this).find(".goodsInnb").val(),
item_name: $(this).find(".cartItem__productTitle").text(),
item_variant: $(this).find(".cartItem__productOption").text(),
price: $(this).find(".cartItem__afterPrice").children('.comma').text().replace(",",""),
quantity: $(this).find(".qy").val()
};
// 배열에 추가
productDataArray.push(productData1);
});
}else{ // 모바일 일 경우
$('#goodsList .orderInfo__item').each(function(){
// 객체로 저장
let productData1 = {
item_id: $(this).find(".goodsInnb").val(),
item_name: $(this).find(".cartItem__productTitle").text(),
item_variant: $(this).find(".cartItem__productOption").text().replaceAll(' ', '').trim(),
price: $(this).find(".cartItem__afterPrice").children('.comma').text().replace(",",""),
quantity: $(this).find(".qy").val()
};
// 배열에 추가
productDataArray.push(productData1);
});
}
let purchsFormScript = document.createElement('script');
purchsFormScript.innerHTML= `
dataLayer.push({ ecommerce: null });
dataLayer.push({
event: "begin_checkout",
ecommerce: {
currency: "KRW",
value: ${price},
items: ${JSON.stringify(productDataArray)} // 상품정보
}
});
`;
document.head.appendChild(purchsFormScript);
}
}//주문서 작성 페이지 END
//# 취소/환불 요청 페이지에서 취소/환불 요청을 할 경우 아래 코드 실행
const refundReqEventAt = adScriptRefundReqEventAt(list);
if(refundReqEventAt){
addReturnReqStorage(refundReqEventAt)
}
//# 주문완료 페이지가 로드되면 아래 코드 실행.
const purchsCompleteFormAt = adScriptPurchsCompleteFormAt(list)
if(url.includes(selectOrdrCompt)){
if(purchsCompleteFormAt){
// 상품정보 배열
let productDataArray = [];
const adscriptVal = $('#adscript').val()
const decode = decodeURIComponent(atob(adscriptVal).split('').map(function (c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
const adscriptParse = JSON.parse(decode);
let price = parseInt(adscriptParse.total.setleAmt)
let finalOrderNo = adscriptParse.order.ordrInnb.toString()
for(let obj of adscriptParse.goodsList){
let productData = {
item_id: obj.goodsInnb.toString(),
item_name: obj.goodsNm,
item_variant: obj.optnNm,
price: parseInt(obj.applyDscntAmt)/obj.ordrQy,
quantity: obj.ordrQy
};
// 배열에 추가
productDataArray.push(productData);
}
let purchsComplateFormScript = document.createElement('script');
purchsComplateFormScript.innerHTML= `
dataLayer.push({ ecommerce: null });
dataLayer.push({
event: "purchase",
ecommerce: {
transaction_id: '${finalOrderNo}',
currency: "KRW",
value: ${price},
items: ${JSON.stringify(productDataArray)} /*상품정보*/
}
});
`;
document.head.appendChild(purchsComplateFormScript);
}//주문 완료 페이지 END
}
//회원가입 완료 페이지
if(url.includes(selectJoinCompleteR)){
//# 회원가입 완료 페이지 로드되면 아래 코드 실행
const mbrRegstFormAt = adScriptMbrRegstFormAt(list)
if(mbrRegstFormAt){
let joinScript = document.createElement('script');
// 회원가입 방법 (예: general, kakao 등)
const joinMthCd = $('#joinMthCd').val()
const adscriptMbrId = $('#adscriptMbrId').val()
joinScript.innerHTML = `
dataLayer.push({
event: "sign_up",
method: "${joinMthCd}",
user: {
user_id: "${adscriptMbrId}"
}
});
`;
document.head.appendChild(joinScript);
}
}
}

View File

@@ -0,0 +1,122 @@
function kakaoMoments(list, url) {
if(fn_is_empty(list)){
return false;
}
const commonHeaderAt = adScriptCommonHeaderAt(list);
(async function() {
if(commonHeaderAt){
const adMediaId = commonHeaderAt.adMediaId;
try {
// adn2dot0HeaderScript 로드 및 실행 대기
await loadScript('//t1.daumcdn.net/kas/static/kp.js');
} catch (error) {
console.error('error', error);
return; // 스크립트 로드 실패 시 이후 진행 중지
}
let kakaoScript2 = document.createElement('script')
kakaoScript2.type ='text/javascript';
kakaoScript2.innerHTML = `kakaoPixel('${adMediaId}').pageView();`;
document.head.appendChild(kakaoScript2);
}//common header end
//주문 완료 페이지
if(url.includes(selectOrdrCompt)){
//# 주문완료 페이지가 로드되면 아래 코드 실행.
const purchsCompleteFormAt = adScriptPurchsCompleteFormAt(list)
if(purchsCompleteFormAt){
let purchsComplateFormScript = document.createElement('script');
const adMediaId = purchsCompleteFormAt.adMediaId
// 상품정보 배열
let productDataArray = [];
const adscriptVal = $('#adscript').val()
const decode = decodeURIComponent(atob(adscriptVal).split('').map(function (c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
const adscriptParse = JSON.parse(decode);
let price = parseInt(adscriptParse.total.setleAmt)
let totalOrdrQy = 0;
for(let obj of adscriptParse.goodsList){
let productData = {
id: obj.goodsInnb.toString(),
name: obj.goodsNm,
quantity: obj.ordrQy,
price: parseInt(obj.applyDscntAmt)/obj.ordrQy,
};
// 배열에 추가
totalOrdrQy += obj.ordrQy
productDataArray.push(productData);
}
purchsComplateFormScript.innerHTML= `
kakaoPixel('${adMediaId}').pageView();
kakaoPixel('${adMediaId}').purchase({
total_quantity: "${totalOrdrQy}", // 주문 내 상품 개수(optional)
total_price: ${price}, // 주문 총 가격(optional)
currency: "KRW", // 주문 가격의 화폐 단위(optional, 기본 값은 KRW)
products: ${JSON.stringify(productDataArray)} // 상품정보
});
`;
document.head.appendChild(purchsComplateFormScript);
}
}//주문 완료 페이지 END
//회원가입 완료 페이지
if(url.includes(selectJoinCompleteR)){
//# 회원가입 완료 페이지 로드되면 아래 코드 실행
const mbrRegstFormAt = adScriptMbrRegstFormAt(list);
if(mbrRegstFormAt){
const adMediaId = mbrRegstFormAt.adMediaId
let joinScript = document.createElement('script');
joinScript.innerHTML = `
kakaoPixel('${adMediaId}').pageView();
kakaoPixel('${adMediaId}').completeRegistration();
`;
document.head.appendChild(joinScript);
}
}
})();
//상품상세 페이지
if(url.includes(selectGoodsDtl)){
//# 상품상세페이지에서 장바구니 담기 버튼을 클릭할 때 아래 코드 실행. addEventListner 등 사용
const addCartEventAt = adScriptAddCartEventAt(list);
if(addCartEventAt){
addCartStorage(addCartEventAt)
}
}//상품 상세 END
}

View File

@@ -0,0 +1,123 @@
function meta(list, url) {
if(fn_is_empty(list)){
return false;
}
const commonHeaderAt = adScriptCommonHeaderAt(list);
if(commonHeaderAt){
const adMediaId = commonHeaderAt.adMediaId;
let metaScript = document.createElement('script');
metaScript.async = true;
metaScript.innerHTML = `
!function(f,b,e,v,n,t,s)
{if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};
if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(t,s)}(window, document,'script',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('init', '${adMediaId}');
fbq('track', 'PageView');
`;
document.head.appendChild(metaScript);
let configScript = document.createElement('noscript');
//let configScript;
configScript.innerHTML
= '<img height="1" width="1" style="display:none" ' + 'src="https://www.facebook.com/tr?id=' + adMediaId +'&ev=PageView&noscript=1"/>';
document.head.appendChild(configScript);
}//common header end
//상품상세 페이지
if(url.includes(selectGoodsDtl)){
//# 상품상세페이지에서 장바구니 담기 버튼을 클릭할 때 아래 코드 실행. addEventListner 등 사용
const addCartEventAt = adScriptAddCartEventAt(list);
if(addCartEventAt){
addCartStorage(addCartEventAt)
}
//# 네이버페이 버튼 클릭 시 아래 코드 실행.
const npayEventAt = adScriptNpayEventAt(list);
if(npayEventAt){
addNpayStorage(npayEventAt)
}
}//상품 상세 END
//주문 완료 페이지
if(url.includes(selectOrdrCompt)){
//# 주문완료 페이지가 로드되면 아래 코드 실행.
const purchsCompleteFormAt = adScriptPurchsCompleteFormAt(list)
if(purchsCompleteFormAt){
// 상품정보 배열
let productDataArray = [];
const adscriptVal = $('#adscript').val()
const decode = decodeURIComponent(atob(adscriptVal).split('').map(function (c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
const adscriptParse = JSON.parse(decode);
let price = parseInt(adscriptParse.total.setleAmt)
for(let obj of adscriptParse.goodsList){
let productData = {
id: obj.goodsInnb.toString(),
name: obj.goodsNm,
quantity: obj.ordrQy
};
// 배열에 추가
productDataArray.push(productData);
}
let purchsComplateFormScript = document.createElement('script');
purchsComplateFormScript.innerHTML= `
fbq('track', 'Purchase', {
value: ${price},
currency: 'KRW',
contents: ${JSON.stringify(productDataArray)} // 상품정보
});
`;
document.head.appendChild(purchsComplateFormScript);
}
}//주문 완료 페이지 END
//회원가입 완료 페이지
if(url.includes(selectJoinCompleteR)){
//# 회원가입 완료 페이지 로드되면 아래 코드 실행
const mbrRegstFormAt = adScriptMbrRegstFormAt(list);
if(mbrRegstFormAt){
let joinScript = document.createElement('script');
joinScript.innerHTML = `
fbq('track', 'CompleteRegistration');
`;
document.head.appendChild(joinScript);
}
}
}

View File

@@ -0,0 +1,177 @@
function naverSrchAds(list, url) {
if(fn_is_empty(list)){
return false;
}
const commonHeaderAt = adScriptCommonHeaderAt(list);
if(commonHeaderAt){
const adMediaId = commonHeaderAt.adMediaId;
const value = document.cookie.match('(^|;) ?' + "originalHost" + '=([^;]*)(;|$)');
let hostCookie = value? value[2] : "";
//스키마정보 제거
hostCookie = hostCookie.replace(/^(https?:\/\/)/, "");
// (1) wcslog.js import
let naverSrchAddScript = document.createElement('script');
naverSrchAddScript.type = 'text/javascript'
naverSrchAddScript.src = '//wcs.naver.net/wcslog.js'
document.head.appendChild(naverSrchAddScript);
let naverSrchAdd2Script = document.createElement('script');
naverSrchAdd2Script.type = 'text/javascript'
naverSrchAdd2Script.innerHTML = `
var checkNaverAdnPurchsInterval = setInterval(() => {
if (window.wcs) {
if(!wcs_add) var wcs_add = {};
// (2) 각 사이트별 식별자 설정
window.wcs_add = {wa : "${adMediaId}"}; // 사이트 식별자 (=네이버공통키, na_account_id)
// (3) 광고 전환추적을 위한 cookie domain설정
wcs.inflow("${hostCookie}"); // ex. abc-motors.com
// 아래 Script는 개별 이벤트 발생시 로그를 전송하기 위한 구역. 결제 완료 페이지이므로, PV 이벤트 와 결제완료 전환 이벤트를 전송함
clearInterval(checkNaverAdnPurchsInterval);
// (4) PV 이벤트 전송
wcs_do(); // PV 이벤트 전송
}
}, 100 );
`;
document.head.appendChild(naverSrchAdd2Script);
}//common header end
//상품상세 페이지
if(url.includes(selectGoodsDtl)){
//장바구니 담기
const addCartEventAt = adScriptAddCartEventAt(list);
if(addCartEventAt){
addCartStorage(addCartEventAt)
}
//위시리스트 등록
const wslistEventAt = adScriptAddWslistEventAt(list)
if(wslistEventAt){
addWslistStorage(wslistEventAt)
}
}
//주문 완료 페이지
if(url.includes(selectOrdrCompt)){
//# 주문완료 페이지가 로드되면 아래 코드 실행.
const purchsCompleteFormAt = adScriptPurchsCompleteFormAt(list)
if(purchsCompleteFormAt){
let naverSrchAddScript = document.createElement('script');
naverSrchAddScript.type = 'text/x-javascript'
naverSrchAddScript.src = '//wcs.naver.net/wcslog.js'
document.head.appendChild(naverSrchAddScript);
// 상품정보 배열
let productDataArray = [];
const adscriptVal = $('#adscript').val()
const decode = decodeURIComponent(atob(adscriptVal).split('').map(function (c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
const adscriptParse = JSON.parse(decode);
let totalPrice = parseInt(adscriptParse.total.setleAmt)
let finalOrderNo = adscriptParse.order.ordrInnb.toString()
for(let obj of adscriptParse.goodsList){
let productData = {
id: obj.goodsInnb.toString(),
name: obj.goodsNm,
payAmount: parseInt(obj.applyDscntAmt)
};
// 배열에 추가
productDataArray.push(productData);
}
// (5) 전환 이벤트 전송, (예) 결제완료 이벤트 전송. 페이지뷰 스크립트와 합쳐지면 됨
let purchsComplateFormScript = document.createElement('script');
purchsComplateFormScript.innerHTML =`
var checkNaverAdnMemberInterval = setInterval(() => {
if(window.wcs) {
if(!wcs_add) var wcs_add = {};
wcs_add["wa"] = '${purchsCompleteFormAt.adMediaId}';
var _conv = {}; /*전환 이벤트 정보 담을 object 생성*/
_conv.type = "purchase"; /*전환 이벤트의 종류 설정*/
_conv.value = "${totalPrice}";
_conv.id = "${finalOrderNo}"; /*주문번호*/
_conv.items = ${JSON.stringify(productDataArray)};
clearInterval(checkNaverAdnMemberInterval);
wcs.trans(_conv); /*전환 이벤트 정보를 담은 object를 서버에 전송*/
}
}, 100 );
`;
document.head.appendChild(purchsComplateFormScript);
}
}//주문 완료 페이지 END
//회원가입 완료 페이지
if(url.includes(selectJoinCompleteR)){
//# 회원가입 완료 페이지 로드되면 아래 코드 실행
const mbrRegstFormAt = adScriptMbrRegstFormAt(list);
if(mbrRegstFormAt){
const joinScript = document.createElement('script');
joinScript.type = 'text/javascript'
joinScript.innerHTML = `
var checkNaverAdnInterval = setInterval(() => {
if(window.wcs){
if(!wcs_add) var wcs_add = {};
wcs_add["wa"] = '${mbrRegstFormAt.adMediaId}';
var _conv = {};
_conv.type = 'sign_up';
clearInterval(checkNaverAdnInterval);
wcs.trans(_conv);
}
}, 100 );
`;
document.head.appendChild(joinScript);
}
}
}

View File

@@ -0,0 +1,227 @@
function targetingGates(list, url) {
if(fn_is_empty(list)){
return false;
}
const commonHeaderAt = adScriptCommonHeaderAt(list);
if(commonHeaderAt){
const adMediaId = commonHeaderAt.adMediaId;
const mbrIdHash = $('#adscriptMbrId').val()
let tgDiv = document.createElement('div');
tgDiv.id = 'wp_tg_cts';
tgDiv.style.display ='none';
document.body.appendChild(tgDiv);
let tgScript = document.createElement('script');
tgScript.type = 'text/javascript';
tgScript.innerHTML = `
var wptg_tagscript_vars = wptg_tagscript_vars || [];
wptg_tagscript_vars.push(
(function() {
return {
wp_hcuid:"${mbrIdHash}", /*고객 이메일 등 Unique ID (ex. 이메일을 기준, 혹은 고객 아이디 / 고객 번호 등의 정보)를 암호화하여 대입.
*주의 : 로그인 하지 않은 사용자는 어떠한 값도 대입하지 않습니다.*/
ti:"${adMediaId}", /*광고주 코드 */
ty:"Home", /*트래킹태그 타입 */
device:"web" /*웹,모바일 모두 web으로 통일*/
};
}));
`;
document.head.appendChild(tgScript);
let tgScript2 = document.createElement('script');
tgScript2.type = 'text/javascript';
tgScript2.async = true;
tgScript2.src = '//cdn-aitg.widerplanet.com/js/wp_astg_4.0.js';
document.head.appendChild(tgScript2);
}//common header end
//상품상세 페이지
if(url.includes(selectGoodsDtl)){
//# 상품상세페이지가 로드되면 아래 코드 실행
const goodsDtlFormAt = adScriptGoodsDtlFormAt(list);
if(goodsDtlFormAt){
let tgDiv = document.createElement('div');
tgDiv.id = 'wp_tg_cts';
tgDiv.style.display ='none';
document.body.appendChild(tgDiv);
const adMediaId = goodsDtlFormAt.adMediaId
const adscriptMbrId = $('#adscriptMbrId').val()
const goodsInnb = $('#goodsInnb').val()
const goodsNm = $('#goodsNm').val()
const totalGoodsPrice = $('.productDetailInfo__priceTotal__totalPriceNum').text()
let goodsDtlScript = document.createElement('script');
goodsDtlScript.type = 'text/javascript';
goodsDtlScript.innerHTML = `
var wptg_tagscript_vars = wptg_tagscript_vars || [];
wptg_tagscript_vars.push(
(function() {
return {
wp_hcuid:"${adscriptMbrId}", /*고객 이메일 등 Unique ID (ex. 이메일을 기준, 혹은 고객 아이디 / 고객 번호 등의 정보)를 암호화하여 대입.
*주의 : 로그인 하지 않은 사용자는 어떠한 값도 대입하지 않습니다.*/
ti:"${adMediaId}",
ty:"Item",
device:"web"
,items:[{i:"${goodsInnb}", t:"${goodsNm}", p: "${totalGoodsPrice}", q: "1"}] /* i:<상품 식별번호 (Feed로 제공되는 상품코드(상품번호)와 일치하여야 합니다 .) t:상품명 */
};
}));
`;
document.head.appendChild(goodsDtlScript);
let tgScript2 = document.createElement('script');
tgScript2.type = 'text/javascript';
tgScript2.async = true;
tgScript2.src = '//cdn-aitg.widerplanet.com/js/wp_astg_4.0.js';
document.head.appendChild(tgScript2);
}
}//상품 상세 END
//장바구니 페이지
if(url.includes(selectSpbk)){
//# 장바구니 페이지가 로드되면 아래 코드 실행.
const cartListFormAt = adScriptCartListFormAt(list)
if(cartListFormAt){
let tgDiv = document.createElement('div');
tgDiv.id = 'wp_tg_cts';
tgDiv.style.display ='none';
document.body.appendChild(tgDiv);
const adMediaId = cartListFormAt.adMediaId
const adscriptMbrId = $('#adscriptMbrId').val();
//JSON PARSE
const adScriptGoodsList = JSON.parse($('#adscriptCartGoodsList').val())
// 데이터를 저장할 배열
let productDataArray = [];
if(!fn_is_empty(adScriptGoodsList.goodsList)){
adScriptGoodsList.goodsList.forEach(optn => {
// 객체로 저장
const productData = {
i : optn.goodsInnb,
t: optn.goodsNm
};
// 배열에 추가
productDataArray.push(productData);
});
}
let cartListScript = document.createElement('script');
cartListScript.type = 'text/javascript';
cartListScript.innerHTML = `
var wptg_tagscript_vars = wptg_tagscript_vars || [];
wptg_tagscript_vars.push(
(function() {
return {
wp_hcuid:"${adscriptMbrId}", /*고객 이메일 등 Unique ID (ex. 이메일을 기준, 혹은 고객 아이디 / 고객 번호 등의 정보)를 암호화하여 대입.
*주의 : 로그인 하지 않은 사용자는 어떠한 값도 대입하지 않습니다.*/
ti:"${adMediaId}",
ty:"Cart",
device:"web"
,items:${JSON.stringify(productDataArray)}
};
}));
`;
document.head.appendChild(cartListScript);
let tgScript2 = document.createElement('script');
tgScript2.type = 'text/javascript';
tgScript2.async = true;
tgScript2.src = '//cdn-aitg.widerplanet.com/js/wp_astg_4.0.js';
document.head.appendChild(tgScript2);
}
}//장바구니 페이지 END
//주문 완료 페이지
if(url.includes(selectOrdrCompt)){
//# 주문완료 페이지가 로드되면 아래 코드 실행.
const purchsCompleteFormAt = adScriptPurchsCompleteFormAt(list)
if(purchsCompleteFormAt){
const adMediaId = purchsCompleteFormAt.adMediaId
const adscriptMbrId = $('#adscriptMbrId').val()
// 상품정보 배열
let productDataArray = [];
const adscriptVal = $('#adscript').val()
const decode = decodeURIComponent(atob(adscriptVal).split('').map(function (c) {
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
}).join(''));
const adscriptParse = JSON.parse(decode);
for(let obj of adscriptParse.goodsList){
let productData = {
i: obj.goodsInnb.toString(),
t: obj.goodsNm,
p: parseInt(obj.applyDscntAmt)/obj.ordrQy,
q: obj.ordrQy
};
// 배열에 추가
productDataArray.push(productData);
}
let tgDiv = document.createElement('div');
tgDiv.id = 'wp_tg_cts';
tgDiv.style.display ='none';
document.body.appendChild(tgDiv);
let purchsComplateFormScript = document.createElement('script');
purchsComplateFormScript.innerHTML= `
var wptg_tagscript_vars = wptg_tagscript_vars || [];
wptg_tagscript_vars.push(
(function() {
return {
wp_hcuid:"${adscriptMbrId}", /*고객 이메일 등 Unique ID (ex. 이메일을 기준, 혹은 고객 아이디 / 고객 번호 등의 정보)를 암호화하여 대입.
*주의 : 로그인 하지 않은 사용자는 어떠한 값도 대입하지 않습니다.*/
ti:"${adMediaId}",
ty:"PurchaseComplete",
device:"web"
,items: ${JSON.stringify(productDataArray)} // 상품정보
/*[
{i:"상품번호", t:"상품명", p:"옵션주문단가", q:"옵션주문수량"} 첫번째 상품 - i:상품 식별번호 (Feed로 제공되는 식별번호와 일치 ) t:상품명 p:단가 q:수량
,{i:"상품번호", t:"상품명", p:"옵션주문단가", q:"옵션주문수량"}
]*/
};
}));
`;
document.head.appendChild(purchsComplateFormScript);
let tgScript2 = document.createElement('script');
tgScript2.type = 'text/javascript';
tgScript2.async = true;
tgScript2.src = '//cdn-aitg.widerplanet.com/js/wp_astg_4.0.js';
document.head.appendChild(tgScript2);
}
}//주문 완료 페이지 END
}

View File

@@ -0,0 +1,69 @@
$(window).on('load',function() {
const adScriptUrl = '/sopmal/adscript/selectAdScriptList';
// 여기서 필요한 정보를 담을수 있또록 해야 할것 같음
// AJAX 요청 보내기
$.ajax({
url: adScriptUrl,
contentType: 'application/json',
method: 'post',
data: JSON.stringify({'sopmalCd' : ''}),
dataType: 'json',
success: function(response) {
const result = JSON.parse(response.resBody.result).selectAdScriptList
//현재 경로
let locationUrl = window.location.pathname;
//상품이 존재하지 않을 경우 아래 스크립트에 영향이 있을 수 있음
//광고스크립트가 상품상세 js 보다 우선 실행되기 때문에 상품 상세에 걸어도 걸리지 않아 여기서 처리
if(locationUrl.includes(selectGoodsDtl) && $('#goodsUseAt').val()==="N"){
alert('존재하지 않는 상품 입니다.')
history.back()
}
if(fn_is_empty(result)){
return false;
}
//광고매체 구분
//구글애즈
googleAds(adMediaList(result, '01'), locationUrl)
//구글애널리틱스
googleAnalytics(adMediaList(result, '02'), locationUrl);
//구글태그매니저
googleTagManager(adMediaList(result, '03'), locationUrl);
//메타
meta(adMediaList(result, '04'), locationUrl)
//카카오모먼츠
kakaoMoments(adMediaList(result, '05'), locationUrl)
//크리테오
criteo(adMediaList(result, '06'), locationUrl)
//TG
targetingGates(adMediaList(result, '07'), locationUrl)
//틱톡(사용처 없음)
//애드패커(사용처 없음)
//모비온
mobion(adMediaList(result, '10'), locationUrl)
//ADN2
adn2dot0(adMediaList(result, '11'), locationUrl)
//AND3(GTM으로 관리)
//리얼클릭(사용처 없음)
//네이버검색광고
naverSrchAds(adMediaList(result, '14'), locationUrl)
}
});
//광고 매체별 리스트 필터링 함수
function adMediaList(list, adMediaDvCd){
return list.filter(item => item.adMediaDvCd === adMediaDvCd)
}
});//window.onload END

View File

@@ -0,0 +1,354 @@
/*******************************************
광고 스크립트 공통 함수 START
*******************************************/
//상품상세 조회 페이지
const selectGoodsDtl = 'selectGoodsDtl';
//장바구니 조회 페이지
const selectSpbk = 'selectSpbk';
// 주문서 작성 페이지 - 비회원
const selectNmbrPurchsForm = 'selectNmbrPurchsForm';
// 주문서 작성 페이지- 회원
const selectMbrPurchsForm = 'selectMbrPurchsForm';
// 회원가입 완료 페이지
const selectJoinCompleteR = 'selectJoinCompleteR';
//주문 완료 페이지
const selectOrdrCompt = 'selectOrdrCompt'
//메인페이지
const mainPage = '/'
const mainIndex = '/index'
let adScriptAddCart = JSON.parse(sessionStorage.getItem('adscript_addcart'));
let adScriptNpayBtn = JSON.parse(sessionStorage.getItem('adscript_npayBtn'));
let adScriptReturnReq = JSON.parse(sessionStorage.getItem('adscript_returnReq'));
let adScriptWslistBtn = JSON.parse(sessionStorage.getItem('adscript_wslist'));
//스크립트 구분여부가 존재할 경우 객체정보 반환 함수
function adScriptListToObj(item) {
if(fn_is_empty(item)){
//비어있으면 false
return false;
}else{
return {
'adMediaId': item.adMediaId
,'instlPgeLbl': fn_nvl(item.instlPgeLbl,'')
,'npayButtonId' : fn_nvl(item.npayButtonId,'')
,'adMediaDvCd' : item.adMediaDvCd
,'instlPgeDvCd' : item.instlPgeDvCd
,'instlPgeEnvrnCd' : item.instlPgeEnvrnCd
,'trigrDvCd' : item.trigrDvCd
};
}
}
/*광고스크립트 - 장바구니 클릭 매체 정보 세션스토리지 저장 */
function addCartStorage(obj) {
//세션스토리지에 아이템 없을 경우 빈배열 생성
if (!adScriptAddCart) {
adScriptAddCart = [];
} else {
// 존재할 경우 parse
adScriptAddCart = JSON.parse(sessionStorage.getItem('adscript_addcart'));
//JSON.parse(adscript_addcart);
}
//중복 여부
let dupliAt = adScriptAddCart.some(item => {
return item.instlPgeDvCd === obj.instlPgeDvCd
&& item.instlPgeEnvrnCd === obj.instlPgeEnvrnCd
&& item.adMediaDvCd === obj.adMediaDvCd
&& item.trigrDvCd === obj.trigrDvCd
})
//중복 아닐 경우만 저장
if(!dupliAt){
adScriptAddCart.push(obj);
}
// 세션 스토리지에 업데이트된 객체 배열을 다시 저장
sessionStorage.setItem('adscript_addcart', JSON.stringify(adScriptAddCart));
}
/*광고스크립트 - 네이버페이 클릭 매체 정보 세션스토리지 저장 */
function addNpayStorage(obj) {
//세션스토리지에 아이템 없을 경우 빈배열 생성
if (!adScriptNpayBtn) {
adScriptNpayBtn = [];
} else {
// 존재할 경우 parse
adScriptNpayBtn = JSON.parse(sessionStorage.getItem('adscript_npayBtn'));
}
//중복 여부
let dupliAt = adScriptNpayBtn.some(item => {
return item.instlPgeDvCd === obj.instlPgeDvCd
&& item.instlPgeEnvrnCd === obj.instlPgeEnvrnCd
&& item.adMediaDvCd === obj.adMediaDvCd
&& item.trigrDvCd === obj.trigrDvCd
})
//중복 아닐 경우만 저장
if(!dupliAt){
adScriptNpayBtn.push(obj);
}
// 세션 스토리지에 업데이트된 객체 배열을 다시 저장
sessionStorage.setItem('adscript_npayBtn', JSON.stringify(adScriptNpayBtn));
}
/*광고스크립트 - 취소/환불 요청 클릭 매체 정보 세션스토리지 저장 */
function addReturnReqStorage(obj) {
//세션스토리지에 아이템 없을 경우 빈배열 생성
if (!adScriptReturnReq) {
adScriptReturnReq = [];
} else {
// 존재할 경우 parse
adScriptReturnReq = JSON.parse(sessionStorage.getItem("adscript_returnReq"));
}
//중복 여부
let dupliAt = adScriptReturnReq.some(item => {
return item.instlPgeDvCd === obj.instlPgeDvCd
&& item.instlPgeEnvrnCd === obj.instlPgeEnvrnCd
&& item.adMediaDvCd === obj.adMediaDvCd
&& item.trigrDvCd === obj.trigrDvCd
})
//중복 아닐 경우만 저장
if(!dupliAt){
adScriptReturnReq.push(obj);
}
// 세션 스토리지에 업데이트된 객체 배열을 다시 저장
sessionStorage.setItem('adscript_returnReq', JSON.stringify(adScriptReturnReq));
}
/*광고스크립트 - 상품상세 위시리스트 클릭 매체 정보 세션스토리지 저장 */
function addWslistStorage(obj) {
//세션스토리지에 아이템 없을 경우 빈배열 생성
if (!adScriptWslistBtn) {
adScriptWslistBtn = [];
} else {
// 존재할 경우 parse
adScriptWslistBtn = JSON.parse(sessionStorage.getItem("adscript_wslist"));
}
//중복 여부
let dupliAt = adScriptWslistBtn.some(item => {
return item.instlPgeDvCd === obj.instlPgeDvCd && item.instlPgeEnvrnCd === obj.instlPgeEnvrnCd && item.adMediaDvCd === obj.adMediaDvCd
})
//중복 아닐 경우만 저장
if(!dupliAt){
adScriptWslistBtn.push(obj);
}
// 세션 스토리지에 업데이트된 객체 배열을 다시 저장
sessionStorage.setItem('adscript_wslist', JSON.stringify(adScriptWslistBtn));
}
/*********************************
공통 스크립트 페이지별 구분
instlPgeDvCd : 설치페이지구분코드
instlPgeEnvrnCd : 설치페이지 환경코드 (01 공통, 02 PC, 03 모바일)
trigrDvCd : 01 페이지로드, 02 버튼
********************************/
//공통헤더 스크립트 존재여부
function adScriptCommonHeaderAt(list){
const commonHeaders = list.find(item =>
item.instlPgeDvCd ==='01' &&
item.instlPgeEnvrnCd === '01' &&
item.trigrDvCd ==='01'
)
return adScriptListToObj(commonHeaders)
}
//공통푸터 스크립트 존재여부
function adScriptCommonFooterAt(list){
const commonFooter = list.find(item =>
item.instlPgeDvCd ==='02' &&
item.instlPgeEnvrnCd === '01' &&
item.trigrDvCd ==='01'
)
return adScriptListToObj(commonFooter)
}
//PC푸터 스크립트 존재여부
function adScriptPcFooterAt(list){
const commonFooter = list.find(item =>
item.instlPgeDvCd ==='02' &&
item.instlPgeEnvrnCd === '02' &&
item.trigrDvCd ==='01'
)
return adScriptListToObj(commonFooter)
}
//Mobile 푸터 스크립트 존재여부
function adScriptMblFooterAt(list){
const commonFooter = list.find(item =>
item.instlPgeDvCd ==='02' &&
item.instlPgeEnvrnCd === '03' &&
item.trigrDvCd ==='01'
)
return adScriptListToObj(commonFooter)
}
//공통 상품상세 조회 여부
function adScriptGoodsDtlFormAt(list) {
const goodsDtl = list.find(item =>
item.instlPgeDvCd ==='03' &&
item.instlPgeEnvrnCd === '01' &&
item.trigrDvCd ==='01'
)
return adScriptListToObj(goodsDtl)
}
//PC 상품상세 조회 여부
function adScriptPcGoodsDtlFormAt(list) {
const goodsDtl = list.find(item =>
item.instlPgeDvCd ==='03' &&
item.instlPgeEnvrnCd === '02' &&
item.trigrDvCd ==='01'
)
return adScriptListToObj(goodsDtl)
}
//모바일 상품상세 조회 여부
function adScriptMblGoodsDtlFormAt(list) {
const goodsDtl = list.find(item =>
item.instlPgeDvCd ==='03' &&
item.instlPgeEnvrnCd === '03' &&
item.trigrDvCd ==='01'
)
return adScriptListToObj(goodsDtl)
}
//상품상세 - 장바구니 담기 클릭 여부
function adScriptAddCartEventAt(list) {
const cart = list.find(item =>
item.instlPgeDvCd ==='08' &&
item.instlPgeEnvrnCd === '01' &&
item.trigrDvCd ==='02'
)
return adScriptListToObj(cart)
}
//상품 상세 - 네이버페이 클릭 여부
function adScriptNpayEventAt(list) {
const naverpayScript = list.find(item =>
item.instlPgeDvCd ==='11' &&
item.instlPgeEnvrnCd === '01' &&
item.trigrDvCd ==='02'
)
return adScriptListToObj(naverpayScript)
}
//상품상세 - 위시리스트 클릭 여부
function adScriptAddWslistEventAt(list) {
const cart = list.find(item =>
item.instlPgeDvCd ==='12' &&
item.instlPgeEnvrnCd === '01' &&
item.trigrDvCd ==='02'
)
return adScriptListToObj(cart)
}
//장바구니 목록 조회 여부
function adScriptCartListFormAt(list) {
const cartList = list.find(item =>
item.instlPgeDvCd ==='08' &&
item.instlPgeEnvrnCd === '01' &&
item.trigrDvCd ==='01'
)
return adScriptListToObj(cartList)
}
//주문서 작성 페이지 조회 여부
function adScriptPurchsFormAt(list) {
const purchsForm = list.find(item =>
item.instlPgeDvCd ==='06' &&
item.instlPgeEnvrnCd === '01' &&
item.trigrDvCd ==='01'
)
return adScriptListToObj(purchsForm)
}
//주문 완료 페이지 조회 여부
function adScriptPurchsCompleteFormAt(list){
const purchsComplateForm = list.find(item =>
item.instlPgeDvCd ==='05' &&
item.instlPgeEnvrnCd === '01' &&
item.trigrDvCd ==='01'
)
return adScriptListToObj(purchsComplateForm)
}
//반품 환불 요청 클릭 여부
function adScriptRefundReqEventAt(list) {
const refundReq = list.find(item =>
item.instlPgeDvCd ==='09' &&
item.instlPgeEnvrnCd === '01' &&
item.trigrDvCd ==='02'
)
return adScriptListToObj(refundReq)
}
//반품 환불 완료 페이지 여부
function adScriptRefundCompleteFormAt(list) {
const refundComplete = list.find(item =>
item.instlPgeDvCd ==='07' &&
item.instlPgeEnvrnCd === '01' &&
item.trigrDvCd ==='01'
)
return adScriptListToObj(refundComplete)
}
//회원가입 페이지 조회 여부
function adScriptMbrRegstFormAt(list) {
const mbrRegst = list.find(item =>
item.instlPgeDvCd ==='04' &&
item.instlPgeEnvrnCd === '01' &&
item.trigrDvCd ==='01'
)
return adScriptListToObj(mbrRegst)
}
//모바일 메인 페이지
function adScriptMblMainFormAt(list) {
const mainMblScript = list.find(item =>
item.instlPgeDvCd ==='10' &&
item.instlPgeEnvrnCd === '03' &&
item.trigrDvCd ==='01'
)
return adScriptListToObj(mainMblScript)
}
//PC 메인 페이지
function adScriptPCMainFormAt(list) {
const mainMblScript = list.find(item =>
item.instlPgeDvCd ==='10' &&
item.instlPgeEnvrnCd === '02' &&
item.trigrDvCd ==='01'
)
return adScriptListToObj(mainMblScript)
}
/*******************************************
광고 스크립트 공통 함수 END
*******************************************/

View File

@@ -0,0 +1,665 @@
/*********************************
장바구니 담기 버튼
********************************/
$(document).on('click', '.addCart', function() {
//세션스토리지 없으면 pass
if(fn_is_empty(adScriptAddCart)){
return false;
}
//세션스토리지에 해당 매체의 장바구니 담기가 있으면 해당 스크립트실행
adScriptAddCart.forEach(item =>{
if(item.adMediaDvCd ==='06'){
criteoAddCart(item)
}
if(item.adMediaDvCd ==='01'){
googleAdsAddCart(item)
}
if(item.adMediaDvCd ==='02') {
googleAnalyticsAddCart(item)
}
if(item.adMediaDvCd ==='03'){
googleTagManagerAddCart()
}
if(item.adMediaDvCd ==='05'){
kakaoMomentsAddCart(item)
}
if(item.adMediaDvCd ==='04'){
metaAddCart(item)
}
if(item.adMediaDvCd ==='14'){
naverSrchAdsAddCart(item)
}
})
});
function criteoAddCart(item) {
const adMediaId = item.adMediaId
let addCartScript = document.createElement('script');
let productDataArray = [];
if(productArr.length > 0){
for(let i = 0; i < productArr.length; i++){
// 객체로 저장
const productData = {
id: productArr[i][4],
price: productArr[i][3],
quantity: productArr[i][1]
};
// 배열에 추가
productDataArray.push(productData);
}
}
addCartScript.innerHTML = `
window.criteo_q = window.criteo_q || [];
var deviceType = /iPad/.test(navigator.userAgent) ? "t" : /Mobile|iP(hone|od)|Android|BlackBerry|IEMobile|Silk/.test(navigator.userAgent) ? "m" : "d";
window.criteo_q.push(
{ event: "setAccount", account: ${adMediaId}},
// To Do 1. 현재 유저의 이메일 주소(공백 제거 및 소문자로 변환 후) 전달. 유저의 이메일을 알수 없는 상황이면 빈 문자열로 전달
{ event: "setEmail", email: "", hash_method: "sha256" },
{ event: "setEmail", email: "", hash_method: "md5" },
// To Do 2. 현재 유저의 저장된 배송지 우편번호. 유저의 배송지 우편번호를 알수 없는 상황이면 빈 문자열로 전달
{ event: "setZipcode", zipcode: "" },
{ event: "setSiteType", type: deviceType},
/*// To Do 3. 현재 유저가 추가한 상품의 정보(상품 ID, 상품 단가, 추가한 수량)를 아래 객체 포멧으로 전달
// 상품 ID는 태그에서 전달되는 상품 ID와 피드에서 전달 주신 상품 ID가 매칭이 되어야 함
// 상품 단가는 유저가 선택한 상품의 단가로 전달(옵션 추가 가격 및 할인 가격 포함). 통화 기호 및 천단위 구분자는 제외
// 수량은 유저가 선택한 값으로 전달
// Tip 1. 복잡한 추가 구성 상품 및 옵션으로 인해 제대로된 상품 단가 및 수량 전달이 어려운 경우, 최종 가격으로 전달 후 수량은 1로 전달 해주셔도 됩니다.
*/
{ event: "addToCart", item:${JSON.stringify(productDataArray)}
}
);
`;
document.head.appendChild(addCartScript);
}
function googleAdsAddCart(item) {
let addCartScript = document.createElement('script');
const goodsNm = $('#goodsNm').val();
// 데이터를 저장할 배열
let productDataArray = [];
let totalPrice = 0;
if(productArr.length > 0){
for(let i = 0; i < productArr.length; i++){
// 객체로 저장
const productData = {
item_id: productArr[i][4],
item_name: goodsNm,
item_variant: productArr[i][0],
price: productArr[i][3],
quantity: productArr[i][1]
};
totalPrice += productArr[i][3]
// 배열에 추가
productDataArray.push(productData);
}
}
addCartScript.innerHTML = `
gtag("event", "conversion", {
send_to: "${item.adMediaId}/${item.instlPgeLbl}",
value: ${totalPrice},
items: ${JSON.stringify(productDataArray)}
});
`;
document.head.appendChild(addCartScript);
}
function googleAnalyticsAddCart(item) {
let addCartScript = document.createElement('script');
const goodsNm = $('#goodsNm').val()
// 데이터를 저장할 배열
let productDataArray = [];
let totalPrice = 0;
if(productArr.length > 0){
for(let i = 0; i < productArr.length; i++){
// 객체로 저장
const productData = {
item_id: productArr[i][4],
item_name: goodsNm,
item_variant: productArr[i][0],
price: productArr[i][3],
quantity: productArr[i][1]
};
totalPrice += productArr[i][3]
// 배열에 추가
productDataArray.push(productData);
}
}
addCartScript.innerHTML = `
gtag("event", "add_to_cart", {
currency: "KRW",
value: ${totalPrice},
items: ${JSON.stringify(productDataArray)}
});
`;
document.head.appendChild(addCartScript);
}
function googleTagManagerAddCart() {
let addCartScript = document.createElement('script');
const goodsNm = $('#goodsNm').val()
// 데이터를 저장할 배열
let productDataArray = [];
let totalPrice = 0;
if(productArr.length > 0){
for(let i = 0; i < productArr.length; i++){
// 객체로 저장
const productData = {
item_id: productArr[i][4],
item_name: goodsNm,
item_variant: productArr[i][0],
price: productArr[i][3],
quantity: productArr[i][1]
};
totalPrice += productArr[i][3]
// 배열에 추가
productDataArray.push(productData);
}
}
addCartScript.innerHTML = `
dataLayer.push({ ecommerce: null });
dataLayer.push({
event: "add_to_cart",
ecommerce: {
currency: "KRW",
value: ${totalPrice},
items: ${JSON.stringify(productDataArray)}
}
});
`;
document.head.appendChild(addCartScript);
}
function kakaoMomentsAddCart(item) {
const adMediaId = item.adMediaId;
const goodsInnb = $('#goodsInnb').val();
let kakaoScript = document.createElement('script');
kakaoScript.type = 'text/javascript';
kakaoScript.charset = 'UTF-8';
kakaoScript.src = '//t1.daumcdn.net/kas/static/kp.js';
document.head.appendChild(kakaoScript);
let kakaoScript2 = document.createElement('script')
kakaoScript2.type ='text/javascript';
kakaoScript2.innerHTML = `kakaoPixel('${adMediaId}').addToCart({
id: '${goodsInnb}'
});`;
document.head.appendChild(kakaoScript2);
}
function metaAddCart(item) {
let addCartScript = document.createElement('script');
// 데이터를 저장할 배열
let productDataArray = [];
let totalPrice = 0;
if(productArr.length > 0){
for(let i = 0; i < productArr.length; i++){
// 객체로 저장
const productData = {
id: productArr[i][4],
quantity: productArr[i][1]
};
totalPrice += productArr[i][3]
// 배열에 추가
productDataArray.push(productData);
}
}
addCartScript.innerHTML = `
fbq('track', 'AddToCart', {
value: ${totalPrice},
currency: 'KRW',
contents: ${JSON.stringify(productDataArray)},
});
`;
document.head.appendChild(addCartScript);
}
function naverSrchAdsAddCart(item) {
const addCartScript = document.createElement('script');
// 데이터를 저장할 배열
let productDataArray = [];
const category = fn_nvl($('#ctgryNm').val(), '');
const goodsNm = $('#goodsNm').val();
if(productArr.length > 0){
for(let i = 0; i < productArr.length; i++){
// 객체로 저장
const productData = {
id: productArr[i][4],
name: goodsNm,
category: category,
quantity: productArr[i][1],
payAmount: productArr[i][3],
option: productArr[i][0]
};
// 배열에 추가
productDataArray.push(productData);
}
}
addCartScript.innerHTML = `
if(window.wcs){
if(!wcs_add) var wcs_add = {};
wcs_add["wa"] = "${item.adMediaId}";
var _conv = {};
_conv.type = 'add_to_cart'; //(필수)
_conv.items = [${JSON.stringify(productDataArray)}];
wcs.trans(_conv);
}
`;
document.head.appendChild(addCartScript);
}
/*********************************
네이버페이 버튼
********************************/
$(document).on('click', '.npay_btn_link', function() {
//세션스토리지 없으면 pass
if(fn_is_empty(adScriptNpayBtn)){
return false;
}
//세션스토리지에 해당 매체의 npay 담기가 있으면 해당 스크립트 실행
adScriptNpayBtn.forEach(item => {
if(item.adMediaDvCd ==='01'){
googleAdsNpay(item)
}
if(item.adMediaDvCd ==='02'){
googleAnalyticNpay(item)
}
if(item.adMediaDvCd ==='03'){
googleTagManagerNpay(item)
}
if(item.adMediaDvCd ==='04'){
metaNpay(item)
}
})
});
function googleAdsNpay(item) {
let npayScript = document.createElement('script');
const goodsNm = $('#goodsNm').val()
// 데이터를 저장할 배열
let productDataArray = [];
let totalPrice = 0;
if(productArr.length > 0){
for(let i = 0; i < productArr.length; i++){
// 객체로 저장
const productData = {
item_id: productArr[i][4],
item_name: goodsNm,
item_variant: productArr[i][0],
price: productArr[i][3],
quantity: productArr[i][1]
};
totalPrice += productArr[i][3]
// 배열에 추가
productDataArray.push(productData);
}
}
const npayMediaId = item.adMediaId
const npayLbl = item.instlPgeLbl
const naverBtnClickId = item.npayButtonId
npayScript.innerHTML = `
gtag("event", "conversion", {
transaction_id: ${naverBtnClickId},
'send_to': '${npayMediaId}/${npayLbl}',
value: ${totalPrice},
items: ${JSON.stringify(productDataArray)}
});
`;
document.head.appendChild(npayScript);
}
function googleAnalyticNpay(item) {
let npayScript = document.createElement('script');
const goodsNm = $('#goodsNm').val()
// 데이터를 저장할 배열
let productDataArray = [];
let totalPrice = 0;
if(productArr.length > 0){
for(let i = 0; i < productArr.length; i++){
// 객체로 저장
const productData = {
item_id: productArr[i][4],
item_name: goodsNm,
item_variant: productArr[i][0],
price: productArr[i][3],
quantity: productArr[i][1]
};
totalPrice += productArr[i][3]
// 배열에 추가
productDataArray.push(productData);
}
}
const npayButtonId = item.npayButtonId
npayScript.innerHTML = `
gtag("event", "npay_click", {
transaction_id: ${npayButtonId},
currency: "KRW",
value: ${totalPrice},
items: ${JSON.stringify(productDataArray)}
});
`;
document.head.appendChild(npayScript);
}
function googleTagManagerNpay(item) {
let npayScript = document.createElement('script');
const goodsNm = $('#goodsNm').val()
// 데이터를 저장할 배열
let productDataArray = [];
let totalPrice = 0;
if(productArr.length > 0){
for(let i = 0; i < productArr.length; i++){
// 객체로 저장
const productData = {
item_id: productArr[i][4],
item_name: goodsNm,
item_variant: productArr[i][0],
price: productArr[i][3],
quantity: productArr[i][1]
};
totalPrice += productArr[i][3]
// 배열에 추가
productDataArray.push(productData);
}
}
npayScript.innerHTML = `
dataLayer.push({ ecommerce: null });
dataLayer.push({
event: "npay_click",
ecommerce: {
transaction_id: ${item.npayButtonId},
currency: "KRW",
value: ${totalPrice},
items: ${JSON.stringify(productDataArray)}
}
});
`;
document.head.appendChild(npayScript);
}
function metaNpay(item) {
let npayScript = document.createElement('script');
// 데이터를 저장할 배열
let productDataArray = [];
let totalPrice = 0;
if(productArr.length > 0){
for(let i = 0; i < productArr.length; i++){
// 객체로 저장
const productData = {
id: productArr[i][4],
quantity: productArr[i][1]
};
totalPrice += productArr[i][3]
// 배열에 추가
productDataArray.push(productData);
}
}
npayScript.innerHTML = `
fbq('trackCustom', 'NpayConversion', {
value: ${totalPrice},
currency: 'KRW',
contents: ${JSON.stringify(productDataArray)},
});
`;
document.head.appendChild(npayScript);
}
/*********************************
취소/환불 요청 버튼
********************************/
function adscript_btnReturnRegist (data) {
//세션스토리지 없을 경우 pass
if(fn_is_empty(adScriptReturnReq)){
return false;
}
//세션스토리지에 해당 매체의 취소/환불요청이 있으면 해당 스크립트 실행
adScriptReturnReq.forEach(item =>{
if(item.adMediaDvCd ==='02'){
googleAnalyticReturnReq(data)
}
if(item.adMediaDvCd ==='03'){
googleTagManagerReturnReq(data)
}
})
};
function googleAnalyticReturnReq(data) {
let refundScript = document.createElement('script');
//data -> 취소/환불 완료 후 서버에서 전달받은 data로 (ajax done) 에서 받아서 처리
refundScript.innerHTML = `
gtag("event", "refund", {
${JSON.stringify(data)}
});
`;
document.head.appendChild(refundScript);
}
function googleTagManagerReturnReq(data) {
//data -> 취소/환불 완료 후 서버에서 전달받은 data로 (ajax done) 에서 받아서 처리
let refundScript = document.createElement('script');
refundScript.innerHTML = `
dataLayer.push({ ecommerce: null });
dataLayer.push({
event: "refund",
ecommerce: {
${JSON.stringify(data)}
}
});`
document.head.appendChild(refundScript);
}
/*********************************
위시리스트 등록 버튼
********************************/
$(document).on('click', '#productMyWish', function() {
//이미 찜이 되어있어 찜버튼을 누를 경우 찜이 취소되는 액션의 경우 제외
if(!fn_is_empty($('#wslistInnb').val())){
return false;
}
//세션스토리지 없으면 pass
if(fn_is_empty(adScriptWslistBtn)){
return false;
}
//세션스토리지에 해당 매체의 npay 담기가 있으면 해당 스크립트 실행
adScriptWslistBtn.forEach(item => {
if(item.adMediaDvCd ==='14'){
naverSrchAdsAddWslist(item)
}
})
});
function naverSrchAdsAddWslist(item) {
const wslistScript = document.createElement('script');
wslistScript.type = 'text/javascript';
// 데이터를 저장할 배열
let productDataArray = [];
const goodsInnb = $('#goodsInnb').val();
const goodsNm = $('#goodsNm').val();
const category = fn_nvl($('#ctgryNm').val(), '');
if(productArr.length > 0){
for(let i = 0; i < productArr.length; i++){
// 객체로 저장
const productData = {
id: productArr[i][4],
name: productArr[i][1],
category: category,
quantity: productArr[i][1],
payAmount: productArr[i][3],
option: productArr[i][0]
};
// 배열에 추가
productDataArray.push(productData);
}
}else{
//상품 옵션 선택없이 위시리스트 등록시 기본값 지정
const productData = {
id: goodsInnb,
name: goodsNm,
category: category,
quantity: '0',
payAmount: '0',
option: ''
};
productDataArray.push(productData);
}
wslistScript.innerHTML = `
if(window.wcs){
if(!wcs_add) var wcs_add = {};
wcs_add["wa"] = "${item.adMediaId}";
var _conv = {};
_conv.type = 'add_to_wishlist'; //(필수)
_conv.items = [${JSON.stringify(productDataArray)}];
wcs.trans(_conv);
}
`;
document.head.appendChild(wslistScript);
}