@@ -197,36 +197,177 @@ protected function _getOrdersTrackingCodeUniversal()
197
197
*/
198
198
protected function _getOrdersTrackingCodeAnalytics4 ()
199
199
{
200
+ $ result = [];
201
+ $ request = $ this ->getRequest ();
202
+ $ moduleName = $ request ->getModuleName ();
203
+ $ controllerName = $ request ->getControllerName ();
204
+
205
+ //purchase events
200
206
$ orderIds = $ this ->getOrderIds ();
201
- if (empty ($ orderIds ) || !is_array ($ orderIds )) {
202
- return '' ;
207
+ if (!empty ($ orderIds ) && is_array ($ orderIds )) {
208
+ $ collection = Mage::getResourceModel ('sales/order_collection ' )
209
+ ->addFieldToFilter ('entity_id ' , ['in ' => $ orderIds ]);
210
+ /** @var Mage_Sales_Model_Order $order */
211
+ foreach ($ collection as $ order ) {
212
+ $ orderData = [
213
+ 'currency ' => $ order ->getBaseCurrencyCode (),
214
+ 'transaction_id ' => $ order ->getIncrementId (),
215
+ 'value ' => number_format ($ order ->getBaseGrandTotal (), 2 ),
216
+ 'coupon ' => strtoupper ($ order ->getCouponCode ()),
217
+ 'shipping ' => number_format ($ order ->getBaseShippingAmount (), 2 ),
218
+ 'tax ' => number_format ($ order ->getBaseTaxAmount (), 2 ),
219
+ 'items ' => []
220
+ ];
221
+
222
+ /** @var Mage_Sales_Model_Order_Item $item */
223
+ foreach ($ order ->getAllVisibleItems () as $ item ) {
224
+ $ orderData ['items ' ][] = [
225
+ 'item_id ' => $ item ->getSku (),
226
+ 'item_name ' => $ item ->getName (),
227
+ 'quantity ' => $ item ->getQtyOrdered (),
228
+ 'price ' => $ item ->getBasePrice (),
229
+ 'discount ' => $ item ->getBaseDiscountAmount ()
230
+ ];
231
+ }
232
+ $ result [] = "gtag('event', 'purchase', " . json_encode ($ orderData , JSON_THROW_ON_ERROR ) . "); " ;
233
+ }
203
234
}
204
- $ collection = Mage::getResourceModel ('sales/order_collection ' )
205
- ->addFieldToFilter ('entity_id ' , ['in ' => $ orderIds ]);
206
- $ result = [];
207
- /** @var Mage_Sales_Model_Order $order */
208
- foreach ($ collection as $ order ) {
209
- $ orderData = [
210
- 'currency ' => $ order ->getBaseCurrencyCode (),
211
- 'transaction_id ' => $ order ->getIncrementId (),
212
- 'value ' => number_format ($ order ->getBaseGrandTotal (), 2 ),
213
- 'coupon ' => strtoupper ($ order ->getCouponCode ()),
214
- 'shipping ' => number_format ($ order ->getBaseShippingAmount (), 2 ),
215
- 'tax ' => number_format ($ order ->getBaseTaxAmount (), 2 ),
216
- 'items ' => []
235
+
236
+ //Begin advanced eCommerce events
237
+ //product page
238
+ if ($ moduleName == 'catalog ' && $ controllerName == 'product ' ) {
239
+ $ productViewed = Mage::registry ('current_product ' );
240
+ $ eventData = [];
241
+ $ eventData ['currency ' ] = Mage::app ()->getStore ()->getCurrentCurrencyCode ();
242
+ $ eventData ['value ' ] = number_format ($ productViewed ->getFinalPrice (), 2 );
243
+ $ eventData ['items ' ] = [];
244
+ $ eventData ['items ' ][] = [
245
+ 'id ' => $ productViewed ->getSku (),
246
+ 'name ' => $ productViewed ->getName (),
247
+ 'list_name ' => 'Product Detail Page ' ,
248
+ 'brand ' => $ productViewed ->getAttributeText ('manufacturer ' ),
249
+ 'category ' => 'Products ' ,
250
+ 'price ' => number_format ($ productViewed ->getFinalPrice (), 2 ),
217
251
];
218
252
219
- /** @var Mage_Sales_Model_Order_Item $item */
220
- foreach ($ order ->getAllVisibleItems () as $ item ) {
221
- $ orderData ['items ' ][] = [
222
- 'item_id ' => $ item ->getSku (),
223
- 'item_name ' => $ item ->getName (),
224
- 'quantity ' => $ item ->getQtyOrdered (),
225
- 'price ' => $ item ->getBasePrice (),
226
- 'discount ' => $ item ->getBaseDiscountAmount ()
253
+ $ result [] = "gtag('event', 'view_item', " . json_encode ($ eventData , JSON_THROW_ON_ERROR ) . "); " ;
254
+ }
255
+
256
+ //category page
257
+ elseif ($ moduleName == 'catalog ' && $ controllerName == 'category ' ) {
258
+ $ layer = Mage::getSingleton ('catalog/layer ' );
259
+ $ category = $ layer ->getCurrentCategory ();
260
+ $ productCollection = clone $ layer ->getProductCollection ();
261
+ $ toolbarBlock = Mage::app ()->getLayout ()->getBlock ('product_list_toolbar ' );
262
+ $ pageSize = $ toolbarBlock ->getLimit ();
263
+ $ currentPage = $ toolbarBlock ->getCurrentPage ();
264
+ if ($ pageSize !== 'all ' ) {
265
+ $ productCollection ->setPageSize ($ pageSize )->setCurPage ($ currentPage );
266
+ }
267
+ $ eventData = [];
268
+ $ eventData ['currency ' ] = Mage::app ()->getStore ()->getCurrentCurrencyCode ();
269
+ $ eventData ['value ' ] = 0.00 ;
270
+ $ eventData ['item_list_id ' ] = 'category_ ' .$ category ->getUrlKey ();
271
+ $ eventData ['item_list_name ' ] = $ category ->getName ();
272
+ $ eventData ['items ' ] = [];
273
+
274
+ foreach ($ productCollection as $ productViewed ) {
275
+ $ eventData ['items ' ][] = [
276
+ 'id ' => $ productViewed ->getSku (),
277
+ 'name ' => $ productViewed ->getName (),
278
+ 'list_name ' => 'Product Detail Page ' ,
279
+ 'brand ' => $ productViewed ->getAttributeText ('manufacturer ' ),
280
+ 'category ' => 'Products ' ,
281
+ 'price ' => number_format ($ productViewed ->getFinalPrice (), 2 ),
282
+ ];
283
+ $ eventData ['value ' ] += $ productViewed ->getFinalPrice ();
284
+ }
285
+ $ eventData ['value ' ] = number_format ($ eventData ['value ' ], 2 );
286
+ $ result [] = "gtag('event', 'view_item_list', " . json_encode ($ eventData , JSON_THROW_ON_ERROR ) . "); " ;
287
+ }
288
+
289
+ //cart
290
+ elseif ($ moduleName == 'checkout ' && $ controllerName == 'cart ' ) {
291
+ $ removedProduct = Mage::getSingleton ('core/session ' )->getRemovedProductCart ();
292
+ if ($ removedProduct ) {
293
+ $ _removedProduct = Mage::getModel ('catalog/product ' )->load ($ removedProduct );
294
+ $ eventData = [];
295
+ $ eventData ['currency ' ] = Mage::app ()->getStore ()->getCurrentCurrencyCode ();
296
+ $ eventData ['value ' ] = number_format ($ _removedProduct ->getFinalPrice (), 2 );
297
+ $ eventData ['items ' ] = [];
298
+ $ eventData ['items ' ][] = [
299
+ 'id ' => $ _removedProduct ->getSku (),
300
+ 'name ' => $ _removedProduct ->getName (),
301
+ 'list_name ' => 'Product Detail Page ' ,
302
+ 'brand ' => $ _removedProduct ->getAttributeText ('manufacturer ' ),
303
+ 'category ' => 'Products ' ,
304
+ 'price ' => number_format ($ _removedProduct ->getFinalPrice (), 2 ),
305
+ ];
306
+ $ result [] = "gtag('event', 'remove_from_cart', " . json_encode ($ eventData , JSON_THROW_ON_ERROR ) . "); " ;
307
+ Mage::getSingleton ('core/session ' )->unsRemovedProductCart ();
308
+ }
309
+
310
+ $ addedProduct = Mage::getSingleton ('core/session ' )->getAddedProductCart ();
311
+ if ($ addedProduct ) {
312
+ $ _addedProduct = Mage::getModel ('catalog/product ' )->load ($ addedProduct );
313
+ $ eventData = [];
314
+ $ eventData ['currency ' ] = Mage::app ()->getStore ()->getCurrentCurrencyCode ();
315
+ $ eventData ['value ' ] = number_format ($ _addedProduct ->getFinalPrice (), 2 );
316
+ $ eventData ['items ' ] = [];
317
+ $ eventData ['items ' ][] = [
318
+ 'id ' => $ _addedProduct ->getSku (),
319
+ 'name ' => $ _addedProduct ->getName (),
320
+ 'list_name ' => 'Product Detail Page ' ,
321
+ 'brand ' => $ _addedProduct ->getAttributeText ('manufacturer ' ),
322
+ 'category ' => 'Products ' ,
323
+ 'price ' => number_format ($ _addedProduct ->getFinalPrice (), 2 ),
324
+ ];
325
+ $ result [] = "gtag('event', 'add_to_cart', " . json_encode ($ eventData , JSON_THROW_ON_ERROR ) . "); " ;
326
+ Mage::getSingleton ('core/session ' )->unsAddedProductCart ();
327
+ }
328
+
329
+ $ productCollection = Mage::getSingleton ('checkout/session ' )->getQuote ()->getAllVisibleItems ();
330
+ $ eventData = [];
331
+ $ eventData ['currency ' ] = Mage::app ()->getStore ()->getCurrentCurrencyCode ();
332
+ $ eventData ['value ' ] = 0.00 ;
333
+ $ eventData ['items ' ] = [];
334
+
335
+ foreach ($ productCollection as $ productInCart ) {
336
+ $ eventData ['items ' ][] = [
337
+ 'id ' => $ productInCart ->getSku (),
338
+ 'name ' => $ productInCart ->getName (),
339
+ 'list_name ' => 'Product Detail Page ' ,
340
+ 'brand ' => $ productInCart ->getAttributeText ('manufacturer ' ),
341
+ 'category ' => 'Products ' ,
342
+ 'price ' => number_format ($ productInCart ->getFinalPrice (), 2 ),
343
+ ];
344
+ $ eventData ['value ' ] += $ productInCart ->getFinalPrice ();
345
+ }
346
+ $ eventData ['value ' ] = number_format ($ eventData ['value ' ], 2 );
347
+ $ result [] = "gtag('event', 'view_cart', " . json_encode ($ eventData , JSON_THROW_ON_ERROR ) . "); " ;
348
+ }
349
+
350
+ //begin checkout
351
+ elseif ($ moduleName == 'checkout ' && $ controllerName == 'onepage ' ) {
352
+ $ productCollection = Mage::getSingleton ('checkout/session ' )->getQuote ()->getAllVisibleItems ();
353
+ $ eventData = [];
354
+ $ eventData ['currency ' ] = Mage::app ()->getStore ()->getCurrentCurrencyCode ();
355
+ $ eventData ['value ' ] = 0.00 ;
356
+ $ eventData ['items ' ] = [];
357
+
358
+ foreach ($ productCollection as $ productInCart ) {
359
+ $ eventData ['items ' ][] = [
360
+ 'id ' => $ productInCart ->getSku (),
361
+ 'name ' => $ productInCart ->getName (),
362
+ 'list_name ' => 'Product Detail Page ' ,
363
+ 'brand ' => $ productInCart ->getAttributeText ('manufacturer ' ),
364
+ 'category ' => 'Products ' ,
365
+ 'price ' => number_format ($ productInCart ->getFinalPrice (), 2 ),
227
366
];
367
+ $ eventData ['value ' ] += $ productInCart ->getFinalPrice ();
228
368
}
229
- $ result [] = "gtag('event', 'purchase', " . json_encode ($ orderData , JSON_THROW_ON_ERROR ) . "); " ;
369
+ $ eventData ['value ' ] = number_format ($ eventData ['value ' ], 2 );
370
+ $ result [] = "gtag('event', 'begin_checkout', " . json_encode ($ eventData , JSON_THROW_ON_ERROR ) . "); " ;
230
371
}
231
372
return implode ("\n" , $ result );
232
373
}
0 commit comments