$(document).on('ready', function() { // var ga = window.ga var pageParser = { products: [], getProductFromCart: function(tr, index){ var category = '' var brand = $(tr).data('brand'); var sku = $(tr).data('sku'); var name = $(tr).find('.cart_prod_link').text() var price = $(tr).data('price'); var quantity = $(tr).find('input.carttbale_input').val() var product = { id: sku, name: name, brand: brand, category: category, position: index + 1, price: price, quantity: quantity // variant: 'black', } return product }, getProductFromList: function (liItem, index){ var category = $('.breadcrumbs li:last').find('[itemprop="name"]').html() var brand = $(liItem).find('meta[itemprop="brand"]')[0].content; var sku = $(liItem).find('[itemprop="sku"]')[0].content; var name = $(liItem).find('[itemprop="name"]').text(); var variant = $(liItem).find('.prodlist_size').text(); var product = { brand: brand, category: category, id: sku, name: name, position: index + 1, variant: variant, list: 'Search Results' } return product }, getProductsFromCart: function(){ var products = [] $('.carttable tbody tr').each(function (index, tdItem) { var product = pageParser.getProductFromCart(tdItem, index) products.push(product) }) return products }, getProductsFromList: function () { var products = pageParser.products $('.product_list').children().each(function (index, item) { /*if(pageParser.checkVisible(item)){ }*/ var product = pageParser.getProductFromList(item, index) /*var productFind = products.findIndex((checkedProduct) => checkedProduct.id === product.id ) if(productFind > -1){ product.checked = true; } else { product.checked = false }*/ product.checked = false products.push(product) }) this.products = products return products }, getProductFromPage: function () { var productPage = $('.two_columns_sticker'); var id = productPage.find('meta[itemprop="sku"]')[0].content var name = $('h1').text(); var category = $('.breadcrumbs li:last').prev("li").find('[itemprop="name"]').html() var brand = productPage.find('meta[itemprop="brand"]')[0].content; var variant = '' return { id: id, name: name, category: category, brand: brand, variant: variant, } }, getPage: function (){ if($('.category_page').length > 0 && $('.product_list_butcats').length <= 0){ return 'category' } if($('.productpagecontent').length > 0){ return 'product' } if($('.carttable').length > 0){ return 'cart' } if($('h1').text() === 'Оформление заказа'){ return 'checkout' } if(window.dataLayer && window.dataLayer.length > 0 && window.dataLayer[0].transactionId){ return 'purchase' } return false }, checkVisible(elm) { var rect = elm.getBoundingClientRect(); var viewHeight = Math.max(document.documentElement.clientHeight, window.innerHeight); return !(rect.bottom < 0 || rect.top - viewHeight >= 0); } } var googleAnalytics = { productPage: function () { var product = pageParser.getProductFromPage() this.beforeSend() ga('ec:addProduct', { 'id': product.id, 'name': product.name, 'category': product.category, 'brand': product.brand, 'variant': product.variant, }); ga('ec:setAction', 'detail'); ga('send', 'pageview'); }, categoryPage: function () { var products = pageParser.getProductsFromList() this.beforeSend() this.addImpressions(products) ga('send','event','Ecommerce','Impressions','',{nonInteraction: true}); }, cartPage:function (){ var products = pageParser.getProductsFromCart() this.beforeSend() products.map((product, index) => { ga("ec:addProduct", { "id": product.id, "name": product.name, "price": product.price, "brand": product.brand, "category": product.category, // "variant": product.variant, "position": product.position, "quantity": product.quantity }); }) ga("ec:setAction", "cart", { "step": 1 }); ga("send", "pageview") }, checkoutPage:function (){ this.beforeSend() ga("ec:setAction", "checkout", { "step": 2 }); ga("send", "pageview") }, purchasePage: function (){ var dataLayer = window.dataLayer this.beforeSend() dataLayer.map((data)=>{ if(data.transactionProducts){ data.transactionProducts.map((product) => { ga('ec:addProduct', product); }) ga('ec:setAction', 'purchase', { 'id': data.transactionId, 'affiliation': data.transactionAffiliation, 'revenue': data.transactionTotal }); } }) ga('send', 'pageview'); // Send transaction data with initial pageview. }, beforeSend(){ ga('create', 'UA-44247655-1'); //ID аккаунта в Google Analytics ga('require', 'ec'); }, addImpressions: function (impressions) { impressions.map(function (impression) { googleAnalytics.addImpression(impression) }) }, addImpression: function (impression) { if(!impression.checked){ ga('ec:addImpression', { 'id': impression.id, // Подробная информация о продукте 'name': impression.name, 'category': impression.category, 'brand': impression.brand, 'variant': impression.variant, 'list': impression.list, 'position': impression.position // 'position'- позиция продукта в результате поиска (списка). }); } }, onProductClick: function (product) { ga('ec:addProduct', { 'id': product.id, 'name': product.name, 'category': product.category, 'brand': product.brand, // 'variant': 'black', 'position': product.position }); ga('ec:setAction', 'click', {list: 'Search Results'}); // Клик по продукту и перенаправление пользователя на страницу товара ga('send', 'event', 'UX', 'click', 'Results', { 'hitCallback': function () { return true } }); }, cartAction: function (product){ ga('ec:addProduct', { 'id': product.id, 'name': product.name, 'category': product.category, 'brand': product.brand, // 'variant': product.variant, 'price': product.price, 'quantity': product.quantity }); }, addToCart: function (product) { this.cartAction(product) ga('ec:setAction', 'add'); ga('send', 'event', 'UX', 'click', 'add to cart'); // Отправка данных }, removeFromCart: function (product){ this.cartAction(product) ga("ec:setAction", "remove"); ga("send", "event", "detail view", "click", "removeFromCart"); }, run: function (page){ switch (page){ case 'category': this.categoryPage() break; case 'product': this.productPage() break; case 'cart': this.cartPage() break; case 'checkout': this.checkoutPage() break; case 'purchase': this.purchasePage() break; } } } var page = pageParser.getPage() googleAnalytics.run(page) console.log(page) /** * Add product to cart start */ $('body').on('click','.btn-prodlist-buy',function(){ var li = $(this).closest('li') var product = pageParser.getProductFromList(li, li.index()) googleAnalytics.onProductClick(product) }) $('body').on('click','.redformsubmit',function(){ var product = pageParser.getProductFromPage() googleAnalytics.addToCart(product) }) /** * Add product to cart end */ /** * Delete product from cart start */ $('body').on('click','.del_button',function(){ var tr = $(this).closest('tr') var product = pageParser.getProductFromCart(tr, tr.index()) googleAnalytics.removeFromCart(product) }) /*$(document).scroll(function (){ var page = pageParser.getPage() if(page === 'category'){ googleAnalytics.run(page) } });*/ /** * Delete product from cart end */ $(window).on('load', function (){ debugger var page = pageParser.getPage() if(page === 'purchase'){ googleAnalytics.run(page) } }) });