Skip to content

Instantly share code, notes, and snippets.

@fblundun
Last active June 10, 2016 16:06
Show Gist options
  • Save fblundun/b2879de17433ec2e62672d76dbe56d20 to your computer and use it in GitHub Desktop.
Save fblundun/b2879de17433ec2e62672d76dbe56d20 to your computer and use it in GitHub Desktop.
Support multiple enhanced ecommerce actions
<script>
// If this tag fires more than once (e.g. page view followed by ecommerce action),
// we don't want to repeat the trackPageView here
if (!window.SNOWPLOW_NAME_HERE) {
;(function(p,l,o,w,i,n,g){if(!p[i]){p.GlobalSnowplowNamespace=p.GlobalSnowplowNamespace||[];
p.GlobalSnowplowNamespace.push(i);p[i]=function(){(p[i].q=p[i].q||[]).push(arguments)
};p[i].q=p[i].q||[];n=l.createElement(o);g=l.getElementsByTagName(o)[0];n.async=1;
n.src=w;g.parentNode.insertBefore(n,g)}}(window,document,"script","//d1fc8wv8zag5ca.cloudfront.net/2.6.1/sp.js","SNOWPLOW_NAME_HERE"));
// !!! Customizable section starts
// Track page views, enable link clicks, and so on here
SNOWPLOW_NAME_HERE('newTracker', 'snplow1', 'MY_COLLECTOR', {
'appId': 'snowplowweb',
'cookieName': 'MY_COOKIE_NAME'
});
SNOWPLOW_NAME_HERE('enableActivityTracking', 10, 10);
SNOWPLOW_NAME_HERE('trackPageView');
// !!! Customizable section ends
}
var ecommerce = {{ecommerce}};
var actions = [
"click",
"detail",
"add",
"remove",
"checkout",
"checkout_option",
"purchase",
"refund",
"promo_click",
"view"
];
if (ecommerce) {
sendEnhancedEcommerceEvent(ecommerce);
}
function sendEnhancedEcommerceEvent(ecommerce) {
var currencyCode = ecommerce.currencyCode;
var relevantActions = [];
for (var i = 0; i < actions.length; i++) {
if (ecommerce[actions[i]]) {
relevantActions.push(actions[i]);
}
}
if (ecommerce.impressions) {
for (var j = 0; j < ecommerce.impressions.length; j++) {
var impression = ecommerce.impressions[j];
SNOWPLOW_NAME_HERE('addEnhancedEcommerceImpressionContext',
impression.id,
impression.name,
impression.list,
impression.brand,
impression.category,
impression.variant,
impression.position,
impression.price,
currencyCode
);
}
}
if (ecommerce.promoView) {
for (var l = 0; l < ecommerce.promoView.promotions.length; l++) {
var promo = ecommerce.promoView.promotions[l];
SNOWPLOW_NAME_HERE('addEnhancedEcommercePromoContext',
promo.id,
promo.name,
promo.creative,
promo.position,
currencyCode
);
}
}
if (relevantActions.length === 0) {
SNOWPLOW_NAME_HERE('trackEnhancedEcommerceAction', 'view');
} else {
for (var m = 0; m < relevantActions.length; m++) {
var relevantAction = relevantActions[m];
if (ecommerce[relevantAction].products) {
for (var k = 0; k < ecommerce[action].products.length; k++) {
var product = ecommerce[relevantAction].products[k];
SNOWPLOW_NAME_HERE('addEnhancedEcommerceProductContext',
product.id,
product.name,
product.list,
product.brand,
product.category,
product.variant,
product.price,
product.quantity,
product.coupon,
product.position,
currencyCode
);
}
}
if (ecommerce[relevantAction].actionField) {
var actionObject = ecommerce[relevantAction].actionField;
SNOWPLOW_NAME_HERE('addEnhancedEcommerceActionContext',
actionObject.id,
actionObject.affiliation,
actionObject.revenue,
actionObject.tax,
actionObject.shipping,
actionObject.coupon,
actionObject.list,
actionObject.step,
actionObject.option,
currencyCode
);
}
SNOWPLOW_NAME_HERE('trackEnhancedEcommerceAction', relevantAction);
}
}
}
</script>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment