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 ($this->isArticleRemovedState($aProducts)) { //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); } } /** * @return bool * * checks, if we're in the short state of "an Article has been removed" * We check by looking for the "'removeBtn' is not null", as a sign for it has been triggered/ clicked * if that doesn't work, we check if there's an Article in the Products array, that has "'am' = 0" * Which also shows we're in that state rn */ protected function isArticleRemovedState(array $productsArray) :bool { if (Registry::getRequest()->getRequestEscapedParameter('removeBtn') or Registry::getRequest()->getRequestEscapedParameter('updateBtn') ){ return true; }else{ foreach ($productsArray as $aProduct) { if (intval($aProduct['am']) === 0) { return true; } } } return false; } }