Implement passing of tracking codes across domains
This commit is contained in:
@@ -350,6 +350,7 @@ $GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['cms/layout/class.tx_cms_layout.php'][
|
||||
|
||||
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'gclid';
|
||||
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'ref';
|
||||
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'pa';
|
||||
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'tx_epproducts_searchresult[searchParams]';
|
||||
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'tx_epproducts_searchresult[filterSettings]';
|
||||
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'tx_epproducts_product_detail[filterSettings]';
|
||||
|
||||
@@ -27,7 +27,10 @@ namespace EP\EpTheme\DataProcessing;
|
||||
* This copyright notice MUST APPEAR in all copies of the script!
|
||||
***************************************************************/
|
||||
|
||||
use EP\EpProducts\Service\ResellerDataService;
|
||||
use EP\EpProducts\Traits\DbConnectionTrait;
|
||||
use TYPO3\CMS\Core\Utility\GeneralUtility;
|
||||
use TYPO3\CMS\Extbase\Object\ObjectManager;
|
||||
use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
|
||||
use TYPO3\CMS\Frontend\ContentObject\DataProcessorInterface;
|
||||
|
||||
@@ -59,9 +62,69 @@ class ContextProcessor implements DataProcessorInterface
|
||||
if ($regionUid > 0) {
|
||||
$processedData['context']['region'] = $this->getContextRecord($regionUid, 'tx_epproducts_domain_model_region');
|
||||
}
|
||||
$resellerData = $this->getResellerData();
|
||||
if ($resellerData) {
|
||||
$processedData['context']['paCode'] = $resellerData['paCode'];
|
||||
} elseif ($paCode = $this->getPaCodeFromRequest()) {
|
||||
$processedData['context']['paCode'] = $paCode;
|
||||
} elseif ($cookieData = $this->getCookieData()) {
|
||||
$processedData['context']['paCode'] = $cookieData;
|
||||
}
|
||||
|
||||
return $processedData;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array|bool
|
||||
* @throws \Doctrine\DBAL\DBALException
|
||||
*/
|
||||
private function getResellerData()
|
||||
{
|
||||
/** @var \TYPO3\CMS\Extbase\Object\ObjectManager $objectManager */
|
||||
$objectManager = GeneralUtility::makeInstance(ObjectManager::class);
|
||||
/** @var ResellerDataService $resellerService */
|
||||
$resellerService = $objectManager->get(ResellerDataService::class);
|
||||
return $resellerService->getResellerForCurrentDomain();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
private function getPaCodeFromRequest()
|
||||
{
|
||||
$currentUri = GeneralUtility::getIndpEnv('REQUEST_URI');
|
||||
$query = parse_url($currentUri, \PHP_URL_QUERY);
|
||||
|
||||
if (!$query) {
|
||||
return '';
|
||||
}
|
||||
|
||||
parse_str($query, $items);
|
||||
|
||||
if (array_key_exists('pa', $items)) {
|
||||
$paCode = $items['pa'];
|
||||
$expiratonDate = new \DateTime('now');
|
||||
$expiratonDate->add(new \DateInterval('P' . '30D'));
|
||||
setcookie('ep_trk', $paCode, $expiratonDate->getTimestamp(), '/');
|
||||
|
||||
return $paCode;
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
private function getCookieData()
|
||||
{
|
||||
if ($_COOKIE['ep_trk']) {
|
||||
return $_COOKIE['ep_trk'];
|
||||
}
|
||||
|
||||
return '';
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $uid
|
||||
* @param string $table
|
||||
|
||||
@@ -69,6 +69,7 @@ new Vue({
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
config: {},
|
||||
maxWindowWidth: 991,
|
||||
lastScrollPosition: 0,
|
||||
scrollTopVisible: false,
|
||||
@@ -86,6 +87,10 @@ new Vue({
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
parseConfig () {
|
||||
const configElement = document.getElementById('appconfig');
|
||||
this.config = JSON.parse(configElement.innerHTML);
|
||||
},
|
||||
setMobileMode () {
|
||||
this.mobileMode = $window.outerWidth() < this.maxWindowWidth;
|
||||
},
|
||||
@@ -343,9 +348,31 @@ new Vue({
|
||||
.on('affixed-top.bs.affix', () => {
|
||||
this.searchbarFixed = false;
|
||||
});
|
||||
},
|
||||
appendPaCode () {
|
||||
const paCode = this.config.paCode;
|
||||
if (!paCode) {
|
||||
return;
|
||||
}
|
||||
$('a').each(function () {
|
||||
if (this.hostname === location.hostname) {
|
||||
return;
|
||||
}
|
||||
let url = $(this).attr('href');
|
||||
if (!url) {
|
||||
return;
|
||||
}
|
||||
if (url.indexOf('pa=') !== -1) {
|
||||
return;
|
||||
}
|
||||
const separator = url.indexOf('?') === -1 ? '?' : '&';
|
||||
url += separator + 'pa=' + paCode;
|
||||
$(this).attr('href', url);
|
||||
});
|
||||
}
|
||||
},
|
||||
created () {
|
||||
this.parseConfig();
|
||||
EventBus.$on('ajaxContentLoaded', () => {
|
||||
Vue.nextTick(() => {
|
||||
this.initContentsliders();
|
||||
@@ -398,6 +425,7 @@ new Vue({
|
||||
this.initDropdownMenuBehavior();
|
||||
this.initPartnerIdSelect();
|
||||
this.initFaqFilter();
|
||||
this.appendPaCode();
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
@@ -19,4 +19,5 @@
|
||||
<f:render partial="ContactBar" arguments="{_all}"/>
|
||||
</div>
|
||||
<f:render partial="ConversionTracking" />
|
||||
<f:render partial="Config" arguments="{_all}" />
|
||||
</html>
|
||||
|
||||
@@ -19,5 +19,5 @@
|
||||
<f:render partial="ContactBar" arguments="{_all}"/>
|
||||
</div>
|
||||
<f:render partial="ConversionTracking" />
|
||||
<f:render partial="Config" />
|
||||
<f:render partial="Config" arguments="{_all}" />
|
||||
</html>
|
||||
|
||||
@@ -15,5 +15,5 @@
|
||||
<f:render partial="ContactBar" arguments="{_all}"/>
|
||||
</div>
|
||||
<f:render partial="ConversionTracking" />
|
||||
<f:render partial="Config" />
|
||||
<f:render partial="Config" arguments="{_all}" />
|
||||
</html>
|
||||
|
||||
@@ -13,5 +13,5 @@
|
||||
<f:render partial="ContactBar" arguments="{_all}"/>
|
||||
</div>
|
||||
<f:render partial="ConversionTracking" />
|
||||
<f:render partial="Config" />
|
||||
<f:render partial="Config" arguments="{_all}" />
|
||||
</html>
|
||||
|
||||
@@ -21,5 +21,5 @@
|
||||
<f:render partial="ContactBar" arguments="{_all}"/>
|
||||
</div>
|
||||
<f:render partial="ConversionTracking" />
|
||||
<f:render partial="Config" />
|
||||
<f:render partial="Config" arguments="{_all}" />
|
||||
</html>
|
||||
|
||||
@@ -34,5 +34,5 @@
|
||||
<f:render partial="ContactBar" arguments="{_all}"/>
|
||||
</div>
|
||||
<f:render partial="ConversionTracking" />
|
||||
<f:render partial="Config" />
|
||||
<f:render partial="Config" arguments="{_all}" />
|
||||
</html>
|
||||
|
||||
+1
-1
@@ -26,5 +26,5 @@
|
||||
<f:render partial="ContactBar" arguments="{_all}"/>
|
||||
</div>
|
||||
<f:render partial="ConversionTracking" />
|
||||
<f:render partial="Config" />
|
||||
<f:render partial="Config" arguments="{_all}" />
|
||||
</html>
|
||||
|
||||
@@ -36,5 +36,5 @@
|
||||
<f:render partial="ContactBar" arguments="{_all}"/>
|
||||
</div>
|
||||
<f:render partial="ConversionTracking" />
|
||||
<f:render partial="Config" />
|
||||
<f:render partial="Config" arguments="{_all}" />
|
||||
</html>
|
||||
|
||||
+1
-1
@@ -26,5 +26,5 @@
|
||||
<f:render partial="ContactBar" arguments="{_all}"/>
|
||||
</div>
|
||||
<f:render partial="ConversionTracking" />
|
||||
<f:render partial="Config" />
|
||||
<f:render partial="Config" arguments="{_all}" />
|
||||
</html>
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<script type="application/json" id="appconfig">
|
||||
{
|
||||
"loaderUrl": "<f:format.raw>{f:uri.image(src: 'EXT:ep_theme/Resources/Public/images/ajax-loader-white.gif', absolute: 1)}</f:format.raw>",
|
||||
"myEpApiBaseUrl": "<f:format.raw>{settings.myEpApiBaseUrl}</f:format.raw>"
|
||||
"myEpApiBaseUrl": "<f:format.raw>{settings.myEpApiBaseUrl}</f:format.raw>",
|
||||
"paCode": <f:if condition='{context.paCode}'><f:then>"{context.paCode}"</f:then><f:else>null</f:else></f:if>
|
||||
}
|
||||
</script>
|
||||
|
||||
@@ -10,7 +10,9 @@
|
||||
<v:menu levels="1" useShortcutUid="1" pageUid="{settings.topNavPid}">
|
||||
<f:for each="{menu}" as="menuitem">
|
||||
<li class="area-nav__list-item">
|
||||
<a class="area-nav__link{f:if(condition: menuitem.active, then: ' active')}{f:if(condition: '{menuitem.uid} == {settings.forceActiveTopnavUid}', then: ' active')}" href="{menuitem.link}"{f:if(condition: '{menuitem.doktype} == 3', then: ' target="_blank"')} title="{menuitem.linktext}">{menuitem.title -> ep:topnavItem()}</a>
|
||||
<a class="area-nav__link{f:if(condition: menuitem.active, then: ' active')}{f:if(condition: '{menuitem.uid} == {settings.forceActiveTopnavUid}', then: ' active')}"
|
||||
href="{menuitem.link}"{f:if(condition: '{menuitem.doktype} == 3', then: ' target="_blank"')}
|
||||
title="{menuitem.linktext}">{menuitem.title -> ep:topnavItem()}</a>
|
||||
</li>
|
||||
</f:for>
|
||||
</v:menu>
|
||||
|
||||
Reference in New Issue
Block a user