-
Notifications
You must be signed in to change notification settings - Fork 1
Pinpoint Experiments
nt3rp edited this page Sep 17, 2012
·
6 revisions
In order to setup a PinPoint experiment, you'll need to do the following:
-
Get access to the user's store
-
Create a new page for Pinpoint, and add the following code (make sure you are in source view):
<style type="text/css"> #willet-main { font-family: Arial, Helvetica, Tahoma !important; margin: 0; padding: 0;} #willet-main h1 { font-size: 20px; } #willet-main p { font-size: 13px; margin: 0; padding: 0;} #willet-main table, #willet-main tr, #willet-main td { margin: 0; padding: 0; } #willet-main #wrapper { width: 950px; margin: 5px auto; text-align: center; } .column { float: left; width: 200px; margin: 15px; } #willet-main .pin { margin: 0 0 30px 0; background: #cecece; position: relative; text-align: center; overflow: hidden; width: 200px; -moz-box-shadow: 0px 8px 16px 0px #cecece; -webkit-box-shadow: 0px 8px 16px 0px #cecece; -o-box-shadow: 0px 8px 16px 0px #cecece; box-shadow: 0px 8px 16px 0px #cecece; } #willet-main .inner-pin { overflow: hidden; width: 200px; margin-right: 5px; text-align: center; background:#f6f6f6; } #willet-main .inner-pin h5 { margin: 0; padding: 10px 10px 5px 10px; font-size: 13px; font-weight: normal; color: #fff; width: 140px; background: #161616; background: rgba(0,0,0,0.8); bottom: 15px; position: absolute; display: block; text-align: left; } #willet-main .inner-pin h5:hover { text-decoration: underline; } #willet-main .pinimg a:link{ border-bottom: none; background: #fff; width: 175px; padding-right: 5px; margin-left: auto; margin-right: auto; } #willet-main .pin img { } #willet-main .pin a { border: none; overflow: hidden; } #willet-main .pin a img { border: none; overflow: hidden; } #willet-main a { text-decoration: none; color: #2d2d2d;} #willet-main a:hover { text-decoration: underline; } #willet-main .link a { color: #000; } #willet-main .link a:hover { text-decoration:underline; } #willet-main a span { visibility: hidden; text-align: center; width: 171px; display: block; padding: 3px; } #willet-main a:hover span { visibility: visible; font-size: 12; } #willet-main #darkbg { background: #4a4a4a; } #willet-main #buttons { position: absolute; bottom: 10; } #willet-main #buttons img { width: 139px; } #willet-main .overlay{ display: none; position: fixed; top: 0%; left: 0%; width: 100%; height: 100%; background: rgba(255,255,255,0.7); z-index:1001; cursor: -webkit-zoom-out; cursor: -moz-zoom-out; cursor: zoom-out; } #willet-main #light { width: 1000px; margin: auto; display: none; text-align: left !important; } #willet-main .box-content { position: fixed; margin: auto; top: 50px; left: 50%; width: 600px; margin-left: -300px; /* we would set top margin, but don't know the value */ padding: 30px 30px 30px 55px; background: #fff; z-index:1002; border: 1px solid #cecece; -moz-box-shadow: 0px 8px 16px 0px #cecece; -webkit-box-shadow: 0px 8px 16px 0px #cecece; -o-box-shadow: 0px 8px 16px 0px #cecece; box-shadow: 0px 8px 16px 0px #cecece; } #willet-main h3 { font-size: 30px; margin: 0; padding: 0; margin-top: 10px; } #willet-main h4 { font-size: 23px; margin: 0; padding: 0; margin-bottom: 5px; } #willet-main #product-banner { display: inline-block; width: 700px; margin: 15px 15px 15px; border: 1px solid #aaaaaa; box-shadow: 0 2px 5px rgba(0,0,0, 0.3); background: #fff; position: relative; text-align: center; } #willet-main .column { float: left; width: 200px; text-align: center; } #willet-main #light .content, #featured-product .content { width: 550px; margin-right: 40px; } #willet-main #light .text { text-align: left; width: 380px; float: left; } #willet-main #light .buttons { float: right; text-align: right; padding-top: 30px; } #willet-main #light .buttons div { margin-bottom: 12px; } #willet-main #light .x { color: #ccc; float: right; top: 0; font-size: 30px; margin-right: 10px; } #willet-main #light .x:hover { color: #666; cursor: pointer; } #willet-main #light .social { clear: right; float: right; margin-top: 100px; text-align: left !important; width: 80px; } #willet-main #light .social>div { margin-top: 10px; } #willet-main .click { cursor: pointer; cursor: -webkit-zoom-in; cursor: -moz-zoom-in; cursor: zoom-in; } #willet-main .pin.small { height: 150px; } #willet-main .pin.medium { height: 200px; } #willet-main .pin.large { height: 250px; } #willet-main .pin.x-large { height: 300px; } #willet-main a.willet-pinterest-button { background-image: url('http://assets.pinterest.com/images/pinit6.png'); background-position: 0 -7px; } #willet-main a.willet-pinterest-button:hover { background-position: 0 -28px; cursor: pointer; } #willet-main a.willet-pinterest-button:active { background-position: 0 -49px; cursor: pointer; } #willet-main a.willet-pinterest-button.clicked { background-position:0 -70px !important; } #featured-product { /* CSS applied by JQuery so it remains invisible when not in use */ } #featured-product #bento-logo { float: left; margin: 10px 0 0 30px; width: 70px; height: 240px; } #featured-product #bento-logo>a { text-decoration: none; } #featured-product #bento-logo img { width: 70px; height: 240px; } #featured-product>#featured_img { margin-left: 25px; } #featured-product>#featured_img, #featured-product>#featured_img>img { width: 320px; height: 240px; } #featured-product>#featured_img { float:left; background: #cecece; position: relative; text-align: center; overflow: hidden; -moz-box-shadow: 0px 8px 16px 0px #cecece; -webkit-box-shadow: 0px 8px 16px 0px #cecece; -o-box-shadow: 0px 8px 16px 0px #cecece; box-shadow: 0px 8px 16px 0px #cecece; } #featured-product .text { padding-left: 490px; text-align: left; padding-top: 30px; } #featured-product #featured_social { padding-top: 30px; } #featured-info { } </style> <!--[if IE 8]> <style type="text/css"> #willet-main .pin { margin: 10px; vertical-align: top; } </style> <![endif]--><!--[if IE 7]> <style type="text/css"> #willet-main .pin { margin: 10px; vertical-align: top; float: left; } #willet-main .pin-title { left: 0px !important; } </style> <![endif]--> <div id="willet-main"> <div id="wrapper"> <div id="featured-product"></div> <div style="clear:both"></div> <div class="column" id="0"></div> <div class="column" id="1"></div> <div class="column" id="2"></div> <div class="column" id="3"></div> <div id="light"> <div class="box-content"> <div class="x"> x </div> <div class="social"> <div class="pinterest_buttons"></div> <div class="twitter_buttons"></div> <div class="fb_buttons"></div> </div> <a class="link"><img id="light_img" /></a> <div class="content"> <div class="text"> <h3><a id="light_title" class="link">Title goes here</a></h3> <h4 id="light_price"></h4> <p id="light_desc"></p> </div> <div class="buttons"> <div class="buy"><a id="light_buy"><img src="https://static.shopify.com/s/files/1/0029/8962/t/8/assets/willet-buynow.png?106515" /></a></div> </div> </div> </div> </div> <div id="fade" class="overlay"></div> <!-- End light box --> <div id="fb-root"></div> </div> </div> <script type="text/javascript"> $(document).ready(function () { // Assume we have an array of data objects // {title, desc, link, imgs[]} var products = { 'ahiru-picks': { 'title': 'Ahiru Picks', 'desc': 'an adorable set of 10 duck picks!', 'link': 'http://en.bentoandco.com/products/ahiru-picks', 'imgs': [ [ 'ahiru_pick_2_large.jpg', '-60%', '-30%' ], [ 'ahiru_pick_4_large.jpg', '-50%', '-35%' ], 'ahiru_pick_6_large.jpg' ], 'id': '206073312', 'price':'$4.16 USD', 'fb_url': 'https://www.facebook.com/BentoAndCoAhiruPicks' } }; var size = ["small", "x-large", "medium", "large","large"]; $("#fade, .x").click(function(){ $("#light").fadeOut(100); $("#fade").fadeOut(100); }); // Setup some analytics handlers $("#light .link").has("#light_img").unbind('click').bind('click', function() { // Visit product page via 'image' // Not sure if this is strictly necessary _gaq.push(["_trackEvent", "Product", "Details", "Image"]); }); $("#light #light_title.link").unbind('click').bind('click', function() { // Visit the product page via 'title' // Not sure if this is strictly necessary _gaq.push(["_trackEvent", "Product", "Details", "Title"]); }); $("#light p .link").unbind('click').bind('click', function() { // Visit the product page via 'view details' // Not sure if this is strictly necessary _gaq.push(["_trackEvent", "Product", "Details", "View Details"]); }); var getCSSNumericValue = function ($elem, rule) { // Get pixel value, remove 'px' from end of string, convert to a number return Number($elem.css(rule).substring(0, $elem.css(rule).length - 2)); }; var registerShare = function (network) { _gaq.push(["_trackEvent", "Product", "Share", network]); }; var generateFacebookButton = function (data) { var container = $("<div>", { "css" : {"display": "none"}, "data-id": data.title }); var link = $("<div>", { "data-href" : data.fb_url, "data-send" : "false", "data-layout" : "button_count", "data-width" : "100", "data-show-faces": "false", "data-ref" : "f", "class" : "fb-like" }); container.append(link); return container; }; var generateTwitterButton = function (data) { var container = $("<div>", { "css" : {"display": "none"}, "data-id": data.title }); var twitter_url = "https://twitter.com/share?" + "counturl=" + encodeURIComponent(data.link) + "&url=" + encodeURIComponent(data.link + "?r=t") + "&text=" + data.title; var link = $("<a>", { "href": twitter_url, "class": "twitter-share-button", "text": "Tweet" }); container.append(link); return container; }; var generatePinterestButton = function(data, index) { var img = data.imgs[0]; // TODO: Change image_url var image_url = "http://cdn.shopify.com/s/files/1/0029/8962/products/" + ($.isArray(img) ? img[0] : img); var buttonContainer = $("<div>", { "css": { "width" : "90px", "margin" : "0px", "padding" : "0px", "paddingBottom": "10px", "float" : "left", "border" : "0px none", "height" : "21px", "overflow" : "hidden", "position" : "relative" }, "data-id": data.title }); var link = $("<a>", { 'class': 'willet-pinterest-button', 'text': "Pin It" }); link.css({ 'position' : 'absolute', 'top' : '0px', 'left' : '0px', 'font' : "11px Arial, sans-serif", 'textIndent': "-9999em", 'fontSize' : ".01em", 'color' : "#CD1F1F", 'height' : "20px", 'width' : "43px", 'zIndex' : "1" }); link.click(function(){ registerShare("Pinterest"); window.open("http://pinterest.com/pin/create/button/" + "?url=" + encodeURIComponent(data.link + "?r=p") + "&media=" + encodeURIComponent(image_url) + "&description=" + encodeURIComponent("Bento & Co - " + data.title)); link.attr("class", "willet-pinterest-button clicked"); }); buttonContainer.append(link); var count = $('<div>', { "css": { 'position': 'relative', 'zIndex': "0", 'height': "20px", 'width': '77px' } }); var countLink = $("<a>", { "href": "http://pinterest.com/pin/create/button/" + "?url=" + encodeURIComponent(data.link) + "&media=" + encodeURIComponent(image_url) + "&description=" + data.desc, "class": 'pin-it-button', 'count-layout': 'horizontal' }); count.append(countLink); buttonContainer.append(count); return buttonContainer; }; var showPin = function () { var data = $(this).data(); $("#light_title").text(data.title); $("#light_desc").text(data.desc); $("#light_img").attr("src", ( $.isArray(data.img) ? data.img[0] : data.img )); $("#light .link").attr("href", data.link); var buy_url = "http://en.bentoandco.com/cart/" + data.buy +":1"; $("#light_buy").attr("href", buy_url); $("#light_price").text(data.price); // Setup any tricky handlers that could change... $("#light_buy").unbind("click").bind("click", function () { _gaq.push(["_trackEvent", "Product", "Buy Now", data.title]); }); //_gaq.push(["_trackEvent", "Category", "Action", "opt_label", "opt_value"]); _gaq.push(["_trackEvent", "Product", "Preview", data.title]); $(".pinterest_buttons>div").hide(); $(".pinterest_buttons div[data-id='" + data.title + "']").show(); $(".twitter_buttons>div").hide(); $(".twitter_buttons div[data-id='" + data.title + "']").show(); $(".fb_buttons>div").hide(); $(".fb_buttons div[data-id='" + data.title + "']").show(); $("#fade").fadeIn(100); $("#light").fadeIn(100); var $box = $(".box-content"); var box_height = 490 + getCSSNumericValue($box,'padding-top') + getCSSNumericValue($box,'padding-bottom'); $box.css('top', ($(window).height() - box_height) / 2 ); }; var generatePin = function(name, data, image_index) { var img = data.imgs[image_index]; var image_url = "http://cdn.shopify.com/s/files/1/0029/8962/products/" + ($.isArray(img) ? img[0] : img); var outerDiv = $("<div>", { "class" : "pin click", "data-pin-id": name, "data-title" : data.title, "data-desc" : data.desc, "data-link" : data.link, "data-img" : image_url, "data-price" : data.price, "data-buy" : data.id, "click" : showPin }); var innerDiv = $("<div>", { "class": 'inner-pin' }); var title = $("<h5>", { "class": 'pin-title', "text" : data.title }); var image_div = $("<div>", { "class": 'pinimg' }); var image = $("<img>", { "src": image_url }); image.css({ "marginLeft": ( $.isArray(img) ? img[1] : "-50%" ), "marginTop" : ( $.isArray(img) ? img[2] : "0" ) }); image_div.append(image); innerDiv.append(title); innerDiv.append(image_div); outerDiv.append(innerDiv); return outerDiv; }; var generateFeaturedProduct = function(name, featured) { // Generate featured product html // 1st generate logo var bento_logo = $("<div>", { 'id': 'bento-logo' }).html("" +"<a href='http://en.bentoandco.com'>" +" <img src='https://static.shopify.com/s/files/1/0029/8962/t/8/assets/bco-logo-vertical.png?106591' /></img>" +"</a>"); // 2nd generate product image var img = featured.imgs[0]; var image_url = "http://cdn.shopify.com/s/files/1/0029/8962/products/" + ($.isArray(img) ? img[0] : img); var feat_product = $('#featured-product').hide(); var feat_img_container = $("<div>", { "class" : "click", "id" : "featured_img", "data-pin-id": name, "data-title" : featured.title, "data-desc" : featured.desc, "data-link" : featured.link, "data-img" : image_url, "data-price" : featured.price, "data-buy" : featured.id, "click" : showPin }); var feat_img = $("<img>", { 'src': image_url }); feat_img_container.append(feat_img); // 3rd generate product information var feat_text = $("<div>", { 'class': 'text' }).html("" +"<h3><a id='featured_title' class='link'>Title goes here</a></h3>" +"<h4 id='featured_price'></h4>" +"<p id='featured_desc'></p>" +"<div id='featured_social'></div>"); // Append everything to DOM feat_product.append(bento_logo, feat_img_container, feat_text); feat_product.css('margin', '30px 0').css('height', '240px'); // Add social buttons $("#featured_title").text(featured.title).attr("href", featured.link); $("#featured_desc").text(featured.desc); $("#featured_price").text(featured.price); $('#featured_social').append( generateFacebookButton(featured), generatePinterestButton(featured), generateTwitterButton(featured)).children().css('display','block').css('float','left').css('min-width', '100px'); // Transition header to featured product $('.header').hide('blind'); $('.title').hide('blind'); $('.main-menu').hide('blind'); feat_product.show('blind'); }; // Generate social sharing buttons $.each(products, function(name, data) { // Generate all the Pinterest buttons. This is goofy, but easy. $(".pinterest_buttons").append(generatePinterestButton(data)); // Generate all the Twitter buttons. This is goofy, but easy. $(".twitter_buttons").append(generateTwitterButton(data)); // Generate all the Facebook buttons. This is goofy, but easy. $(".fb_buttons").append(generateFacebookButton(data)); }); // Generate layout var count = 0; $.each([0,1,2], function(index) { $.each(products, function(name, data) { var pin = generatePin(name, data, index); pin.addClass(size[count % size.length]); // Randomly size $('.column#'+(count%4)).append(pin); count++; }); }); // Generate featured product if url has hash fragment var hash = window.location.hash && window.location.hash.substring(1); if (hash && products.hasOwnProperty(hash)) { // Generate featured product generateFeaturedProduct(hash, products[hash]); } // load scripts var scripts = [ { "script": "http://assets.pinterest.com/js/pinit.js" }, { "script": "http://platform.twitter.com/widgets.js", "onload": function() { twttr.events.bind('tweet', function(event) { registerShare("Twitter"); }); } }, { "script": "http://connect.facebook.net/en_US/all.js#xfbml=1", "onload": function() { FB.Event.subscribe('edge.create', function(response) { registerShare("Facebook"); }); } } ]; var item, script; for (var i=0; i < scripts.length; i++) { item = scripts[i]; script = document.createElement("script"); script.src = item.script; script.onload = item.onload; document.body.appendChild(script); } }); var _gaq = _gaq || []; _gaq.push(['_setAccount', 'TRACKING_CODE']); _gaq.push(['_setDomainName', 'DOMAIN_NAME']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> -
Add the following snippet to the product page to capture ordinary social shares for Twitter and Facebook:
<script> (function () { var existing_onload = window.onload; window.onload = function () { try { existing_onload(); // call old one } catch (e) { /* in case there wasn't an onload */ } var fb_loaded, tw_loaded; var debug = function (msg) { if (window && window.console && window.console.log) { window.console.log(msg); } }; // set up analytics try { var willetTracker = _gat._getTracker('TRACKING_CODE'); if (!willetTracker) { debug('willetTracker failed to initialize'); return; } willetTracker._setDomainName("bentoandco.com"); willetTracker._setAllowLinker(true); willetTracker._initData(); willetTracker._trackPageview(); } catch (e) { debug(e); } // check every second to see if FB exists setInterval(function () { try { // https://developers.google.com/analytics/devguides/collection/gajs/gaTrackingSocial // (modified) if (typeof FB !== 'undefined' && !fb_loaded) { debug('Got FB!'); FB.Event.subscribe('edge.create', function (targetUrl) { debug('FB like detected!'); willetTracker._trackSocial('facebook', 'like', targetUrl); }); FB.Event.subscribe('edge.remove', function (targetUrl) { debug('FB unlike detected!'); willetTracker._trackSocial('facebook', 'unlike', targetUrl); }); FB.Event.subscribe('message.send', function (targetUrl) { debug('FB send detected!'); willetTracker._trackSocial('facebook', 'send', targetUrl); }); fb_loaded = true; // unset flag } else { // debug('No FB'); } } catch (err) { debug('Willet is doing it wrong: ' + err); } }, 1000); // check every second to see if twttr exists setInterval(function () { try { // (modified) if (typeof twttr !== 'undefined' && !tw_loaded) { var extractParamFromUri = function (uri, paramName) { if (!uri) { return; } var regex = new RegExp('[\\?&#]' + paramName + '=([^&#]*)'); var params = regex.exec(uri); if (params != null) { return unescape(params[1]); } return; }; var trackTwitter = function (intent_event) { if (intent_event) { var opt_pagePath; if (intent_event.target && intent_event.target.nodeName == 'IFRAME') { opt_pagePath = extractParamFromUri(intent_event.target.src, 'url'); debug('opt_target = ' + opt_pagePath); } debug('tracked tweet ' + opt_pagePath); willetTracker._trackSocial('twitter', 'tweet', opt_pagePath); } else { debug('no intent_event?!'); } }; // Wrap event bindings - Wait for async js to load twttr.ready(function (twttr) { twttr.events.bind('tweet', trackTwitter); debug('bound tweet event!'); }); tw_loaded = true; // unset flag } else { // debug('No twttr'); } } catch (err) { debug('Willet is doing it wrong: ' + err); } }, 1000); }; })(); </script>