Skip to content

Commit facd7bb

Browse files
Google analytics upgrade to GA4 is required #371 (#380)
1 parent c576269 commit facd7bb

4 files changed

Lines changed: 30 additions & 75 deletions

File tree

src/Plugins/Widgets.GoogleAnalytics/Areas/Admin/Views/WidgetsGoogleAnalytics/Configure.cshtml

Lines changed: 14 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -6,56 +6,23 @@
66
@await Component.InvokeAsync("StoreScope")
77
@{
88
//default values
9-
var googleAnalytics_trackingScript = Html.Raw(System.Text.Encodings.Web.JavaScriptEncoder.Default.Encode("<!-- Google code for Analytics tracking -->" + "\r\n" +
10-
"<script type=\"text/javascript\">" + "\r\n" +
11-
"var _gaq = _gaq || [];" + "\r\n" +
12-
"_gaq.push(['_setAccount', '{GOOGLEID}']);" + "\r\n" +
13-
"_gaq.push(['_trackPageview']);" + "\r\n" +
14-
"{ECOMMERCE}" + "\r\n" +
15-
"(function() {" + "\r\n" +
16-
"var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;" + "\r\n" +
17-
"ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';" + "\r\n" +
18-
"var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);" + "\r\n" +
19-
"})();" + "\r\n" +
20-
"</script>"));
21-
var googleAnalytics_EcommerceScript = Html.Raw(System.Text.Encodings.Web.JavaScriptEncoder.Default.Encode("_gaq.push(['_addTrans', '{ORDERID}', '{SITE}', '{TOTAL}', '{TAX}', '{SHIP}', '{CITY}', '{STATEPROVINCE}', '{COUNTRY}']);" + "\r\n" +
22-
"{DETAILS}" + "\r\n" +
23-
"_gaq.push(['_trackTrans']); "));
24-
var googleAnalytics_EcommerceDetailScript = Html.Raw(System.Text.Encodings.Web.JavaScriptEncoder.Default.Encode("_gaq.push(['_addItem', '{ORDERID}', '{PRODUCTSKU}', '{PRODUCTNAME}', '{CATEGORYNAME}', '{UNITPRICE}', '{QUANTITY}' ]); "));
25-
26-
var universalAnalytics_trackingScript = Html.Raw(System.Text.Encodings.Web.JavaScriptEncoder.Default.Encode("<!-- Google code for Analytics tracking -->" + "\r\n" +
27-
"<script>" + "\r\n" +
28-
"(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){" + "\r\n" +
29-
"(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o)," + "\r\n" +
30-
"m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)" + "\r\n" +
31-
"})(window,document,'script','//www.google-analytics.com/analytics.js','ga');" + "\r\n" +
32-
"ga('create', '{GOOGLEID}', 'auto');" + "\r\n" +
33-
"ga('send', 'pageview');" + "\r\n" +
34-
"{ECOMMERCE}" + "\r\n" +
35-
"</script>"));
36-
var universalAnalytics_EcommerceScript = Html.Raw(System.Text.Encodings.Web.JavaScriptEncoder.Default.Encode("ga('require', 'ecommerce', 'ecommerce.js');" + "\r\n" +
37-
"ga('ecommerce:addTransaction', {" + "\r\n" +
38-
"'id': '{ORDERID}'," + "\r\n" +
39-
"'affiliation': '{SITE}'," + "\r\n" +
40-
"'revenue': '{TOTAL}'," + "\r\n" +
41-
"'shipping': '{SHIP}'," + "\r\n" +
42-
"'tax': '{TAX}'" + "\r\n" +
43-
"});" + "\r\n" +
44-
"{DETAILS} " + "\r\n" +
45-
"ga('ecommerce:send');"));
46-
var universalAnalytics_EcommerceDetailScript = Html.Raw(System.Text.Encodings.Web.JavaScriptEncoder.Default.Encode("ga('ecommerce:addItem', {" + "\r\n" +
47-
"'id': '{ORDERID}'," + "\r\n" +
48-
"'name': '{PRODUCTNAME}'," + "\r\n" +
49-
"'sku': '{PRODUCTSKU}'," + "\r\n" +
50-
"'category': '{CATEGORYNAME}'," + "\r\n" +
51-
"'price': '{UNITPRICE}'," + "\r\n" +
52-
"'quantity': '{QUANTITY}'" + "\r\n" +
53-
"});"));
9+
var googleAnalytics_trackingScript = Html.Raw(System.Text.Encodings.Web.JavaScriptEncoder.Default.Encode(@"<!-- Google tag (gtag.js) -->
10+
<script async src='https://www.googletagmanager.com/gtag/js?id={GOOGLEID}'></script>
11+
<script>
12+
window.dataLayer = window.dataLayer || [];
13+
function gtag(){dataLayer.push(arguments);}
14+
gtag('js', new Date());
15+
gtag('config', '{GOOGLEID}');
16+
{ECOMMERCE}
17+
</script>
18+
"));
19+
var googleAnalytics_EcommerceScript = Html.Raw(System.Text.Encodings.Web.JavaScriptEncoder.Default.Encode(@"gtag('event', 'purchase', {transaction_id: '{ORDERID}', value: {TOTAL}, tax: {TAX}, shipping: {SHIP}, currency: '{CURRENCY}', city: '{CITY}', state: '{STATEPROVINCE}', country: '{COUNTRY}', items: [{DETAILS}]});"));
20+
var googleAnalytics_EcommerceDetailScript = Html.Raw(System.Text.Encodings.Web.JavaScriptEncoder.Default.Encode(@"{ item_id: '{PRODUCTID}', item_name: '{PRODUCTNAME}', item_category: '{CATEGORYNAME}', price: {UNITPRICE}, quantity: {QUANTITY} }, "));
21+
5422
}
5523
<script>
5624
$(document).ready(function () {
57-
$("#pre-configure-google-analytics").click(preConfigureGoogleAnalytic);
58-
$("#pre-configure-universal-analytics").click(preConfigureUniversalAnalytic);
25+
$("#pre-configure-google-analytics").click(preConfigureGoogleAnalytic);
5926
});
6027
6128
function preConfigureGoogleAnalytic() {
@@ -64,11 +31,6 @@
6431
$('#@Html.IdFor(model => model.EcommerceDetailScript)').val('@googleAnalytics_EcommerceDetailScript');
6532
}
6633
67-
function preConfigureUniversalAnalytic() {
68-
$('#@Html.IdFor(model => model.TrackingScript)').val('@universalAnalytics_trackingScript');
69-
$('#@Html.IdFor(model => model.EcommerceScript)').val('@universalAnalytics_EcommerceScript');
70-
$('#@Html.IdFor(model => model.EcommerceDetailScript)').val('@universalAnalytics_EcommerceDetailScript');
71-
}
7234
</script>
7335
<form asp-controller="WidgetsGoogleAnalytics" asp-action="Configure" method="post">
7436

@@ -93,11 +55,7 @@
9355
<li>Copy the Tracking ID into the 'ID' box below</li>
9456
<li>Click the 'Save' button below and Google Analytics will be integrated into your store</li>
9557
</ul>
96-
<p>
97-
If you would like to switch between Google Analytics (used by default) and Universal Analytics, then please use the buttons below:
98-
</p>
9958
<input type="button" id="pre-configure-google-analytics" class="k-button" value="Pre-configure Google Analytics" />
100-
<input type="button" id="pre-configure-universal-analytics" class="k-button" value="Pre-configure Universal Analytics" />
10159
</div>
10260
</div>
10361
<div class="form-group">

src/Plugins/Widgets.GoogleAnalytics/Components/WidgetsGoogleAnalyticsViewComponent.cs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,8 +107,8 @@ private async Task<string> GetEcommerceScript(Order order)
107107
var analyticsEcommerceScript = _googleAnalyticsEcommerceSettings.EcommerceScript + "\n";
108108
analyticsEcommerceScript = analyticsEcommerceScript.Replace("{GOOGLEID}", _googleAnalyticsEcommerceSettings.GoogleId);
109109
analyticsEcommerceScript = analyticsEcommerceScript.Replace("{ORDERID}", order.Id.ToString());
110-
analyticsEcommerceScript = analyticsEcommerceScript.Replace("{SITE}", _workContext.CurrentHost.Url.Replace("http://", "").Replace("/", ""));
111110
analyticsEcommerceScript = analyticsEcommerceScript.Replace("{TOTAL}", order.OrderTotal.ToString("0.00", usCulture));
111+
analyticsEcommerceScript = analyticsEcommerceScript.Replace("{CURRENCY}", order.CustomerCurrencyCode);
112112
analyticsEcommerceScript = analyticsEcommerceScript.Replace("{TAX}", order.OrderTax.ToString("0.00", usCulture));
113113
var orderShipping = _googleAnalyticsEcommerceSettings.IncludingTax ? order.OrderShippingInclTax : order.OrderShippingExclTax;
114114
analyticsEcommerceScript = analyticsEcommerceScript.Replace("{SHIP}", orderShipping.ToString("0.00", usCulture));
@@ -135,7 +135,8 @@ private async Task<string> GetEcommerceScript(Order order)
135135
}
136136
analyticsEcommerceDetailScript = analyticsEcommerceDetailScript.Replace("{ORDERID}", order.Id.ToString());
137137
//The SKU code is a required parameter for every item that is added to the transaction
138-
analyticsEcommerceDetailScript = analyticsEcommerceDetailScript.Replace("{PRODUCTSKU}", FixIllegalJavaScriptChars(product.FormatSku(item.Attributes)));
138+
analyticsEcommerceDetailScript = analyticsEcommerceDetailScript.Replace("{PRODUCTSKU}", FixIllegalJavaScriptChars(item.Sku));
139+
analyticsEcommerceDetailScript = analyticsEcommerceDetailScript.Replace("{PRODUCTID}", FixIllegalJavaScriptChars(item.ProductId));
139140
analyticsEcommerceDetailScript = analyticsEcommerceDetailScript.Replace("{PRODUCTNAME}", FixIllegalJavaScriptChars(product.Name));
140141
analyticsEcommerceDetailScript = analyticsEcommerceDetailScript.Replace("{CATEGORYNAME}", FixIllegalJavaScriptChars(category));
141142
var unitPrice = _googleAnalyticsEcommerceSettings.IncludingTax ? item.UnitPriceInclTax : item.UnitPriceExclTax;

src/Plugins/Widgets.GoogleAnalytics/GoogleAnalyticPlugin.cs

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -48,23 +48,19 @@ public override async Task Install()
4848
{
4949
var settings = new GoogleAnalyticsEcommerceSettings
5050
{
51-
GoogleId = "UA-0000000-0",
52-
TrackingScript = @"<!-- Google code for Analytics tracking -->
51+
GoogleId = "000000000",
52+
TrackingScript = @"<!-- Google tag (gtag.js) -->
53+
<script async src='https://www.googletagmanager.com/gtag/js?id={GOOGLEID}'></script>
5354
<script>
54-
var _gaq = _gaq || [];
55-
_gaq.push(['_setAccount', '{GOOGLEID}']);
56-
_gaq.push(['_trackPageview']);
57-
{ECOMMERCE}
58-
(function() {
59-
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
60-
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
61-
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
62-
})();
63-
</script>",
64-
EcommerceScript = @"_gaq.push(['_addTrans', '{ORDERID}', '{SITE}', '{TOTAL}', '{TAX}', '{SHIP}', '{CITY}', '{STATEPROVINCE}', '{COUNTRY}']);
65-
{DETAILS}
66-
_gaq.push(['_trackTrans']); ",
67-
EcommerceDetailScript = @"_gaq.push(['_addItem', '{ORDERID}', '{PRODUCTSKU}', '{PRODUCTNAME}', '{CATEGORYNAME}', '{UNITPRICE}', '{QUANTITY}' ]); ",
55+
window.dataLayer = window.dataLayer || [];
56+
function gtag(){dataLayer.push(arguments);}
57+
gtag('js', new Date());
58+
gtag('config', '{GOOGLEID}');
59+
{ECOMMERCE}
60+
</script>
61+
",
62+
EcommerceScript = @"gtag('event', 'purchase', {transaction_id: '{ORDERID}', value: {TOTAL}, tax: {TAX}, shipping: {SHIP}, currency: '{CURRENCY}', city: '{CITY}', state: '{STATEPROVINCE}', country: '{COUNTRY}', items: [{DETAILS}]});",
63+
EcommerceDetailScript = @"{ item_id: '{PRODUCTID}', item_name: '{PRODUCTNAME}', item_category: '{CATEGORYNAME}', price: {UNITPRICE}, quantity: {QUANTITY} }, ",
6864
ConsentName = "Google Analytics",
6965
ConsentDescription = "Allows us to analyse the statistics of visits to our website."
7066
};

src/Plugins/Widgets.GoogleAnalytics/Manifest.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@
88
SystemName = GoogleAnalyticDefaults.ProviderSystemName,
99
SupportedVersion = GrandVersion.SupportedPluginVersion,
1010
Author = "grandnode team",
11-
Version = "1.00"
11+
Version = "1.01"
1212
)]

0 commit comments

Comments
 (0)