]> _ Git - pmi.git/commitdiff
wip #2951 @1:40
authorVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 3 Sep 2019 16:50:11 +0000 (18:50 +0200)
committerVincent Vanwaelscappel <vincent@cubedesigners.com>
Tue, 3 Sep 2019 16:50:11 +0000 (18:50 +0200)
resources/js/components/Search.vue
resources/js/components/SearchField.vue
resources/js/mailform.js
resources/js/vendor/cubist/gtag/gtag.js
resources/views/components/map-link.blade.php
resources/views/components/phone-link.blade.php
resources/views/pages/cart.blade.php
resources/views/pages/contact.blade.php
resources/views/pages/search.blade.php
resources/views/partials/contact-details.blade.php
resources/views/partials/form.blade.php

index ccc6b0daca9db95b9e4b21bb9a7bfbd935af5197..98c47b8c9484fde52b0a30b143a1c10c7bf7eadf 100644 (file)
@@ -3,17 +3,16 @@
 
         <!-- Trigger Link that will appear inside the nav portal -->
         <portal to="nav-search-toggle">
-            <a href="#" class="text-white hover:text-blue" @click.prevent="toggleVisibility" :class="visible ? 'text-blue' : ''">
+            <a href="#" class="text-white hover:text-blue" @click.prevent="toggleVisibility"
+               :class="visible ? 'text-blue' : ''">
                 <slot name="link"></slot>
             </a>
         </portal>
 
         <slide-toggle :active="visible" :duration="300" @open-end="focusField">
             <div class="header-search-box container py-3">
-                <form :action="endpoint" method="get" class="flex justify-between items-center">
-
+                <form :action="endpoint" method="get" class="flex justify-between items-center" @submit="submitForm">
                     <search-field :placeholder="placeholder" ref="searchInput"></search-field>
-
                     <button class="ml-4 p-3 -mr-3 appearance-none focus:outline-none focus:bg-grey-100">
                         <slot name="button"></slot>
                     </button>
@@ -51,7 +50,7 @@
             }
         },
 
-        mounted () {
+        mounted() {
             let component = this;
 
             // Allow search field to be opened using the common '/' shortcut
@@ -81,6 +80,9 @@
 
             focusField() {
                 this.$refs.searchInput.focus()
+            },
+            submitForm() {
+                cubistga.event('search', 'engagment', null, null, false, {'search_term': this.$refs.searchInput.getInputValue()});
             }
         }
     }
index a70351e9c48c5e133beab22aa0bc2b59890f0149..56889a71efbe176998f09e2e92f6353de85d1546 100644 (file)
@@ -2,6 +2,7 @@
     <autocomplete
         class="flex-grow"
         name="q"
+        :default-value="value"
         ref="autocomplete"
         :search="getSuggestions"
         :get-result-value="getResultValue"
@@ -26,7 +27,7 @@
         data() {
             return {
                 ajaxURL: `/ajax/search`,
-                suggestionsLimit: 5,
+                suggestionsLimit: 5
             }
         },
 
@@ -34,6 +35,9 @@
             placeholder: {
                 type: String,
             },
+            value:{
+                type: String,
+            }
         },
 
         mounted () {
                 this.$refs.autocomplete.$refs.input.focus()
             },
 
