Ontdek de code van Sander
001<?php002 003public function get(004 ServerRequestInterface $request005): ResponseInterface {006 $queryParams = $request->getQueryParams();007 $urlParams = $this->determineAnalyticsParameters($queryParams);008 009 if (isset($queryParams['p'])) {010 $urlParams['productId'] = $queryParams['p'];011 return $this->createProductRedirect($urlParams);012 }013 014 return $this->responseFactory->emptyBody(StatusCodeInterface::STATUS_NOT_FOUND);015}016 017 018private function determineAnalyticsParameters(array $queryParams): array019{020 $campaign = [021 'object' => 'product_card',022 ];023 024 if (isset($queryParams['p'])) {025 $campaign['product_id'] = $queryParams['p'];026 }027 028 if (isset($queryParams['l'])) {029 $locationData = explode('.', $queryParams['l']);030 $campaign['store_id'] = $locationData[0];031 if (isset($locationData[1])) {032 $campaign['display_id'] = $locationData[1];033 $campaign['object'] = 'poster';034 }035 }036 037 if (isset($queryParams['s'])) {038 $campaign['slug'] = $queryParams['s'];039 }040 041 $campaignString = '';042 foreach ($campaign as $key => $value) {043 $campaignString .= "[$key:$value]";044 }045 046 return [047 'utm_source' => 'coolblue',048 'utm_medium' => 'qr_stores',049 'utm_campaign' => $campaignString050 ];051}
Winkelmodus
Dit is echte code uit de Coolblue App. Scroll er gerust doorheen.
Productkaartjes
Marketing wil weten wat voor QR-code er gescand wordt. De meeste codes zijn productkaartjes. Deze zijn ook het kleinst. We gaan er standaard van uit dat het om een product_card gaat. Dus hoeven we die info niet meer mee te geven. Wel zo handig.
Product ID
De product_id krijgen we in een parameter ‘p’ binnen. Scheelt ook weer.
Locatie-parameter
De locatie-parameter ‘l’ kan een sub-locatie bevatten. Als dat zo is, scheiden we deze met een puntje. Punt.
Sublocatie
Als er een sublocatie is, gaan we ervan uit dat het geen product_card is, maar een poster voor een specifieke productwereld.
Key-value paren
De campaign-string heeft uiteindelijk meerdere key-value paren, zodat deze paren in BigQuery weer uit elkaar geplozen kunnen worden.
Meer code
Nog een bitje