diff --git a/Application/views/ga4/remove_from_cart.tpl b/Application/views/ga4/remove_from_cart.tpl new file mode 100644 index 0000000..8c41746 --- /dev/null +++ b/Application/views/ga4/remove_from_cart.tpl @@ -0,0 +1,48 @@ +[{$smarty.block.parent}] + +[{block name="d3_ga4_remove_from_cart_block"}] + [{if $hasBeenReloaded}] + [{assign var="d3BasketPrice" value=$oxcmp_basket->getPrice()}] + [{capture assign=d3_ga4_remove_from_cart}] + [{strip}] + dataLayer.push({"event": null, "eventLabel": null, "ecommerce": null}); /* Clear the previous ecommerce object. */ + dataLayer.push({ + 'isRemoveFromCart': true, + 'event': 'remove_from_cart', + 'eventLabel':'remove_from_cart', + 'ecommerce': { + 'actionField': "step: 1", + 'currency': "[{$currency->name}]", + 'value': [{$d3BasketPrice->getPrice()}], + 'coupon': '[{foreach from=$oxcmp_basket->getVouchers() item=sVoucher key=key name=Voucher}][{$sVoucher->sVoucherNr}][{if !$smarty.foreach.Voucher.last}], [{/if}][{/foreach}]', + 'items': [ + [{foreach from=$toRemoveArticles->getArray() name=gtmRemovedItems item=rmItem key=rmItemindex}] + [{assign var="d3oItemPrice" value=$rmItem->getPrice()}] + [{assign var="gtmBasketItemCategory" value=$rmItem->getCategory()}] + { + 'item_id': '[{$rmItem->getFieldData('oxartnum')}]', + 'item_name': '[{$rmItem->getFieldData('oxtitle')}]', + 'item_variant': '[{$rmItem->getFieldData('oxvarselect')}]', + [{if $gtmBasketItemCategory}] + 'item_category': '[{$gtmBasketItemCategory->getSplitCategoryArray(0)}]', + 'item_category_2': '[{$gtmBasketItemCategory->getSplitCategoryArray(1)}]', + 'item_category_3': '[{$gtmBasketItemCategory->getSplitCategoryArray(2)}]', + 'item_category_4': '[{$gtmBasketItemCategory->getSplitCategoryArray(3)}]', + 'item_list_name': '[{$gtmBasketItemCategory->getSplitCategoryArray()}]', + [{/if}] + 'price': [{$d3oItemPrice->getPrice()}], + 'coupon': '[{foreach from=$oxcmp_basket->getVouchers() item=sVoucher key=key name=Voucher}][{$sVoucher->sVoucherNr}][{if !$smarty.foreach.Voucher.last}], [{/if}][{/foreach}]', + 'quantity': '[{$rmItem->getFieldData('d3AmountThatGotRemoved')}]', + 'position': [{$smarty.foreach.gtmRemovedItems.index}] + }[{if !$smarty.foreach.gtmRemovedItems.last}],[{/if}] + [{/foreach}] + ] + }[{if $oViewConf->isDebugModeOn()}], + 'debug_mode': 'true' + [{/if}] + }); + [{/strip}] + [{/capture}] + [{oxscript add=$d3_ga4_remove_from_cart}] + [{/if}] +[{/block}] \ No newline at end of file diff --git a/IntelliSenseHelper.php b/IntelliSenseHelper.php index 2291ade..f8ac44a 100644 --- a/IntelliSenseHelper.php +++ b/IntelliSenseHelper.php @@ -20,4 +20,8 @@ namespace D3\GoogleAnalytics4\Modules\Core{ namespace D3\GoogleAnalytics4\Modules\Application\Model{ class Category_parent extends \OxidEsales\Eshop\Application\Model\Category {} class Basket_parent extends \OxidEsales\Eshop\Application\Model\Basket {} +} + +namespace D3\GoogleAnalytics4\Modules\Application\Controller{ + class BasketController_parent extends \OxidEsales\Eshop\Application\Controller\BasketController {} } \ No newline at end of file diff --git a/Modules/Application/Controller/BasketController.php b/Modules/Application/Controller/BasketController.php new file mode 100644 index 0000000..511f151 --- /dev/null +++ b/Modules/Application/Controller/BasketController.php @@ -0,0 +1,103 @@ +d3GA4getRemovedArticlesListObject(); + + return $return; + } + + /** + * @return void + * @throws oxSystemComponentException + */ + public function d3GA4getRemovedArticlesListObject() :void + { + $this->addTplParam('hasBeenReloaded', false); + // collecting items to add + $aProducts = Registry::getRequest()->getRequestEscapedParameter('aproducts'); + + // collecting specified item + $sProductId = $sProductId ?? Registry::getRequest()->getRequestEscapedParameter('aid'); + if ($sProductId) { + // additionally fetching current product info + $dAmount = $dAmount ?? Registry::getRequest()->getRequestEscapedParameter('am'); + + // select lists + $aSel = $aSel ?? Registry::getRequest()->getRequestEscapedParameter('sel'); + + // persistent parameters + if (empty($aPersParam)) { + + /** @var BasketComponent $oBasketComponent */ + $oBasketComponent = $this->getComponent('oxcmp_basket'); + + $aPersParam = $oBasketComponent->__call('getPersistedParameters', []); + } + + $sBasketItemId = Registry::getRequest()->getRequestEscapedParameter('bindex'); + + $aProducts[$sProductId] = ['am' => $dAmount, + 'sel' => $aSel, + 'persparam' => $aPersParam, + 'basketitemid' => $sBasketItemId + ]; + } + + if (is_array($aProducts) && count($aProducts)) { + $toRemoveArticleIdList = []; + $artIdOnArtAmountList = []; + + if (Registry::getRequest()->getRequestEscapedParameter('removeBtn') !== null + or Registry::getRequest()->getRequestParameter('updateBtn') !== null) { + + //setting amount to 0 if removing article from basket + foreach ($aProducts as $sProductId => $aProduct) { + if ((isset($aProduct['remove']) && $aProduct['remove']) or intval($aProduct['am']) === 0) { + if (!in_array($aProduct, $toRemoveArticleIdList)) { + $toRemoveArticleIdList[] = $aProduct['aid']; + $artIdOnArtAmountList[$aProduct['aid']] = $aProduct['am']; + } + + $aProducts[$sProductId]['am'] = 0; + #for GA4 Event + $this->addTplParam('hasBeenReloaded', true); + } else { + unset($aProducts[$sProductId]); + } + } + } + + $oArtList = oxNew(ArticleList::class); + $oArtList->loadIds($toRemoveArticleIdList); + + #dumpVar($this->getBasketArticles()); + + /** @var Article $item */ + foreach ($oArtList->getArray() as $item){ + foreach ($artIdOnArtAmountList as $artId => $artAmount){ + if ($item->getId() === $artId){ + $item->assign(['d3AmountThatGotRemoved' => $artAmount]); + } + } + } + + $this->addTplParam('toRemoveArticles', $oArtList); + } + } +} \ No newline at end of file diff --git a/metadata.php b/metadata.php index e080aab..cd5fd93 100755 --- a/metadata.php +++ b/metadata.php @@ -1,8 +1,10 @@ Github-Link ", 'thumbnail' => 'thumbnail.png', - 'version' => '1.10.0', + 'version' => '1.11.0', 'author' => 'Data Development (Inh.: Thomas Dartsch)', 'email' => 'support@shopmodule.com', 'url' => 'https://www.oxidmodule.com/', 'extend' => [ OEViewConfig::class => ViewConfig::class, OECategory::class => Category::class, - OEBasket::class => Basket::class + OEBasket::class => Basket::class, + OEBasketController::class => BasketController::class ], 'templates' => [], 'blocks' => [ @@ -85,6 +88,13 @@ $aModule = [ 'block' => 'details_productmain_tobasket', 'file' => '/Application/views/ga4/add_to_cart.tpl', 'position' => 150 + ], + // remove_from_cart + [ + 'template' => 'page/checkout/basket.tpl', + 'block' => 'checkout_basket_main', + 'file' => '/Application/views/ga4/remove_from_cart.tpl', + 'position' => 150 ] ], 'settings' => [