Skip to content
This repository has been archived by the owner on Oct 23, 2019. It is now read-only.

Commit

Permalink
Update views and add necessary ones to support google manager tracking
Browse files Browse the repository at this point in the history
  • Loading branch information
Jonathan Tapia committed Nov 20, 2018
1 parent 9ea927e commit c32ebae
Show file tree
Hide file tree
Showing 7 changed files with 102 additions and 67 deletions.
8 changes: 8 additions & 0 deletions app/overrides/decorate_spree_application.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,11 @@
disabled: false,
partial: "spree/shared/google_analytics"
)

Deface::Override.new(
virtual_path: "spree/layouts/spree_application",
name: "google_manager_partial",
insert_bottom: "[data-hook='body']",
disabled: false,
partial: "spree/shared/google_manager"
)
30 changes: 19 additions & 11 deletions app/views/spree/admin/trackers/_form.html.erb
Original file line number Diff line number Diff line change
@@ -1,13 +1,21 @@
<div class="container">
<div data-hook="admin_tracker_form_fields" class="row">
<div class="col-md-3">
<div data-hook="analytics_id" class="field">
<div class='container'>
<div data-hook='admin_tracker_form_fields' class='row'>
<div class='col-3'>
<div data-hook='analytics_id' class='field'>
<%= f.label :analytics_id %>
<%= f.text_field :analytics_id, :class => 'fullwidth' %>
<%= f.text_field :analytics_id, class: 'fullwidth' %>
</div>
</div>
<div class="col-md-3">
<div data-hook="active" class="field">

<div class='col-3'>
<div data-hook='tracker_type' class='field'>
<%= f.label :tacker_type %>
<%= select_tag :tracker_type, options_for_select(tracker_types, @tracker.tracker_type), include_blank: true, class: 'select2 fullwidth', name: 'tracker[tracker_type]' %>
</div>
</div>

<div class='col-3'>
<div data-hook='active' class='field'>
<%= f.label :active %>
<ul>
<li>
Expand All @@ -21,11 +29,11 @@
</ul>
</div>
</div>
<div class="col-md-3">
<div data-hook="store_select" class="field">

<div class='col-3'>
<div data-hook='store_select' class='field'>
<%= f.label :store %>
<div class="clear"></div>
<%= collection_select(:tracker, :store_id, Spree::Store.all, :id, :name, {}) %>
<%= select_tag :store_id, options_from_collection_for_select(Spree::Store.all, :id, :name, @tracker.store_id), include_blank: true, class: 'select2 fullwidth', name: 'tracker[store_id]' %>
</div>
</div>
</div>
Expand Down
7 changes: 2 additions & 5 deletions app/views/spree/admin/trackers/edit.html.erb
Original file line number Diff line number Diff line change
@@ -1,18 +1,15 @@
<%= render 'spree/admin/shared/general_tabs' %>
<% admin_breadcrumb(Spree.t(:settings)) %>
<% admin_breadcrumb(Spree.t(:general_settings)) %>
<% admin_breadcrumb(link_to plural_resource_name(Spree::Tracker), spree.admin_trackers_path) %>
<% admin_breadcrumb(@tracker.analytics_id) %>
<% content_for :page_actions do %>
<% end %>
<%= render :partial => 'spree/shared/error_messages', :locals => { :target => @tracker } %>
<%= render 'spree/shared/error_messages', target: @tracker %>
<%= form_for [:admin, @tracker] do |f| %>
<fieldset class="no-border-top">
<fieldset class='no-border-top'>
<%= render :partial => 'form', :locals => { :f => f } %>
<%= render :partial => 'spree/admin/shared/edit_resource_links' %>
</fieldset>
Expand Down
29 changes: 17 additions & 12 deletions app/views/spree/admin/trackers/index.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -7,32 +7,37 @@
<% content_for :page_actions do %>
<% if can?(:create, Spree::Tracker) %>
<li>
<%= button_link_to Spree.t(:new_tracker), new_object_url, :id => 'admin_new_tracker_link' %>
<%= button_link_to Spree.t(:new_tracker), new_object_url, id: 'admin_new_tracker_link' %>
</li>
<% end %>
<% end %>
<% if @trackers.any? %>
<table class="index">
<table class='index'>
<colgroup>
<col style="width: 30%">
<col style="width: 40%">
<col style="width: 15%">
<col style="width: 15%">
<col style='width: 20%'>
<col style='width: 10%'>
<col style='width: 5%'>
<col style='width: 25%'>
<col style='width: 10%'>
</colgroup>

<thead>
<tr data-hook="admin_trackers_index_headers">
<tr data-hook='admin_trackers_index_headers'>
<th><%= Spree::Tracker.human_attribute_name(:analytics_id) %></th>
<th><%= Spree::Tracker.human_attribute_name(:active) %></th>
<th><%= Spree::Tracker.human_attribute_name(:tracker_type) %></th>
<th class='align-center'><%= Spree::Tracker.human_attribute_name(:active) %></th>
<th><%= Spree.t(:store) %></th>
<th class="actions"></th>
</tr>
</thead>

