16
16
use GoogleTagManager \GoogleTagManager ;
17
17
use GoogleTagManager \Service \GoogleTagService ;
18
18
use Symfony \Component \EventDispatcher \EventDispatcherInterface ;
19
+ use Symfony \Component \HttpFoundation \RequestStack ;
19
20
use Thelia \Core \Event \Hook \HookRenderEvent ;
20
21
use Thelia \Core \Hook \BaseHook ;
22
+ use Thelia \Core \HttpFoundation \Session \Session ;
23
+ use Thelia \Model \AddressQuery ;
21
24
use Thelia \Model \LangQuery ;
25
+ use Thelia \TaxEngine \TaxEngine ;
22
26
23
27
/**
24
28
* Class FrontHook
27
31
*/
28
32
class FrontHook extends BaseHook
29
33
{
30
- public function __construct (private GoogleTagService $ googleTagService , EventDispatcherInterface $ eventDispatcher )
34
+ public function __construct (
35
+ private GoogleTagService $ googleTagService ,
36
+ private EventDispatcherInterface $ eventDispatcher ,
37
+ private TaxEngine $ taxEngine ,
38
+ private RequestStack $ requestStack
39
+ )
31
40
{
32
41
parent ::__construct (null , null , $ eventDispatcher );
33
42
}
34
43
35
- public function onMainHeadTop (HookRenderEvent $ event ){
36
- $ lang = $ this ->getLang ();
44
+ public function onMainHeadTop (HookRenderEvent $ event )
45
+ {
46
+ $ request = $ this ->requestStack ->getCurrentRequest ();
47
+
48
+ /** @var Session $session */
49
+ $ session = $ request ->getSession ();
50
+
37
51
$ gtmId = GoogleTagManager::getConfigValue ('googletagmanager_gtmId ' );
38
- if ("" != $ gtmId ){
39
- $ view = $ this ->request ->get ('_view ' );
52
+
53
+ if ("" != $ gtmId ) {
54
+ $ view = $ request ->get ('_view ' );
40
55
41
56
$ event ->add ($ this ->render ('datalayer/thelia-page-view.html ' , ['data ' => $ this ->googleTagService ->getTheliaPageViewParameters ()]));
42
57
@@ -48,64 +63,78 @@ public function onMainHeadTop(HookRenderEvent $event){
48
63
$ event ->add ($ this ->render ('datalayer/view-item.html ' , ['eventName ' => 'view_item ' ]));
49
64
}
50
65
51
- if (null !== $ authAction = $ this -> request -> getSession ()-> get (GoogleTagManager::GOOGLE_TAG_TRIGGER_LOGIN )){
66
+ if (null !== $ authAction = $ session -> get (GoogleTagManager::GOOGLE_TAG_TRIGGER_LOGIN )) {
52
67
$ event ->add ($ this ->render ('datalayer/thelia-page-view.html ' , [
53
68
'data ' => $ this ->googleTagService ->getLogInData ($ authAction )
54
69
]));
55
- $ this ->request ->getSession ()->set (GoogleTagManager::GOOGLE_TAG_TRIGGER_LOGIN , null );
70
+ $ session ->set (GoogleTagManager::GOOGLE_TAG_TRIGGER_LOGIN , null );
71
+ }
72
+
73
+ if ($ view === 'order-delivery ' ) {
74
+ /** @var Session $session */
75
+ $ session = $ request ->getSession ();
76
+ $ cart = $ session ->getSessionCart ($ this ->eventDispatcher );
77
+
78
+ $ event ->add ($ this ->render ('datalayer/thelia-page-view.html ' , [
79
+ 'data ' => $ this ->googleTagService ->getCartData ($ cart ->getId (), $ this ->taxEngine ->getDeliveryCountry ())
80
+ ]));
81
+
82
+ $ event ->add ($ this ->render ('datalayer/thelia-page-view.html ' , [
83
+ 'data ' => $ this ->googleTagService ->getCheckOutData ($ cart ->getId (), $ this ->taxEngine ->getDeliveryCountry ())
84
+ ]));
56
85
}
57
86
58
87
if ($ view === 'order-placed ' ) {
59
88
$ event ->add ($ this ->render ('datalayer/thelia-page-view.html ' , [
60
- 'data ' => $ this ->googleTagService ->getPurchaseData ($ this -> request ->get ('order_id ' ))
89
+ 'data ' => $ this ->googleTagService ->getPurchaseData ($ session ->get ('order_id ' ))
61
90
]));
62
91
}
63
92
64
93
$ event ->add (
65
- "<!-- Google Tag Manager --> " .
66
- "<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': " .
67
- "new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], " .
68
- "j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= " .
69
- "'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); " .
70
- "})(window,document,'script','dataLayer',' " . $ gtmId. "');</script> " .
94
+ "<!-- Google Tag Manager --> " .
95
+ "<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': " .
96
+ "new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], " .
97
+ "j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= " .
98
+ "'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); " .
99
+ "})(window,document,'script','dataLayer',' " . $ gtmId . "');</script> " .
71
100
"<!-- End Google Tag Manager --> "
72
101
);
73
102
}
74
103
}
75
104
76
105
public function onMainBodyTop (HookRenderEvent $ event )
77
106
{
78
- $ lang = $ this ->getLang ();
79
- $ value = GoogleTagManager::getConfigValue ('googletagmanager_gtmId ' );
80
- if ("" != $ value ){
81
- $ event ->add ("<!-- Google Tag Manager (noscript) --> " .
82
- "<noscript><iframe src='https://www.googletagmanager.com/ns.html?id= " .$ value ."' " .
83
- "height='0' width='0' style='display:none;visibility:hidden'></iframe></noscript> " .
107
+ if (!$ value = GoogleTagManager::getConfigValue ('googletagmanager_gtmId ' )) {
108
+ $ event ->add ("<!-- Google Tag Manager (noscript) --> " .
109
+ "<noscript><iframe src='https://www.googletagmanager.com/ns.html?id= " . $ value . "' " .
110
+ "height='0' width='0' style='display:none;visibility:hidden'></iframe></noscript> " .
84
111
"<!-- End Google Tag Manager (noscript) --> "
85
112
);
86
113
}
87
114
}
88
115
89
116
public function onMainJsInit (HookRenderEvent $ event )
90
117
{
91
- $ view = $ this ->request ->get ('_view ' );
118
+ $ view = $ this ->requestStack -> getCurrentRequest () ->get ('_view ' );
92
119
93
120
if (in_array ($ view , ['category ' , 'brand ' , 'search ' ])) {
94
121
$ event ->add ($ this ->render ('datalayer/select-item.html ' ));
95
122
}
123
+
124
+ //include event listener to handle add to cart event (check README)
96
125
$ event ->add ($ this ->render ('datalayer/add-to-cart.html ' ));
97
126
}
98
127
99
128
public function onProductBottom (HookRenderEvent $ event )
100
129
{
101
130
$ productId = $ event ->getArgument ('product ' );
102
- $ this ->request ->getSession ()->set (GoogleTagManager::GOOGLE_TAG_VIEW_ITEM , $ productId );
131
+ $ this ->requestStack -> getCurrentRequest () ->getSession ()->set (GoogleTagManager::GOOGLE_TAG_VIEW_ITEM , $ productId );
103
132
}
104
133
105
134
protected function getLang ()
106
135
{
107
136
$ lang = $ this ->getRequest ()->getSession ()->get ("thelia.current.lang " );
108
- if (null === $ lang ){
137
+ if (null === $ lang ) {
109
138
$ lang = LangQuery::create ()->filterByByDefault (1 )->findOne ();
110
139
}
111
140
return $ lang ;
0 commit comments