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'][] = 'gclid';
|
||||||
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'ref';
|
$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[searchParams]';
|
||||||
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'tx_epproducts_searchresult[filterSettings]';
|
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'tx_epproducts_searchresult[filterSettings]';
|
||||||
$GLOBALS['TYPO3_CONF_VARS']['FE']['cacheHash']['excludedParameters'][] = 'tx_epproducts_product_detail[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!
|
* This copyright notice MUST APPEAR in all copies of the script!
|
||||||
***************************************************************/
|
***************************************************************/
|
||||||
|
|
||||||
|
use EP\EpProducts\Service\ResellerDataService;
|
||||||
use EP\EpProducts\Traits\DbConnectionTrait;
|
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\ContentObjectRenderer;
|
||||||
use TYPO3\CMS\Frontend\ContentObject\DataProcessorInterface;
|
use TYPO3\CMS\Frontend\ContentObject\DataProcessorInterface;
|
||||||
|
|
||||||
@@ -59,9 +62,69 @@ class ContextProcessor implements DataProcessorInterface
|
|||||||
if ($regionUid > 0) {
|
if ($regionUid > 0) {
|
||||||
$processedData['context']['region'] = $this->getContextRecord($regionUid, 'tx_epproducts_domain_model_region');
|
$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 $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 int $uid
|
||||||
* @param string $table
|
* @param string $table
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ new Vue({
|
|||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
|
config: {},
|
||||||
maxWindowWidth: 991,
|
maxWindowWidth: 991,
|
||||||
lastScrollPosition: 0,
|
lastScrollPosition: 0,
|
||||||
scrollTopVisible: false,
|
scrollTopVisible: false,
|
||||||
@@ -86,6 +87,10 @@ new Vue({
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
|
parseConfig () {
|
||||||
|
const configElement = document.getElementById('appconfig');
|
||||||
|
this.config = JSON.parse(configElement.innerHTML);
|
||||||
|
},
|
||||||
setMobileMode () {
|
setMobileMode () {
|
||||||
this.mobileMode = $window.outerWidth() < this.maxWindowWidth;
|
this.mobileMode = $window.outerWidth() < this.maxWindowWidth;
|
||||||
},
|
},
|
||||||
@@ -343,9 +348,31 @@ new Vue({
|
|||||||
.on('affixed-top.bs.affix', () => {
|
.on('affixed-top.bs.affix', () => {
|
||||||
this.searchbarFixed = false;
|
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 () {
|
created () {
|
||||||
|
this.parseConfig();
|
||||||
EventBus.$on('ajaxContentLoaded', () => {
|
EventBus.$on('ajaxContentLoaded', () => {
|
||||||
Vue.nextTick(() => {
|
Vue.nextTick(() => {
|
||||||
this.initContentsliders();
|
this.initContentsliders();
|
||||||
@@ -398,6 +425,7 @@ new Vue({
|
|||||||
this.initDropdownMenuBehavior();
|
this.initDropdownMenuBehavior();
|
||||||
this.initPartnerIdSelect();
|
this.initPartnerIdSelect();
|
||||||
this.initFaqFilter();
|
this.initFaqFilter();
|
||||||
|
this.appendPaCode();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -19,4 +19,5 @@
|
|||||||
<f:render partial="ContactBar" arguments="{_all}"/>
|
<f:render partial="ContactBar" arguments="{_all}"/>
|
||||||
</div>
|
</div>
|
||||||
<f:render partial="ConversionTracking" />
|
<f:render partial="ConversionTracking" />
|
||||||
|
<f:render partial="Config" arguments="{_all}" />
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -19,5 +19,5 @@
|
|||||||
<f:render partial="ContactBar" arguments="{_all}"/>
|
<f:render partial="ContactBar" arguments="{_all}"/>
|
||||||
</div>
|
</div>
|
||||||
<f:render partial="ConversionTracking" />
|
<f:render partial="ConversionTracking" />
|
||||||
<f:render partial="Config" />
|
<f:render partial="Config" arguments="{_all}" />
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -15,5 +15,5 @@
|
|||||||
<f:render partial="ContactBar" arguments="{_all}"/>
|
<f:render partial="ContactBar" arguments="{_all}"/>
|
||||||
</div>
|
</div>
|
||||||
<f:render partial="ConversionTracking" />
|
<f:render partial="ConversionTracking" />
|
||||||
<f:render partial="Config" />
|
<f:render partial="Config" arguments="{_all}" />
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -13,5 +13,5 @@
|
|||||||
<f:render partial="ContactBar" arguments="{_all}"/>
|
<f:render partial="ContactBar" arguments="{_all}"/>
|
||||||
</div>
|
</div>
|
||||||
<f:render partial="ConversionTracking" />
|
<f:render partial="ConversionTracking" />
|
||||||
<f:render partial="Config" />
|
<f:render partial="Config" arguments="{_all}" />
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -21,5 +21,5 @@
|
|||||||
<f:render partial="ContactBar" arguments="{_all}"/>
|
<f:render partial="ContactBar" arguments="{_all}"/>
|
||||||
</div>
|
</div>
|
||||||
<f:render partial="ConversionTracking" />
|
<f:render partial="ConversionTracking" />
|
||||||
<f:render partial="Config" />
|
<f:render partial="Config" arguments="{_all}" />
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -34,5 +34,5 @@
|
|||||||
<f:render partial="ContactBar" arguments="{_all}"/>
|
<f:render partial="ContactBar" arguments="{_all}"/>
|
||||||
</div>
|
</div>
|
||||||
<f:render partial="ConversionTracking" />
|
<f:render partial="ConversionTracking" />
|
||||||
<f:render partial="Config" />
|
<f:render partial="Config" arguments="{_all}" />
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+1
-1
@@ -26,5 +26,5 @@
|
|||||||
<f:render partial="ContactBar" arguments="{_all}"/>
|
<f:render partial="ContactBar" arguments="{_all}"/>
|
||||||
</div>
|
</div>
|
||||||
<f:render partial="ConversionTracking" />
|
<f:render partial="ConversionTracking" />
|
||||||
<f:render partial="Config" />
|
<f:render partial="Config" arguments="{_all}" />
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -36,5 +36,5 @@
|
|||||||
<f:render partial="ContactBar" arguments="{_all}"/>
|
<f:render partial="ContactBar" arguments="{_all}"/>
|
||||||
</div>
|
</div>
|
||||||
<f:render partial="ConversionTracking" />
|
<f:render partial="ConversionTracking" />
|
||||||
<f:render partial="Config" />
|
<f:render partial="Config" arguments="{_all}" />
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
+1
-1
@@ -26,5 +26,5 @@
|
|||||||
<f:render partial="ContactBar" arguments="{_all}"/>
|
<f:render partial="ContactBar" arguments="{_all}"/>
|
||||||
</div>
|
</div>
|
||||||
<f:render partial="ConversionTracking" />
|
<f:render partial="ConversionTracking" />
|
||||||
<f:render partial="Config" />
|
<f:render partial="Config" arguments="{_all}" />
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<script type="application/json" id="appconfig">
|
<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>",
|
"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>
|
</script>
|
||||||
|
|||||||
@@ -10,7 +10,9 @@
|
|||||||
<v:menu levels="1" useShortcutUid="1" pageUid="{settings.topNavPid}">
|
<v:menu levels="1" useShortcutUid="1" pageUid="{settings.topNavPid}">
|
||||||
<f:for each="{menu}" as="menuitem">
|
<f:for each="{menu}" as="menuitem">
|
||||||
<li class="area-nav__list-item">
|
<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>
|
</li>
|
||||||
</f:for>
|
</f:for>
|
||||||
</v:menu>
|
</v:menu>
|
||||||
|
|||||||
Reference in New Issue
Block a user