Skip to content

Commit 34e7417

Browse files
FFWEB-2651: Fix tracking for add to cart event
1 parent 83cdc99 commit 34e7417

7 files changed

Lines changed: 96 additions & 38 deletions

File tree

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
11
# Changelog
2+
## Unreleased
3+
### Fix
4+
- Fix add to cart tracking for configurable products
5+
### Change
6+
- Replace getRecords event with object served from backend
7+
28
## [v4.3.6] - 2022.01.16
39
### Add
410
- Add option to switch between Api Version

composer.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
"php": ">=7.2",
1515
"ext-ftp": "*",
1616
"ext-json": "*",
17-
"omikron/factfinder-communication-sdk": "^0.9.5",
17+
"omikron/factfinder-communication-sdk": "^0.9.6",
1818
"league/flysystem-sftp": "^2.2",
1919
"league/flysystem-ftp": "^2.3",
2020
"monolog/monolog": "^1.23"

src/metadata.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,11 @@
8080
'block' => 'details_relatedproducts_crossselling',
8181
'file' => 'views/frontend/blocks/campaign/product.tpl',
8282
],
83+
[
84+
'template' => 'page/details/inc/productmain.tpl',
85+
'block' => 'details_productmain_social',
86+
'file' => 'views/frontend/blocks/page/details/inc/productmain.tpl',
87+
],
8388
[
8489
'template' => 'page/list/list.tpl',
8590
'block' => 'page_list_listbody',

src/out/js/tracking.js

Lines changed: 22 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,31 @@
1-
function registerAddToCartListener(selector, productId) {
2-
let trackingSent = false;
3-
const trackingHelper = factfinder.communication.Util.trackingHelper;
4-
5-
function trackAddToCart(product) {
6-
factfinder.communication.Tracking.cart({
7-
id: trackingHelper.getTrackingProductId(product),
8-
masterId: trackingHelper.getMasterArticleNumber(product),
9-
price: trackingHelper.getPrice(product),
10-
title: trackingHelper.getTitle(product),
11-
count: 1,
1+
function registerAddToCartListener(selector, productData) {
2+
if (typeof factfinder === 'undefined') {
3+
document.addEventListener('ffCommunicationReady', function () {
4+
init(selector, productData);
125
});
6+
} else {
7+
init(selector, productData);
138
}
149

15-
const element = document.querySelector(selector);
10+
function init(selector, productData) {
11+
const trackingHelper = factfinder.communication.Util.trackingHelper;
1612

17-
if (element) {
18-
element.addEventListener('submit', function (e) {
19-
if (trackingSent === false) {
20-
e.preventDefault();
21-
}
13+
function trackAddToCart(product) {
14+
factfinder.communication.Tracking.cart({
15+
id: trackingHelper.getTrackingProductId(product),
16+
masterId: trackingHelper.getMasterArticleNumber(product),
17+
price: trackingHelper.getPrice(product),
18+
title: trackingHelper.getTitle(product),
19+
count: 1,
20+
});
21+
}
2222

23-
factfinder.communication.EventAggregator.addFFEvent({
24-
type: 'getRecords',
25-
recordId: productId,
26-
idType: 'productNumber',
27-
success: function (response) {
28-
if (response && response[0]) {
29-
const product = response[0];
30-
trackAddToCart(product);
31-
}
23+
const element = document.querySelector(selector);
3224

33-
if (trackingSent === false) {
34-
trackingSent = true;
35-
e.target.submit();
36-
}
37-
},
25+
if (element) {
26+
element.addEventListener('submit', function (e) {
27+
trackAddToCart(productData);
3828
});
39-
});
29+
}
4030
}
4131
}

src/views/frontend/blocks/campaign/product.tpl

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,3 @@
1818
[{if $oConfig->getConfigParam("ffSimilarProducts")}]
1919
[{include file="ff/similar.tpl" recordId=$recordId}]
2020
[{/if}]
21-
<script>
22-
document.addEventListener('ffCommunicationReady', function () {
23-
registerAddToCartListener('.js-oxProductForm',"[{$recordId}]");
24-
});
25-
</script>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
[{$smarty.block.parent}]
2+
[{assign var="recordDataJson" value=$oView->getProduct()|record_data_json}]
3+
4+
<script>
5+
registerAddToCartListener(
6+
'.js-oxProductForm',
7+
JSON.parse('[{ $recordDataJson }]')
8+
);
9+
</script>
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
use Omikron\FactFinder\Communication\Client\ClientBuilder;
6+
use Omikron\FactFinder\Communication\Credentials;
7+
use Omikron\FactFinder\Communication\Resource\AdapterFactory;
8+
use OxidEsales\Eshop\Core\Config;
9+
use OxidEsales\Eshop\Core\Model\BaseModel;
10+
use OxidEsales\Eshop\Core\Registry;
11+
12+
function smarty_modifier_record_data_json(BaseModel $article): string
13+
{
14+
/** @var Config $config */
15+
$config = Registry::getConfig();
16+
$recordId = (string) $article->getFieldData('oxartnum');
17+
$credentials = new Credentials(
18+
$config->getConfigParam('ffUsername'),
19+
$config->getConfigParam('ffPassword'),
20+
$config->getConfigParam('ffAuthPrefix'),
21+
$config->getConfigParam('ffAuthPostfix')
22+
);
23+
$clientBuilder = oxNew(ClientBuilder::class)
24+
->withServerUrl($config->getConfigParam('ffServerUrl'))
25+
->withCredentials($credentials)
26+
->withVersion($config->getConfigParam('ffApiVersion'));
27+
$adapterFactory = new AdapterFactory(
28+
$clientBuilder,
29+
$config->getConfigParam('ffVersion'),
30+
$config->getConfigParam('ffApiVersion')
31+
);
32+
$searchAdapter = $adapterFactory->getSearchAdapter();
33+
$response = $searchAdapter->records(
34+
$config->getConfigParam('ffChannel')[Registry::getLang()->getLanguageAbbr()],
35+
'',
36+
[
37+
'idType' => 'productNumber',
38+
'productNumber' => $recordId,
39+
'format' => 'json'
40+
]
41+
);
42+
43+
$record = $response['records'][0] ?? [];
44+
45+
if ($record === []) {
46+
return json_encode([]);
47+
}
48+
49+
return json_encode([
50+
'id' => $recordId,
51+
'record' => $record,
52+
]);
53+
}

0 commit comments

Comments
 (0)