<tbody>
<% @trackers.each do |tracker|%>
<tr id="<%= spree_dom_id tracker %>" data-hook="admin_trackers_index_rows" class="<%= cycle('odd', 'even')%>">
<td class="align-center"><%= tracker.analytics_id %></td>
<td class="align-center"><%= tracker.active ? Spree.t(:say_yes) : Spree.t(:say_no) %></td>
<tr id='<%= spree_dom_id tracker %>'' data-hook='admin_trackers_index_rows' class='<%= cycle('odd', 'even')%>'>
<td><%= tracker.analytics_id %></td>
<td><%= tracker.tracker_type.capitalize %></td>
<td class='align-center'><%= tracker.active ? Spree.t(:say_yes) : Spree.t(:say_no) %></td>
<td><%= tracker.store.name %></td>
<td class="actions">
<% if can?(:update, tracker) %>
Expand All @@ -48,7 +53,7 @@
</tbody>
</table>
<% else %>
<div class="no-objects-found">
<div class='no-objects-found'>
<%= render 'spree/admin/shared/no_objects_found',
resource: Spree::Tracker,
new_resource_url: new_object_url %>
Expand Down
10 changes: 4 additions & 6 deletions app/views/spree/admin/trackers/new.html.erb
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
<%= render 'spree/admin/shared/general_tabs' %>
<% admin_breadcrumb(Spree.t(:settings)) %>
<% admin_breadcrumb(Spree.t(:general_settings)) %>
<% admin_breadcrumb(link_to plural_resource_name(Spree::Tracker), spree.admin_trackers_path) %>
<% admin_breadcrumb(Spree.t(:new_tracker)) %>
<% content_for :page_actions do %>
<% end %>
<%= render :partial => 'spree/shared/error_messages', :locals => { :target => @tracker } %>
<%= render 'spree/shared/error_messages', target: @tracker %>
<%= form_for [:admin, @tracker] do |f| %>
<fieldset class="no-border-top">
<%= render :partial => 'form', :locals => { :f => f } %>
<%= render :partial => 'spree/admin/shared/new_resource_links' %>
<fieldset class='no-border-top'>
<%= render partial: 'form', locals: { f: f } %>
<%= render partial: 'spree/admin/shared/new_resource_links' %>
</fieldset>
<% end %>
72 changes: 39 additions & 33 deletions app/views/spree/shared/_google_analytics.html.erb
Original file line number Diff line number Diff line change
@@ -1,36 +1,42 @@
<% if tracker = Spree::Tracker.current(current_store) %>
<script id="solidus_trackers">
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
<% trackers = Spree::Tracker.current(Spree::Store.default, 'analytics') %>
ga('create', '<%= tracker.analytics_id %>', 'auto');
ga('require', 'displayfeatures');
ga('send', 'pageview');
<% if trackers.any? %>
<% trackers.each do |tracker| %>
<script id='solidus_trackers_analytics'>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');

<% if @order && order_just_completed?(@order) %>
<%# more info: https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce %>
ga('require', 'ecommerce', 'ecommerce.js');
ga('ecommerce:addTransaction', {
'id': '<%= j @order.number %>', // Transaction ID. Required.
'affiliation': '<%= current_store.name %>', // Affiliation or store name.
'revenue': '<%= @order.total %>', // Grand Total.
'shipping': '<%= @order.ship_total %>', // Shipping.
'tax': '<%= @order.tax_total %>', // Tax.
'currency': '<%= @order.currency %>' // local currency code.
});
<% @order.line_items.each do |line_item| %>
ga('ecommerce:addItem', {
'id': '<%= j @order.number %>', // Transaction ID. Required.
'name': '<%= j line_item.variant.product.name %>', // Product name. Required.
'sku': '<%= j (line_item.variant.sku || line_item.variant_id) %>', // SKU/code.
'category': '', // Category or variation.
'price': '<%= line_item.price %>', // Unit price.
'quantity': '<%= line_item.quantity %>' // Quantity.
});
<% end %>
ga('ecommerce:send');
<% end %>
</script>
ga('create', '<%= tracker.analytics_id %>', 'auto');
ga('require', 'displayfeatures');
ga('send', 'pageview');

<% if @order && order_just_completed?(@order) %>
// more info: https://developers.google.com/analytics/devguides/collection/analyticsjs/ecommerce
ga('require', 'ecommerce', 'ecommerce.js');
ga('ecommerce:addTransaction', { 'id': '<%= j @order.number %>', // Transaction ID. Required.
'affiliation': '<%= current_store.name %>', // Affiliation or store name.
'revenue': '<%= @order.total %>', // Grand Total.
'shipping': '<%= @order.ship_total %>', // Shipping.
'tax': '<%= @order.tax_total %>', // Tax.
'currency': '<%= @order.currency %>' // local currency code.
}
);

<% @order.line_items.each do |line_item| %>
ga('ecommerce:addItem', { 'id': '<%= j @order.number %>', // Transaction ID. Required.
'name': '<%= j line_item.variant.product.name %>', // Product name. Required.
'sku': '<%= j (line_item.variant.sku || line_item.variant_id) %>', // SKU/code.
'category': '', // Category or variation.
'price': '<%= line_item.price %>', // Unit price.
'quantity': '<%= line_item.quantity %>' // Quantity.
}
);
<% end %>

ga('ecommerce:send');
<% end %>
</script>
<% end %>
<% end %>
13 changes: 13 additions & 0 deletions app/views/spree/shared/_google_manager.html.erb
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<% trackers = Spree::Tracker.current(Spree::Store.default, 'manager') %>
<% if trackers.any? %>
<% trackers.each do |tracker| %>
<script id="solidus_trackers_manager">
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','<%= tracker.analytics_id %>');</script>
</script>
<% end %>
<% end %>

0 comments on commit c32ebae

Please sign in to comment.