+            getInputValue(){
+                return this.$refs.autocomplete.$refs.input.value;
+            },
+
             getSuggestions(input) {
 
                 return new Promise(resolve => {
@@ -69,7 +77,7 @@
                 return result.title
             },
 
-            handleSubmit(input) {
+            handleSubmit() {
                 let $this = this;
                 this.$nextTick(function () {
                     $this.$el.closest('form').submit();
index 42ef232d2177b1ad58b6e22b27a74900ece92bc3..d4806205555c4d0c3dc04c48a7854b176daf026a 100644 (file)
@@ -30,6 +30,7 @@ $(function () {
             let responseClasses = form.data('confirmation-classes') || 'text-2xl text-center p-8';
             form.find('.error').removeClass('error');
             form.html(`<p class="${responseClasses}">${form.data('confirmation')}</p>`);
+            cubistga.handleGtag($(form).get(0));
         }).fail(function (response) {
             button.text(button.data('text')).prop('disabled', false);
             form.find('.error').removeClass('error');
index 31119e273e68e0dc8c28a18298fddb01ee9bd7da..88dbac2854b1948c6a56d5951bf2138c0d369acc 100644 (file)
@@ -11,11 +11,11 @@ cubistga.prototype.initEvents = function () {
     });
 
     document.addEventListener('click', function (e) {
-        if (e.target.matches('[data-ga]')) {
+        if (e.target.matches('a[data-ga]')) {
             $this.handleGtag(e.target);
         }
-        if (e.target.closest('[data-ga]')) {
-            $this.handleGtag(e.target.closest('[data-ga]'));
+        if (e.target.closest('a[data-ga]')) {
+            $this.handleGtag(e.target.closest('a[data-ga]'));
         }
     }, false);
 };
@@ -53,7 +53,7 @@ cubistga.prototype.event = function (action, category, label, value, noninteract
     if (undefined !== value && null !== value) {
         options.value = value;
     }
-    console.log('gtag event',action,options);
+    console.log('gtag event', action, options);
     return gtag('event', action, options)
 };
 
@@ -63,8 +63,17 @@ cubistga.prototype.handleGtag = function (el) {
         let category = el.getAttribute('data-ga-category');
         let label = el.getAttribute('data-ga-label');
         let value = el.getAttribute('data-ga-value');
+        let options = el.getAttribute('data-ga-options');
+        if (options !== null) {
+            try {
+                options = JSON.parse(options);
+            }catch (e) {
+                console.log(options);
+                options={};
+            }
+        }
 
-        return this.event(action, category, label, value, el.getAttribute('data-ga-noninteraction') === 1);
+        return this.event(action, category, label, value, el.getAttribute('data-ga-noninteraction') === 1, options);
     }
 };
 
index e32a55044785b21d90379f83ef99d73bf4a4bc43..144ba2434c65899b2704224b7ae8feeeba84b1f6 100644 (file)
@@ -3,7 +3,10 @@
 
 @if (!empty($address))
 
-    <a class="{{ $class ?? '' }}" href="https://maps.google.fr/?q={{ urlencode(str_replace("\n", " ", $address)) }}" target="_blank" rel="noopener">
+    <a data-ga="event" data-ga-category="contact" data-ga-action="click" data-ga-label="postal_address"
+       class="{{ $class ?? '' }}"
+       href="https://maps.google.fr/?q={{ urlencode(str_replace("\n", " ", $address)) }}" target="_blank"
+       rel="noopener">
         {{ $slot }}
     </a>
 
index a532a51773b43eb1f1ad9a1a377b712c1fdd1c57..63ea8546ae0f2f256051d1097cf072979b330326 100644 (file)
@@ -13,7 +13,8 @@
     @endphp
 
 
-    <a class="{{ $class ?? '' }}" href="tel:{{ $number }}">
+    <a data-ga="event" data-ga-category="contact" data-ga-action="click"
+       data-ga-label="phone" class="{{ $class ?? '' }}" href="tel:{{ $number }}">
         {{ $slot }}
     </a>
 
index 3ac9298553502bb12d311cd71c15ee607bd5ab1e..5cbd3d55d0690700621e7880a2d2f4737b6a66c3 100644 (file)
@@ -19,6 +19,7 @@
                     <div class="bg-grey-100 p-1v">
                         @form([
                         'action' => '/ajax/request_quote',
+                        'ga'=>false,
                         'extra_fields' => '<input type="hidden" name="cart_data" :value="cartData">' // Populated by VueJS
                         ])
                     </div>
index b25298741aafa3a5dedf0675ebb1fa300c51a92c..263c9d2ed2f58fa72d3df28978c593c2f80f269c 100644 (file)
@@ -18,7 +18,9 @@
                         {{-- Social Networks --}}
                         @php($networks = ['twitter' => 'Twitter', 'linkedin' => 'LinkedIn'])
                         @foreach ($networks as $networkID => $network)
-                            <a class="flex items-center mb-4 font-bold text-navy hover:text-blue"
+                            <a data-ga="event" data-ga-category="social" data-ga-action="click"
+                               data-ga-label="{{$networkID}}"
+                               class="flex items-center mb-4 font-bold text-navy hover:text-blue"
                                href="{{ $global->get("social.{$networkID}") }}" target="_blank" rel="noopener">
                                 @svg("icon-{$networkID}", 'mr-3')
                                 {{ __($network) }}
index 8ab38440ef7e8600e32535d154a43c75a55f6b14..b2f063ce7072be2ce85daf76b70b92aa6120a4fc 100644 (file)
@@ -3,18 +3,23 @@
 @section('content')
 
     <content class="pb-3v">
-        <text-block :title="$page->page_heading" />
+        <meta data-ga="event" data-ga-action="view_search_results" data-ga-category="engagment"
+              data-ga-options='{"search_term":"{{request()->get('q')}}"}'>
+        <text-block :title="$page->page_heading"/>
 
         <div class="search-results-layout">
 
             <div class="search-results-main">
 
                 <div class="bg-grey-100 p-1v">
-                    <form action="{{ $nav->getHrefByName('recherche') }}" method="get" class="flex justify-between items-center sm:block">
+                    <form action="{{ $nav->getHrefByName('recherche') }}" method="get"
+                          class="flex justify-between items-center sm:block">
 
-                        <search-field placeholder="{{ __('Saisissez votre recherche') }}"></search-field>
+                        <search-field placeholder="{{ __('Saisissez votre recherche') }}"
+                                      value="{{request()->get('q')}}"></search-field>
 
-                        <button class="btn flex items-center py-3 px-8 font-display text-lg rounded ml-4 sm:mt-4 sm:mx-auto">
+                        <button
+                            class="btn flex items-center py-3 px-8 font-display text-lg rounded ml-4 sm:mt-4 sm:mx-auto">
                             @svg('search', 'fill-current mr-2')
                             {{ __('Rechercher') }}
                         </button>
                             <div class="breadcrumbs sm:text-sm">
                                 @foreach ($result['breadcrumbs'] as $breadcrumb)
                                     <div @if(!$loop->last) class="breadcrumbs-item" @endif>
-                                        <a class="breadcrumbs-link" @if ($breadcrumb->url)href="{{ $breadcrumb->url }}" @endif>
+                                        <a class="breadcrumbs-link"
+                                           @if ($breadcrumb->url)href="{{ $breadcrumb->url }}" @endif>
                                             {{ $breadcrumb->title }}
                                         </a>
                                     </div>
                                 @endforeach
                             </div>
 
-                            <a class="text-2xl sm:text-xl xs:text-lg font-display mt-1 inline-block animated-underline" href="{{ $result['url'] }}">{{ $result['title'] }}</a>
+                            <a class="text-2xl sm:text-xl xs:text-lg font-display mt-1 inline-block animated-underline"
+                               href="{{ $result['url'] }}">{{ $result['title'] }}</a>
                         </div>
                     @endforeach
                 </div>
index 60e34fb6d47e96128fa4519ae668dbfe158303ef..8e0123423be47d84d7da7ece46203f8b4e3d6ef6 100644 (file)
@@ -6,7 +6,8 @@
     </div>
 </map-link>
 
-<a class="contact-details-block" href="mailto:{{ $global->email }}">
+<a data-ga="event" data-ga-category="contact" data-ga-action="click"
+   data-ga-label="email" class="contact-details-block" href="mailto:{{ $global->email }}">
     @svg('icon-email', 'contact-details-icon')
     <div class="contact-details-text">
         <div class="contact-details-title">{{ __('Email') }}</div>
index 3ed44b0cb652f8ebd65245dc921c388cbeb5b7f6..8e680e83a7a7c9f50f8caeac642b9b7b581933e6 100644 (file)
@@ -1,77 +1,85 @@
+@php
+    $gaattrs='data-ga="event" data-ga-action="send" data-ga-category="contact" data-ga-label="form"';
+    if(isset($ga) && !$ga){
+         $gaattrs='';
+    }
+@endphp
 @if ($page->get('form'))
-
     @push('scripts')
         <script src="{{ mix('/js/mailform.js') }}"></script>
     @endpush
 
-<div id="contact-form">
-    <div class="ajax-form flex flex-col max-w-half">
-        @if($page->get('form_intro'))
-            <div class="form-info text-navy">@markdown($page->get('form_intro'))</div>
-        @endif
-        <form class="text-navy mailform" action="{{ $action ?? '/ajax/mailform' }}" method="post"
-              data-confirmation="{{$page->get('form_confirmation')??__('Votre message a bien été envoyé')}}" novalidate>
-            @honeypot
-            <input type="hidden" value="{{$page->get('id')}}" name="page">
+    <div id="contact-form">
+        <div class="ajax-form flex flex-col max-w-half">
+            @if($page->get('form_intro'))
+                <div class="form-info text-navy">@markdown($page->get('form_intro'))</div>
+            @endif
+            <form {!! $gaattrs !!} class="text-navy mailform" action="{{ $action ?? '/ajax/mailform' }}" method="post"
+                  data-confirmation="{{$page->get('form_confirmation')??__('Votre message a bien été envoyé')}}"
+                  novalidate>
+                @honeypot
+                <input type="hidden" value="{{$page->get('id')}}" name="page">
 
-            {!! $extra_fields ?? '' !!}
+                {!! $extra_fields ?? '' !!}
 
-            <div class="fields grid" >
-                @foreach($page->get('form') as $field)
-                    @php
-                        $required=$field['mandatory']?' required':'';
-                        $asx=$field['mandatory']?' *':'';
-                    @endphp
-                    <label class="form-input">
-                        @switch($field['type'])
-                            @case('name')
-                            {{__('Nom')}}{{$asx}} <input class="py-3 mt-3" type="text" {!! $required !!}  name="name">
-                            @break
+                <div class="fields grid">
+                    @foreach($page->get('form') as $field)
+                        @php
+                            $required=$field['mandatory']?' required':'';
+                            $asx=$field['mandatory']?' *':'';
+                        @endphp
+                        <label class="form-input">
+                            @switch($field['type'])
+                                @case('name')
+                                {{__('Nom')}}{{$asx}} <input class="py-3 mt-3" type="text"
+                                                             {!! $required !!}  name="name">
+                                @break
 
-                            @case('firstname')
-                            {{__('Prénom')}}{{$asx}} <input class="py-3 mt-3" type="text"
-                                                            {!! $required !!}  name="firstname">
-                            @break
+                                @case('firstname')
+                                {{__('Prénom')}}{{$asx}} <input class="py-3 mt-3" type="text"
+                                                                {!! $required !!}  name="firstname">
+                                @break
 
-                            @case('company')
-                            {{__('Société')}}{{$asx}} <input class="py-3 mt-3" type="text"
-                                                             {!! $required !!}  name="company">
-                            @break
+                                @case('company')
+                                {{__('Société')}}{{$asx}} <input class="py-3 mt-3" type="text"
+                                                                 {!! $required !!}  name="company">
+                                @break
 
-                            @case('email')
-                            {{__('E-mail')}}{{$asx}} <input class="py-3 mt-3" type="email"
-                                                            {!! $required !!}  name="email">
-                            @break
+                                @case('email')
+                                {{__('E-mail')}}{{$asx}} <input class="py-3 mt-3" type="email"
+                                                                {!! $required !!}  name="email">
+                                @break
 
-                            @case('ref')
-                            {{__('Référence')}}{{$asx}} <input class="py-3 mt-3" type="text"
-                                                               {!! $required !!}  name="ref">
-                            @break
+                                @case('ref')
+                                {{__('Référence')}}{{$asx}} <input class="py-3 mt-3" type="text"
+                                                                   {!! $required !!}  name="ref">
+                                @break
 
-                            @case('sku')
-                            {{__('Numéro de série')}}{{$asx}} <input class="py-3 mt-3" type="text"
-                                                                     {!! $required !!}  name="sku">
-                            @break
+                                @case('sku')
+                                {{__('Numéro de série')}}{{$asx}} <input class="py-3 mt-3" type="text"
+                                                                         {!! $required !!}  name="sku">
+                                @break
 
-                            @case('subject')
-                            {{__('Sujet')}}{{$asx}} <input class="py-3 mt-3" type="text"
-                                                           {!! $required !!}  name="subject">
-                            @break
+                                @case('subject')
+                                {{__('Sujet')}}{{$asx}} <input class="py-3 mt-3" type="text"
+                                                               {!! $required !!}  name="subject">
+                                @break
 
-                            @case('message')
-                            {{__('Message')}}{{$asx}} <textarea class="py-3 textarea mt-3" type="text"
-                                                                {!! $required !!}  name="message"></textarea>
-                            @break
-                        @endswitch
-                    </label>
-                @endforeach
-            </div>
+                                @case('message')
+                                {{__('Message')}}{{$asx}} <textarea class="py-3 textarea mt-3" type="text"
+                                                                    {!! $required !!}  name="message"></textarea>
+                                @break
+                            @endswitch
+                        </label>
+                    @endforeach
+                </div>
 
                 <div class="form-endmessage my-6 text-grey-dark text-sm">
                     @markdown($global->get('form_privacy'))
                 </div>
                 <div class="form-footer flex justify-between items-center xs:flex-col-reverse">
-                    <span class="form-required-legend text-grey-dark xs:self-start xs:mt-5">*{{__('Champs obligatoires')}}</span>
+                    <span
+                        class="form-required-legend text-grey-dark xs:self-start xs:mt-5">*{{__('Champs obligatoires')}}</span>
                     <button type="submit" class="form-submit-button btn btn-custom xs:w-full"
                             data-sending="{{__('Envoi en cours')}}">{{ $page->get('form_button_text', __('Envoyer')) }}</button>
                 </div>