8
0

Commits vergleichen

..

25 Commits

Autor SHA1 Nachricht Datum
3c29ded321 [Changed] move item_variants to own event-parameter section 2025-06-12 10:05:20 +02:00
6a4297ea2e [Bump] Changelog 2025-06-12 09:48:10 +02:00
f239e7e5d7 [Fixed] irritating admin list module group-name 2025-06-12 09:48:10 +02:00
4577e89ee3 [Bump] changelog && Metadata 2025-06-12 09:24:51 +02:00
bf9725c9be [Changed] explanation text 2025-06-12 09:05:15 +02:00
bf316c2463 [Fixed] no input error
if activated but no chars are given, it'll cut out the whole category-string
-> added char-check
2025-06-12 09:04:57 +02:00
e65f4ff581 [Changed] moving new setting-sections to corresponding area 2025-06-10 16:09:25 +02:00
cf463a60e2 added option to add variants in view_item event 2025-06-10 14:52:30 +02:00
2b8192da26 - Change item_category_X to item_categoryX etc.
- add item_brand to all events
- add option to use real category titles instead of url parts for item_categoryX
- add option to replace chars in item_categoryX values

thanks to Stefan Moisees@beffy@proudcommerce.com
2025-06-10 14:26:22 +02:00
14b07749aa MGH-424 easycredit fix: cast oxdesc to string, may be object 2025-06-10 11:32:45 +02:00
12b2f85f52 Add missing semikolon to prevent javascript errors 2025-06-10 11:32:18 +02:00
c35a95bc57 Add item_oxid parameter to all event templates 2025-06-10 11:31:39 +02:00
9b8a5b9365 Fix changelog 2025-03-19 17:04:21 +01:00
2ea16f2b62 [Bump] Changelog && Metadata 2025-03-19 16:41:04 +01:00
b2a302fbb3 [Removed] over-engineered Getter-methods
- the methods would semi-automatic search and set/ save params
- I removed those and set it back to its base functionality:
-- saving happens ONLY at the save() function if triggered by the user in the admin-frontend
-- only one Getter who checks for a value in the DB ? give the value : no value given yet
2025-03-19 08:39:10 +01:00
e347739bd3 [Changed] remove save-logic from Getter-Method 2025-03-19 08:31:56 +01:00
3250f2bf91 [Changed] clear code 2025-03-10 22:51:22 +01:00
14adccc4d5 [Bump] metadata + Changelog 2025-02-24 07:19:07 +01:00
9d4f51e574 [Bump] Metadata & Changelog 2025-02-19 22:12:05 +01:00
31f7578aa4 [Changed] composer.json meta-reqs 2025-02-19 22:09:40 +01:00
05fbafea6e [Fixed] missing menu-translation 2025-02-19 22:04:11 +01:00
c0951277b8 [Fixed] false metadata view_cart entry 2025-02-19 21:58:48 +01:00
28f04c8281 [Bump] Metadata && Changelog 2024-12-21 14:53:16 +01:00
f7bef420aa [OST614872][Added] method for additional globals 2024-12-16 17:37:12 +01:00
c0c78ce63d don't submit item prices, if user doesn't have "show price" right 2024-11-15 13:46:44 +01:00
77 geänderte Dateien mit 607 neuen und 484 gelöschten Zeilen

Datei anzeigen

@ -1,15 +1,13 @@
<?php <?php
$finder = PhpCsFixer\Finder::create() $finder = PhpCsFixer\Finder::create()
->in(__DIR__) ->in(__DIR__)
; ;
$config = new PhpCsFixer\Config(); $config = new PhpCsFixer\Config();
return $config->setRules([ return $config->setRules([
'@PHP81Migration' => true, '@PHP73Migration' => true,
'@PSR12' => true, '@PSR12' => true
'php_unit_test_class_requires_covers' => true, ])
'doctrine_annotation_indentation' => true, ->setFinder($finder)
]) ;
->setFinder($finder)
;

Datei anzeigen

@ -12,4 +12,4 @@ class d3GtmStartWidget extends \OxidEsales\Eshop\Application\Component\Widget\Wi
return ''; return '';
} }
} }

Datei anzeigen

@ -12,7 +12,7 @@ use OxidEsales\Eshop\Core\ViewConfig;
class GA4AdminUserInterface_main extends \OxidEsales\Eshop\Application\Controller\Admin\AdminDetailsController class GA4AdminUserInterface_main extends \OxidEsales\Eshop\Application\Controller\Admin\AdminDetailsController
{ {
protected $_sThisTemplate = '@' . Constants::OXID_MODULE_ID . '/admin/d3ga4uimain'; protected $_sThisTemplate = 'ga4/admin/d3ga4uimain.tpl';
public function render() public function render()
{ {
@ -37,8 +37,10 @@ class GA4AdminUserInterface_main extends \OxidEsales\Eshop\Application\Controlle
'_blEnableDebug', '_blEnableDebug',
'_blEnableConsentMode', '_blEnableConsentMode',
'_blEnableOwnCookieManager', '_blEnableOwnCookieManager',
'_blUseRealCategoyTitles',
'_blEnableMeasurementCapabilities', '_blEnableMeasurementCapabilities',
'_blEnableUsercentricsConsentModeApi', '_blEnableUsercentricsConsentModeApi',
'_blViewItemAddVariants',
]; ];
foreach ($aCheckBoxParams as $checkBoxName){ foreach ($aCheckBoxParams as $checkBoxName){

Datei anzeigen

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace D3\GoogleAnalytics4\Application\Model\CMP; namespace D3\GoogleAnalytics4\Application\Model\CMP;
abstract class ConsentManagementPlatformBaseModel extends \OxidEsales\Eshop\Core\Model\BaseModel implements ConsentManagementPlatformInterface abstract class ConsentManagementPlatformBaseModel extends \OxidEsales\Eshop\Core\Model\BaseModel implements ConsentManagementPlatformInterface
{ {
public string $sCMPName; public string $sCMPName;
@ -15,4 +16,4 @@ abstract class ConsentManagementPlatformBaseModel extends \OxidEsales\Eshop\Core
{ {
return $this->sCMPName; return $this->sCMPName;
} }
} }

Datei anzeigen

@ -5,4 +5,4 @@ namespace D3\GoogleAnalytics4\Application\Model\CMP;
interface ConsentManagementPlatformInterface interface ConsentManagementPlatformInterface
{ {
public function getCMPName(); public function getCMPName();
} }

Datei anzeigen

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace D3\GoogleAnalytics4\Application\Model\CMP; namespace D3\GoogleAnalytics4\Application\Model\CMP;
use D3\GoogleAnalytics4\Application\Model\ManagerTypes; use D3\GoogleAnalytics4\Application\Model\ManagerTypes;
/** /**
@ -17,8 +18,8 @@ use D3\GoogleAnalytics4\Application\Model\ManagerTypes;
*/ */
class Usercentrics extends ConsentManagementPlatformBaseModel class Usercentrics extends ConsentManagementPlatformBaseModel
{ {
public const sExternalIncludationPublicName = "( Externe Einbindung ) Usercentrics"; const sExternalIncludationPublicName = "( Externe Einbindung ) Usercentrics";
public const sExternalIncludationInternalName = "usercentrics"; const sExternalIncludationInternalName = "usercentrics";
public const sModuleIncludationPublicName = "( Modul ) Usercentrics"; const sModuleIncludationPublicName = "( Modul ) Usercentrics";
public const sModuleIncludationInternalName = "oxps_usercentrics"; const sModuleIncludationInternalName = "oxps_usercentrics";
} }

Datei anzeigen

@ -4,7 +4,8 @@ declare(strict_types=1);
namespace D3\GoogleAnalytics4\Application\Model; namespace D3\GoogleAnalytics4\Application\Model;
class Constants class Constants
{ {
public const OXID_MODULE_ID = 'd3googleanalytics4'; public const OXID_MODULE_ID = 'd3googleanalytics4';
} }

Datei anzeigen

@ -6,26 +6,26 @@ use D3\GoogleAnalytics4\Application\Model\CMP\Usercentrics;
class ManagerTypes class ManagerTypes
{ {
public const EXTERNAL_SERVICE = "eigener Service"; const EXTERNAL_SERVICE = "eigener Service";
public const INTERNAL_EXTERNAL_SERVICE = "externalService"; const INTERNAL_EXTERNAL_SERVICE = "externalService";
public const NET_COOKIE_MANAGER = "Netensio Cookie Manager"; const NET_COOKIE_MANAGER = "Netensio Cookie Manager";
public const INTERNAL_NET_COOKIE_MANAGER = "net_cookie_manager"; const INTERNAL_NET_COOKIE_MANAGER = "net_cookie_manager";
/** /**
* Further information's: * Further information's:
* https://github.com/aggrosoft/oxid-cookie-compliance * https://github.com/aggrosoft/oxid-cookie-compliance
*/ */
public const AGCOOKIECOMPLIANCE = "Aggrosoft Cookie Compliance"; const AGCOOKIECOMPLIANCE = "Aggrosoft Cookie Compliance";
public const INTERNAL_AGCOOKIECOMPLIANCE = "agcookiecompliance"; const INTERNAL_AGCOOKIECOMPLIANCE = "agcookiecompliance";
public const CONSENTMANAGER = "Consentmanager"; const CONSENTMANAGER = "Consentmanager";
public const INTERNAL_CONSENTMANAGER = "cmconsentmanager"; const INTERNAL_CONSENTMANAGER = "cmconsentmanager";
public const COOKIEFIRST = "Cookiefirst"; const COOKIEFIRST = "Cookiefirst";
public const INTERNAL_COOKIEFIRST = "cookiefirst"; const INTERNAL_COOKIEFIRST = "cookiefirst";
public const COOKIEBOT = "Cookiebot"; const COOKIEBOT = "Cookiebot";
public const INTERNAL_COOKIEBOT = "cookiebot"; const INTERNAL_COOKIEBOT = "cookiebot";
/** /**
* @return array * @return array
@ -48,25 +48,25 @@ class ManagerTypes
* @param string $sManager * @param string $sManager
* @return bool * @return bool
*/ */
public function isManagerInList(string $sManager): bool public function isManagerInList(string $sManager) :bool
{ {
return in_array($sManager, array_keys($this->getManagerList()), true); return in_array($sManager, array_keys($this->getManagerList()), true);
} }
/** /**
* @return array * @return array
* *
* the CMP from this method always needs the script tag delivered to the dom. * the CMP from this method always needs the script tag delivered to the dom.
*/ */
public function scriptTagDeliveredByDefaultArray(): array public function scriptTagDeliveredByDefaultArray() :array
{ {
return [ return [
Usercentrics::sModuleIncludationInternalName, Usercentrics::sModuleIncludationInternalName,
Usercentrics::sExternalIncludationInternalName, Usercentrics::sExternalIncludationInternalName,
ManagerTypes::INTERNAL_CONSENTMANAGER, ManagerTypes::INTERNAL_CONSENTMANAGER,
ManagerTypes::INTERNAL_COOKIEFIRST, ManagerTypes::INTERNAL_COOKIEFIRST,
ManagerTypes::INTERNAL_COOKIEBOT, ManagerTypes::INTERNAL_COOKIEBOT,
ManagerTypes::INTERNAL_EXTERNAL_SERVICE, ManagerTypes::INTERNAL_EXTERNAL_SERVICE
]; ];
} }
} }

Datei anzeigen

@ -1,13 +1,13 @@
<?php <?php
$sLangName = "Deutsch"; $sLangName = "Deutsch";
// ------------------------------- // -------------------------------
// RESOURCE IDENTITFIER = STRING // RESOURCE IDENTITFIER = STRING
// ------------------------------- // -------------------------------
$aLang = [ $aLang = array(
'charset' => 'UTF-8', 'charset' => 'UTF-8',
'd3mxgoogleanalytics4' => 'Google Analytics 4', 'd3mxgoogleanalytics4' => 'Google Analytics 4',
'd3mxd3modules' => $aLangCache['d3mxd3modules'] ?? 'Google Analytics 4',
'd3mxgoogleanalytics4set' => 'Einstellungen', 'd3mxgoogleanalytics4set' => 'Einstellungen',
// Base Translations // Base Translations
@ -42,6 +42,17 @@ $aLang = [
<br> <br>
Ein einfaches anschalten dieser Funktion regelt noch <strong>nicht</strong> die völlige Funktionsweise Ein einfaches anschalten dieser Funktion regelt noch <strong>nicht</strong> die völlige Funktionsweise
aller beteiligten Instanzen; diese bedarf eine detailliertere Konfiguration!<br>", aller beteiligten Instanzen; diese bedarf eine detailliertere Konfiguration!<br>",
'D3USEREALCATTITLES' => "Klartext Kategorie-Titel statt URL-Teile verwenden",
'D3USEREALCATTITLES_HELP' => "Für die 'item_category' Ereignis-Parameter keine URL-Teile, sondern die Klartext-Kategorie-Titel verwenden.<br>
Also z.B. 'Haarbürsten' statt 'haarbuersten'.",
'D3REPLACECHARS' => "Zeichen ersetzen",
'D3REPLACECHARS_HELP' => 'Hier alle Zeichen, die aus Kategorie-Titeln entfernt werden sollen, eintragen,
also z.B. " um ein Zoll-Zeichen zu entfernen oder "0-9 um das Zollzeichen
und alle Ziffern zu entfernen.<br>
<br>
Eine Beispieleingabe könnte so aussehen: üöä0-9<br>
Damit wird <b>ü ö ä</b> und die Ziffern <b>0 1 2 3 4 5 6 7 8 9</b> entfernt.',
// Use CMP? // Use CMP?
'D3CMPTABTITLE' => 'Cookie Manager Einstellungen', 'D3CMPTABTITLE' => 'Cookie Manager Einstellungen',
@ -121,4 +132,14 @@ Nachher:
src="{Domain}?id={Container-ID}" src="{Domain}?id={Container-ID}"
</code> </code>
</pre>', </pre>',
]; 'D3EXTENDEDCONFIG' => 'Erweiterte [GA4] Ereignisskonfiguration',
'D3VIEWITEMADDVARIANTS' => 'Varianten des Artikels in den Ereignis-Parameter auflisten',
'D3VIEWITEMADDVARIANTS_HELP' => 'Wenn aktiviert, <u>werden die Varianten des Artikels</u>
in die "view_item" Ereignis-Parameter angehangen ( Artikeldetailsseite ).<br>
Dies ist dann notwendig, wenn die Varianten nicht gesondert ausgewählt werden können und direkt von der Seite
des Hauptartikels in den Warenkorb gelegt werden können.
<br>
<br>
Standardmäßig werden keine Varianten an das "view_item"-Event-Array angehangen.<br>
Je nach Artikel kann es hier zu wesentlicher vergrößerung kommen.',
);

Datei anzeigen

@ -1,5 +1,4 @@
<?php <?php
/** /**
* For the full copyright and license information, please view the LICENSE * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
@ -32,6 +31,7 @@ $aLang = [
'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_blGA4enab' => 'GA4 Aktivieren', 'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_blGA4enab' => 'GA4 Aktivieren',
'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_blUAenabled' => 'UA Aktivieren', 'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_blUAenabled' => 'UA Aktivieren',
'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_blEnableDebug' => 'Debug-Modus aktivieren', 'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_blEnableDebug' => 'Debug-Modus aktivieren',
'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_blUseRealCategoyTitles' => 'Statt URL-Teilen die tatsächlichen Kategorie-Titel verwenden (item_category)',
// Serverside - tagging // Serverside - tagging
'SHOP_MODULE_GROUP_'.Constants::OXID_MODULE_ID.'_serversidetagging' => 'Server-Side tagging', 'SHOP_MODULE_GROUP_'.Constants::OXID_MODULE_ID.'_serversidetagging' => 'Server-Side tagging',

Datei anzeigen

@ -1,4 +1,4 @@
[{include file="@d3googleanalytics4/admin/d3ga4uiheaditem.tpl" title="GENERAL_ADMIN_TITLE"|oxmultilangassign}] [{include file="ga4/admin/d3ga4uiheaditem.tpl" title="GENERAL_ADMIN_TITLE"|oxmultilangassign}]
<style> <style>
body { body {
background-image: linear-gradient(to top, #d5d4d0 0%, #d5d4d0 1%, #eeeeec 31%, #efeeec 75%, #e9e9e7 100%); background-image: linear-gradient(to top, #d5d4d0 0%, #d5d4d0 1%, #eeeeec 31%, #efeeec 75%, #e9e9e7 100%);
@ -145,6 +145,43 @@
<button type="submit" name="save" class="btn btn-light w-100" onClick="Javascript:document.d3gtmformedit.fnc.value='save'">[{oxmultilang ident="GENERAL_SAVE"}]</button> <button type="submit" name="save" class="btn btn-light w-100" onClick="Javascript:document.d3gtmformedit.fnc.value='save'">[{oxmultilang ident="GENERAL_SAVE"}]</button>
</div> </div>
</div> </div>
<div class="accordion-item">
<h2 class="accordion-header">
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-viewitemvariants" aria-expanded="false" aria-controls="panelsStayOpen-viewitemvariants">
[{oxmultilang ident="D3EXTENDEDCONFIG"}]
</button>
</h2>
<div id="panelsStayOpen-viewitemvariants" class="accordion-collapse collapse">
<div class="accordion-body">
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" name="editval[bool][_blViewItemAddVariants]" [{if $d3ViewObject->d3GetModuleConfigParam('_blViewItemAddVariants')}]checked[{/if}] id="blGA4enab">
<label class="form-check-label" for="flexCheckDefault">
[{oxmultilang ident="D3VIEWITEMADDVARIANTS"}][{oxinputhelp ident="D3VIEWITEMADDVARIANTS_HELP"}]
</label>
</div>
<hr>
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="_blUseRealCategoyTitles"
name="editval[bool][_blUseRealCategoyTitles]"
[{if $d3ViewObject->d3GetModuleConfigParam('_blUseRealCategoyTitles')}]checked[{/if}]>
<label class="form-check-label" for="flexCheckChecked">
[{oxmultilang ident="D3USEREALCATTITLES"}][{oxinputhelp ident="D3USEREALCATTITLES_HELP"}]
</label>
</div>
<div class="mb-3">
<div class="input-group w-50">
<span class="input-group-text"
id="basic-addon3">[{oxmultilang ident="D3REPLACECHARS"}]</span>
<input type="text" class="form-control" id="_sReplaceChars"
name="editval[str][_sReplaceChars]" aria-describedby="basic-addon3"
value='[{$d3ViewObject->d3GetModuleConfigParam('_sReplaceChars')}]'/>
</div>
<div class="text-muted">[{oxmultilang ident="D3REPLACECHARS_HELP"}]</div>
</div>
</div>
<button type="submit" name="save" class="btn btn-light w-100" onClick="Javascript:document.d3gtmformedit.fnc.value='save'">[{oxmultilang ident="GENERAL_SAVE"}]</button>
</div>
</div>
[{if $d3ViewConfObject->d3IsUsercentricsCMPChosen()}] [{if $d3ViewConfObject->d3IsUsercentricsCMPChosen()}]
<div class="accordion-item"> <div class="accordion-item">
<h2 class="accordion-header"> <h2 class="accordion-header">

Datei anzeigen

Datei anzeigen

@ -1,12 +1,12 @@
[{if $oViewConf->D3blShowGtmScript()}] [{if $oViewConf->D3blShowGtmScript()}]
[{if $oViewConf->getGtmContainerId()}][{strip}] [{if $oViewConf->getGtmContainerId()}][{strip}]
<!-- Google Tag Manager (noscript) --> <!-- Google Tag Manager (noscript) -->
<noscript> <noscript>
<iframe src="[{$oViewConf->getServerSidetaggingNoJsDomain()}]?id=[{$oViewConf->getGtmContainerId()}]" <iframe src="[{$oViewConf->getServerSidetaggingNoJsDomain()}]?id=[{$oViewConf->getGtmContainerId()}]"
height="0" width="0" style="display:none;visibility:hidden"></iframe> height="0" width="0" style="display:none;visibility:hidden"></iframe>
</noscript> </noscript>
<!-- End Google Tag Manager (noscript) --> <!-- End Google Tag Manager (noscript) -->
[{/strip}][{/if}] [{/strip}][{/if}]
[{/if}] [{/if}]
[{$smarty.block.parent}] [{$smarty.block.parent}]

Datei anzeigen

@ -0,0 +1,3 @@
[{$smarty.block.parent}]
[{include file="event/add_payment_info.tpl"}]

Datei anzeigen

@ -0,0 +1,3 @@
[{$smarty.block.parent}]
[{include file="event/begin_checkout.tpl"}]

Datei anzeigen

@ -0,0 +1,3 @@
[{$smarty.block.parent}]
[{include file="event/add_to_cart.tpl" htmlIdAmountOfArticles='#amountToBasket'}]

Datei anzeigen

@ -0,0 +1,3 @@
[{$smarty.block.parent}]
[{include file="event/add_to_cart.tpl" htmlIdAmountOfArticles='#amountToBasket'}]

Datei anzeigen

@ -0,0 +1,3 @@
[{$smarty.block.parent}]
[{include file="event/purchase.tpl"}]

Datei anzeigen

@ -0,0 +1,3 @@
[{$smarty.block.parent}]
[{include file="event/remove_from_cart.tpl"}]

Datei anzeigen

@ -0,0 +1,3 @@
[{$smarty.block.parent}]
[{include file="event/add_to_cart.tpl" htmlIdAmountOfArticles='#amountToBasket'}]

Datei anzeigen

@ -0,0 +1,3 @@
[{$smarty.block.parent}]
[{include file="event/view_cart.tpl"}]

Datei anzeigen

@ -0,0 +1,3 @@
[{$smarty.block.parent}]
[{include file="event/view_item.tpl"}]

Datei anzeigen

@ -0,0 +1,3 @@
[{$smarty.block.parent}]
[{include file="event/view_item_list.tpl"}]

Datei anzeigen

@ -0,0 +1,3 @@
[{$smarty.block.parent}]
[{include file="event/view_search_result.tpl"}]

Datei anzeigen

@ -26,17 +26,19 @@
[{assign var="gtmBasketItem" value=$basketitem->getArticle()}] [{assign var="gtmBasketItem" value=$basketitem->getArticle()}]
[{assign var="gtmBasketItemCategory" value=$gtmBasketItem->getCategory()}] [{assign var="gtmBasketItemCategory" value=$gtmBasketItem->getCategory()}]
{ {
'item_oxid': '[{$gtmCartArticles[$basketindex]->getFieldData('oxid')}]',
'item_id': '[{$gtmCartArticles[$basketindex]->getFieldData('oxartnum')}]', 'item_id': '[{$gtmCartArticles[$basketindex]->getFieldData('oxartnum')}]',
'item_name': '[{$gtmCartArticles[$basketindex]->getFieldData('oxtitle')}]', 'item_name': '[{$gtmCartArticles[$basketindex]->getRawFieldData('oxtitle')}]',
'item_variant': '[{$gtmCartArticles[$basketindex]->getFieldData('oxvarselect')}]', 'item_variant': '[{$gtmCartArticles[$basketindex]->getFieldData('oxvarselect')}]',
'item_brand': '[{if $gtmManufacturer}][{$gtmManufacturer->oxmanufacturers__oxtitle->value}][{/if}]',
[{if $gtmBasketItemCategory}] [{if $gtmBasketItemCategory}]
'item_category': '[{$gtmBasketItemCategory->getSplitCategoryArray(0, true)}]', 'item_category': '[{$gtmBasketItemCategory->getSplitCategoryArray(0, true)}]',
'item_category_2': '[{$gtmBasketItemCategory->getSplitCategoryArray(1, true)}]', 'item_category2': '[{$gtmBasketItemCategory->getSplitCategoryArray(1, true)}]',
'item_category_3': '[{$gtmBasketItemCategory->getSplitCategoryArray(2, true)}]', 'item_category3': '[{$gtmBasketItemCategory->getSplitCategoryArray(2, true)}]',
'item_category_4': '[{$gtmBasketItemCategory->getSplitCategoryArray(3, true)}]', 'item_category4': '[{$gtmBasketItemCategory->getSplitCategoryArray(3, true)}]',
'item_list_name': '[{$gtmBasketItemCategory->getSplitCategoryArray()}]', 'item_list_name': '[{$gtmBasketItemCategory->getSplitCategoryArray()}]',
[{/if}] [{/if}]
'price': [{$gtmItemPriceObject->getPrice()}], [{oxhasrights ident="SHOWARTICLEPRICE"}]'price': [{$gtmItemPriceObject->getPrice()}],[{/oxhasrights}]
'coupon': '[{foreach from=$oxcmp_basket->getVouchers() item=sVoucher key=key name=Voucher}][{$sVoucher->sVoucherNr}][{if !$smarty.foreach.Voucher.last}], [{/if}][{/foreach}]', 'coupon': '[{foreach from=$oxcmp_basket->getVouchers() item=sVoucher key=key name=Voucher}][{$sVoucher->sVoucherNr}][{if !$smarty.foreach.Voucher.last}], [{/if}][{/foreach}]',
'quantity': [{$basketitem->getAmount()}], 'quantity': [{$basketitem->getAmount()}],
'position': [{$smarty.foreach.gtmCartContents.index}] 'position': [{$smarty.foreach.gtmCartContents.index}]

Datei anzeigen

@ -35,17 +35,18 @@
'value': iArtQuantity*[{$d3PriceObject->getPrice()}], 'value': iArtQuantity*[{$d3PriceObject->getPrice()}],
'items': [ 'items': [
{ {
'item_oxid': '[{$oGtmProduct->getFieldData('oxid')}]',
'item_id': '[{$oGtmProduct->getFieldData('oxartnum')}]', 'item_id': '[{$oGtmProduct->getFieldData('oxartnum')}]',
'item_name': '[{$oGtmProduct->getFieldData('oxtitle')}]', 'item_name': '[{$oGtmProduct->getRawFieldData('oxtitle')}]',
'price': [{$d3PriceObject->getPrice()}], [{oxhasrights ident="SHOWARTICLEPRICE"}]'price': [{$d3PriceObject->getPrice()}],[{/oxhasrights}]
'item_brand': '[{if $gtmManufacturer}][{$gtmManufacturer->oxmanufacturers__oxtitle->value}][{/if}]', 'item_brand': '[{if $gtmManufacturer}][{$gtmManufacturer->oxmanufacturers__oxtitle->value}][{/if}]',
'item_variant': '[{if $oGtmProduct->getFieldData('oxvarselect')}][{$oGtmProduct->getFieldData('oxvarselect')}][{/if}]', 'item_variant': '[{if $oGtmProduct->getFieldData('oxvarselect')}][{$oGtmProduct->getFieldData('oxvarselect')}][{/if}]',
[{if $gtmCategory}] [{if $gtmCategory}]
'item_category': '[{$gtmCategory->getSplitCategoryArray(0, true)}]', 'item_category': '[{$gtmCategory->getSplitCategoryArray(0, true)}]',
'item_category_2':'[{$gtmCategory->getSplitCategoryArray(1, true)}]', 'item_category2': '[{$gtmCategory->getSplitCategoryArray(1, true)}]',
'item_category_3':'[{$gtmCategory->getSplitCategoryArray(2, true)}]', 'item_category3': '[{$gtmCategory->getSplitCategoryArray(2, true)}]',
'item_category_4':'[{$gtmCategory->getSplitCategoryArray(3, true)}]', 'item_category4': '[{$gtmCategory->getSplitCategoryArray(3, true)}]',
'item_list_name':'[{$gtmCategory->getSplitCategoryArray()}]', 'item_list_name': '[{$gtmCategory->getSplitCategoryArray()}]',
[{/if}] [{/if}]
'quantity': iArtQuantity 'quantity': iArtQuantity
} }

Datei anzeigen

@ -24,18 +24,21 @@
[{assign var="d3oItemPrice" value=$basketitem->getPrice()}] [{assign var="d3oItemPrice" value=$basketitem->getPrice()}]
[{assign var="gtmBasketItem" value=$basketitem->getArticle()}] [{assign var="gtmBasketItem" value=$basketitem->getArticle()}]
[{assign var="gtmBasketItemCategory" value=$gtmBasketItem->getCategory()}] [{assign var="gtmBasketItemCategory" value=$gtmBasketItem->getCategory()}]
[{assign var="gtmManufacturer" value=$gtmBasketItem->getManufacturer()}]
{ {
'item_oxid': '[{$gtmCartArticles[$basketindex]->getFieldData('oxid')}]',
'item_id': '[{$gtmCartArticles[$basketindex]->getFieldData('oxartnum')}]', 'item_id': '[{$gtmCartArticles[$basketindex]->getFieldData('oxartnum')}]',
'item_name': '[{$gtmCartArticles[$basketindex]->getFieldData('oxtitle')}]', 'item_name': '[{$gtmCartArticles[$basketindex]->getRawFieldData('oxtitle')}]',
'item_variant': '[{$gtmCartArticles[$basketindex]->getFieldData('oxvarselect')}]', 'item_variant': '[{$gtmCartArticles[$basketindex]->getFieldData('oxvarselect')}]',
'item_brand': '[{if $gtmManufacturer}][{$gtmManufacturer->oxmanufacturers__oxtitle->value}][{/if}]',
[{if $gtmBasketItemCategory}] [{if $gtmBasketItemCategory}]
'item_category': '[{$gtmBasketItemCategory->getSplitCategoryArray(0, true)}]', 'item_category': '[{$gtmBasketItemCategory->getSplitCategoryArray(0, true)}]',
'item_category_2': '[{$gtmBasketItemCategory->getSplitCategoryArray(1, true)}]', 'item_category2': '[{$gtmBasketItemCategory->getSplitCategoryArray(1, true)}]',
'item_category_3': '[{$gtmBasketItemCategory->getSplitCategoryArray(2, true)}]', 'item_category3': '[{$gtmBasketItemCategory->getSplitCategoryArray(2, true)}]',
'item_category_4': '[{$gtmBasketItemCategory->getSplitCategoryArray(3, true)}]', 'item_category4': '[{$gtmBasketItemCategory->getSplitCategoryArray(3, true)}]',
'item_list_name': '[{$gtmBasketItemCategory->getSplitCategoryArray()}]', 'item_list_name': '[{$gtmBasketItemCategory->getSplitCategoryArray()}]',
[{/if}] [{/if}]
'price': [{$d3oItemPrice->getPrice()}], [{oxhasrights ident="SHOWARTICLEPRICE"}]'price': [{$d3oItemPrice->getPrice()}],[{/oxhasrights}]
'coupon': '[{foreach from=$oxcmp_basket->getVouchers() item=sVoucher key=key name=Voucher}][{$sVoucher->sVoucherNr}][{if !$smarty.foreach.Voucher.last}], [{/if}][{/foreach}]', 'coupon': '[{foreach from=$oxcmp_basket->getVouchers() item=sVoucher key=key name=Voucher}][{$sVoucher->sVoucherNr}][{if !$smarty.foreach.Voucher.last}], [{/if}][{/foreach}]',
'quantity': [{$basketitem->getAmount()}], 'quantity': [{$basketitem->getAmount()}],
'position': [{$smarty.foreach.gtmCartContents.index}] 'position': [{$smarty.foreach.gtmCartContents.index}]

Datei anzeigen

@ -26,21 +26,24 @@
[{assign var="gtmPurchaseItemPriceObject" value=$gtmBasketItem->getPrice()}] [{assign var="gtmPurchaseItemPriceObject" value=$gtmBasketItem->getPrice()}]
[{assign var="gtmPurchaseItem" value=$gtmBasketItem->getArticle()}] [{assign var="gtmPurchaseItem" value=$gtmBasketItem->getArticle()}]
[{assign var="gtmPurchaseItemCategory" value=$gtmPurchaseItem->getCategory()}] [{assign var="gtmPurchaseItemCategory" value=$gtmPurchaseItem->getCategory()}]
[{assign var="gtmManufacturer" value=$gtmPurchaseItem->getManufacturer()}]
{ {
'item_oxid': '[{$gtmBasketItem->getFieldData("oxid")}]',
'item_id': '[{$gtmBasketItem->getFieldData("oxartnum")}]', 'item_id': '[{$gtmBasketItem->getFieldData("oxartnum")}]',
'item_name': '[{$gtmBasketItem->getFieldData("oxtitle")}]', 'item_name': '[{$gtmBasketItem->getRawFieldData("oxtitle")}]',
'affiliation': '[{$gtmBasketItem->getFieldData("oxtitle")}]', 'affiliation': '[{$gtmBasketItem->getRawFieldData("oxtitle")}]',
'coupon': '[{foreach from=$gtmOrderVouchers item="gtmOrderVoucher" name="gtmOrderVoucherIteration"}][{$gtmOrderVoucher}][{if !$smarty.foreach.gtmOrderVoucherIteration.last}], [{/if}][{/foreach}]', 'coupon': '[{foreach from=$gtmOrderVouchers item="gtmOrderVoucher" name="gtmOrderVoucherIteration"}][{$gtmOrderVoucher}][{if !$smarty.foreach.gtmOrderVoucherIteration.last}], [{/if}][{/foreach}]',
'item_variant': '[{$gtmBasketItem->getFieldData("oxselvariant")}]', 'item_variant': '[{$gtmBasketItem->getFieldData("oxselvariant")}]',
'item_brand': '[{if $gtmManufacturer}][{$gtmManufacturer->oxmanufacturers__oxtitle->value}][{/if}]',
[{if $gtmPurchaseItemCategory}] [{if $gtmPurchaseItemCategory}]
'item_category': '[{$gtmPurchaseItemCategory->getSplitCategoryArray(0, true)}]', 'item_category': '[{$gtmPurchaseItemCategory->getSplitCategoryArray(0, true)}]',
'item_category_2': '[{$gtmPurchaseItemCategory->getSplitCategoryArray(1, true)}]', 'item_category2': '[{$gtmPurchaseItemCategory->getSplitCategoryArray(1, true)}]',
'item_category_3': '[{$gtmPurchaseItemCategory->getSplitCategoryArray(2, true)}]', 'item_category3': '[{$gtmPurchaseItemCategory->getSplitCategoryArray(2, true)}]',
'item_category_4': '[{$gtmPurchaseItemCategory->getSplitCategoryArray(3, true)}]', 'item_category4': '[{$gtmPurchaseItemCategory->getSplitCategoryArray(3, true)}]',
'item_list_name': '[{$gtmPurchaseItemCategory->getSplitCategoryArray()}]', 'item_list_name': '[{$gtmPurchaseItemCategory->getSplitCategoryArray()}]',
[{/if}] [{/if}]
'price': [{$gtmPurchaseItemPriceObject->getPrice()}], [{oxhasrights ident="SHOWARTICLEPRICE"}]'price': [{$gtmPurchaseItemPriceObject->getPrice()}],[{/oxhasrights}]
'quantity': [{$gtmBasketItem->getFieldData("oxamount")}], 'quantity': [{$gtmBasketItem->getFieldData("oxamount")}],
'position': [{$smarty.foreach.gtmArticles.iteration}] 'position': [{$smarty.foreach.gtmArticles.iteration}]
}[{if !$smarty.foreach.gtmArticles.last}],[{/if}] }[{if !$smarty.foreach.gtmArticles.last}],[{/if}]
@ -49,7 +52,7 @@
}[{if $oViewConf->isDebugModeOn()}], }[{if $oViewConf->isDebugModeOn()}],
'debug_mode': 'true' 'debug_mode': 'true'
[{/if}] [{/if}]
}) });
[{/strip}] [{/strip}]
[{/capture}] [{/capture}]
[{oxscript add=$smarty.capture.d3_ga4_purchase}] [{oxscript add=$smarty.capture.d3_ga4_purchase}]

Datei anzeigen

@ -18,17 +18,18 @@
[{assign var="d3oItemPrice" value=$rmItem->getPrice()}] [{assign var="d3oItemPrice" value=$rmItem->getPrice()}]
[{assign var="gtmBasketItemCategory" value=$rmItem->getCategory()}] [{assign var="gtmBasketItemCategory" value=$rmItem->getCategory()}]
{ {
'item_oxid': '[{$rmItem->getFieldData('oxid')}]',
'item_id': '[{$rmItem->getFieldData('oxartnum')}]', 'item_id': '[{$rmItem->getFieldData('oxartnum')}]',
'item_name': '[{$rmItem->getFieldData('oxtitle')}]', 'item_name': '[{$rmItem->getRawFieldData('oxtitle')}]',
'item_variant': '[{$rmItem->getFieldData('oxvarselect')}]', 'item_variant': '[{$rmItem->getFieldData('oxvarselect')}]',
[{if $gtmBasketItemCategory}] [{if $gtmBasketItemCategory}]
'item_category': '[{$gtmBasketItemCategory->getSplitCategoryArray(0, true)}]', 'item_category': '[{$gtmBasketItemCategory->getSplitCategoryArray(0, true)}]',
'item_category_2': '[{$gtmBasketItemCategory->getSplitCategoryArray(1, true)}]', 'item_category2': '[{$gtmBasketItemCategory->getSplitCategoryArray(1, true)}]',
'item_category_3': '[{$gtmBasketItemCategory->getSplitCategoryArray(2, true)}]', 'item_category3': '[{$gtmBasketItemCategory->getSplitCategoryArray(2, true)}]',
'item_category_4': '[{$gtmBasketItemCategory->getSplitCategoryArray(3, true)}]', 'item_category4': '[{$gtmBasketItemCategory->getSplitCategoryArray(3, true)}]',
'item_list_name': '[{$gtmBasketItemCategory->getSplitCategoryArray()}]', 'item_list_name': '[{$gtmBasketItemCategory->getSplitCategoryArray()}]',
[{/if}] [{/if}]
'price': [{$d3oItemPrice->getPrice()}], [{oxhasrights ident="SHOWARTICLEPRICE"}]'price': [{$d3oItemPrice->getPrice()}],[{/oxhasrights}]
'coupon': '[{foreach from=$oxcmp_basket->getVouchers() item=sVoucher key=key name=Voucher}][{$sVoucher->sVoucherNr}][{if !$smarty.foreach.Voucher.last}], [{/if}][{/foreach}]', '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')}]', 'quantity': '[{$rmItem->getFieldData('d3AmountThatGotRemoved')}]',
'position': [{$smarty.foreach.gtmRemovedItems.index}] 'position': [{$smarty.foreach.gtmRemovedItems.index}]

Datei anzeigen

@ -23,17 +23,18 @@
[{assign var="gtmBasketItem" value=$basketitem->getArticle()}] [{assign var="gtmBasketItem" value=$basketitem->getArticle()}]
[{assign var="gtmBasketItemCategory" value=$gtmBasketItem->getCategory()}] [{assign var="gtmBasketItemCategory" value=$gtmBasketItem->getCategory()}]
{ {
'item_oxid': '[{$gtmCartArticles[$basketindex]->getFieldData('oxid')}]',
'item_id': '[{$gtmCartArticles[$basketindex]->getFieldData('oxartnum')}]', 'item_id': '[{$gtmCartArticles[$basketindex]->getFieldData('oxartnum')}]',
'item_name': '[{$gtmCartArticles[$basketindex]->getFieldData('oxtitle')}]', 'item_name': '[{$gtmCartArticles[$basketindex]->getRawFieldData('oxtitle')}]',
'item_variant': '[{$gtmCartArticles[$basketindex]->getFieldData('oxvarselect')}]', 'item_variant': '[{$gtmCartArticles[$basketindex]->getFieldData('oxvarselect')}]',
[{if $gtmBasketItemCategory}] [{if $gtmBasketItemCategory}]
'item_category': '[{$gtmBasketItemCategory->getSplitCategoryArray(0, true)}]', 'item_category': '[{$gtmBasketItemCategory->getSplitCategoryArray(0, true)}]',
'item_category_2': '[{$gtmBasketItemCategory->getSplitCategoryArray(1, true)}]', 'item_category2': '[{$gtmBasketItemCategory->getSplitCategoryArray(1, true)}]',
'item_category_3': '[{$gtmBasketItemCategory->getSplitCategoryArray(2, true)}]', 'item_category3': '[{$gtmBasketItemCategory->getSplitCategoryArray(2, true)}]',
'item_category_4': '[{$gtmBasketItemCategory->getSplitCategoryArray(3, true)}]', 'item_category4': '[{$gtmBasketItemCategory->getSplitCategoryArray(3, true)}]',
'item_list_name': '[{$gtmBasketItemCategory->getSplitCategoryArray()}]', 'item_list_name': '[{$gtmBasketItemCategory->getSplitCategoryArray()}]',
[{/if}] [{/if}]
'price': [{$d3oItemPrice->getPrice()}], [{oxhasrights ident="SHOWARTICLEPRICE"}]'price': [{$d3oItemPrice->getPrice()}],[{/oxhasrights}]
'coupon': '[{foreach from=$oxcmp_basket->getVouchers() item=sVoucher key=key name=Voucher}][{$sVoucher->sVoucherNr}][{if !$smarty.foreach.Voucher.last}], [{/if}][{/foreach}]', 'coupon': '[{foreach from=$oxcmp_basket->getVouchers() item=sVoucher key=key name=Voucher}][{$sVoucher->sVoucherNr}][{if !$smarty.foreach.Voucher.last}], [{/if}][{/foreach}]',
'quantity': [{$basketitem->getAmount()}], 'quantity': [{$basketitem->getAmount()}],
'position': [{$smarty.foreach.gtmCartContents.index}] 'position': [{$smarty.foreach.gtmCartContents.index}]

Datei anzeigen

@ -0,0 +1,62 @@
[{assign var="gtmProduct" value=$oView->getProduct()}]
[{assign var="gtmCategory" value=$gtmProduct->getCategory()}]
[{assign var="gtmManufacturer" value=$gtmProduct->getManufacturer()}]
[{block name="d3_ga4_view_item_block"}]
[{capture name="d3_ga4_view_item"}]
[{strip}]
dataLayer.push({"event": null, "eventLabel": null, "ecommerce": null}); /* Clear the previous ecommerce object. */
dataLayer.push({
'event': 'view_item',
'eventLabel':'Product View',
'ecommerce':
{
'currency': '[{$currency->name}]',
'items':
[
{
'item_oxid': '[{$gtmProduct->getFieldData("oxid")}]',
'item_name': '[{$gtmProduct->getRawFieldData("oxtitle")}]',
'item_id': '[{$gtmProduct->getFieldData("oxartnum")}]',
'item_brand': '[{if $gtmManufacturer}][{$gtmManufacturer->oxmanufacturers__oxtitle->value}][{/if}]',
'item_variant': '[{if $gtmProduct->getFieldData("oxvarselect")}][{$gtmProduct->getFieldData("oxvarselect")}][{/if}]',
[{if $gtmCategory}]
'item_category': '[{$gtmCategory->getSplitCategoryArray(0, true)}]',
'item_category2': '[{$gtmCategory->getSplitCategoryArray(1, true)}]',
'item_category3': '[{$gtmCategory->getSplitCategoryArray(2, true)}]',
'item_category4': '[{$gtmCategory->getSplitCategoryArray(3, true)}]',
'item_list_name': '[{$gtmCategory->getSplitCategoryArray()}]',
[{/if}]
[{assign var="d3PriceObject" value=$gtmProduct->getPrice()}]
[{oxhasrights ident="SHOWARTICLEPRICE"}]'price': [{$d3PriceObject->getPrice()}][{/oxhasrights}]
}
]
[{if $oViewConf->d3GetModuleConfigParam('_blViewItemAddVariants')}]
,'item_variants':[
[{foreach from=$gtmProduct->getVariants() item="oVariant"}]
{
'item_name': '[{$oVariant->getRawFieldData("oxtitle")}]',
'item_id': '[{$oVariant->getFieldData("oxartnum")}]',
'item_brand': '[{if $gtmManufacturer}][{$gtmManufacturer->oxmanufacturers__oxtitle->value}][{/if}]',
'item_variant': '[{if $oVariant->getFieldData("oxvarselect")}][{$oVariant->getFieldData("oxvarselect")}][{/if}]',
[{if $gtmCategory}]
'item_category': '[{$gtmCategory->getSplitCategoryArray(0, true)}]',
'item_category2': '[{$gtmCategory->getSplitCategoryArray(1, true)}]',
'item_category3': '[{$gtmCategory->getSplitCategoryArray(2, true)}]',
'item_category4': '[{$gtmCategory->getSplitCategoryArray(3, true)}]',
'item_list_name': '[{$gtmCategory->getSplitCategoryArray()}]',
[{/if}]
[{assign var="d3PriceObject" value=$oVariant->getPrice()}]
'price': [{$d3PriceObject->getPrice()}]
},
[{/foreach}]
]
[{/if}]
}[{if $oViewConf->isDebugModeOn()}],
'debug_mode': 'true'
[{/if}]
});
[{/strip}]
[{/capture}]
[{oxscript add=$smarty.capture.d3_ga4_view_item}]
[{/block}]

Datei anzeigen

@ -20,15 +20,16 @@
[{assign var="gtmManufacturer" value=$gtmProduct->getManufacturer()}] [{assign var="gtmManufacturer" value=$gtmProduct->getManufacturer()}]
[{if !$gtmCategory}][{assign var="gtmCategory" value=$gtmProduct->getCategory()}][{/if}] [{if !$gtmCategory}][{assign var="gtmCategory" value=$gtmProduct->getCategory()}][{/if}]
{ {
'item_oxid': '[{$gtmProduct->getFieldData("oxid")}]',
'item_id': '[{$gtmProduct->getFieldData("oxartnum")}]', 'item_id': '[{$gtmProduct->getFieldData("oxartnum")}]',
'item_name': '[{$gtmProduct->getFieldData("oxtitle")}]', 'item_name': '[{$gtmProduct->getRawFieldData("oxtitle")}]',
'price': [{$d3PriceObject->getPrice()}], [{oxhasrights ident="SHOWARTICLEPRICE"}]'price': [{$d3PriceObject->getPrice()}],[{/oxhasrights}]
'item_brand': '[{if $gtmManufacturer}][{$gtmManufacturer->oxmanufacturers__oxtitle->value}][{/if}]', 'item_brand': '[{if $gtmManufacturer}][{$gtmManufacturer->oxmanufacturers__oxtitle->value}][{/if}]',
[{if $gtmCategory}] [{if $gtmCategory}]
'item_category': '[{$gtmCategory->getSplitCategoryArray(0, true)}]', 'item_category': '[{$gtmCategory->getSplitCategoryArray(0, true)}]',
'item_category_2':'[{$gtmCategory->getSplitCategoryArray(1, true)}]', 'item_category2': '[{$gtmCategory->getSplitCategoryArray(1, true)}]',
'item_category_3':'[{$gtmCategory->getSplitCategoryArray(2, true)}]', 'item_category3': '[{$gtmCategory->getSplitCategoryArray(2, true)}]',
'item_category_4':'[{$gtmCategory->getSplitCategoryArray(3, true)}]', 'item_category4': '[{$gtmCategory->getSplitCategoryArray(3, true)}]',
[{/if}] [{/if}]
'quantity': 1 'quantity': 1
}[{if !$smarty.foreach.gtmProducts.last}],[{/if}] }[{if !$smarty.foreach.gtmProducts.last}],[{/if}]

Datei anzeigen

@ -16,15 +16,16 @@
[{assign var="gtmManufacturer" value=$gtmProduct->getManufacturer()}] [{assign var="gtmManufacturer" value=$gtmProduct->getManufacturer()}]
[{assign var="gtmCategory" value=$gtmProduct->getCategory()}] [{assign var="gtmCategory" value=$gtmProduct->getCategory()}]
{ {
'item_oxid': '[{$gtmProduct->getFieldData("oxid")}]',
'item_id': '[{$gtmProduct->getFieldData("oxartnum")}]', 'item_id': '[{$gtmProduct->getFieldData("oxartnum")}]',
'item_name': '[{$gtmProduct->getFieldData("oxtitle")}]', 'item_name': '[{$gtmProduct->getRawFieldData("oxtitle")}]',
'price': [{$d3PriceObject->getPrice()}], [{oxhasrights ident="SHOWARTICLEPRICE"}]'price': [{$d3PriceObject->getPrice()}],[{/oxhasrights}]
'item_brand': '[{if $gtmManufacturer}][{$gtmManufacturer->oxmanufacturers__oxtitle->value}][{/if}]', 'item_brand': '[{if $gtmManufacturer}][{$gtmManufacturer->oxmanufacturers__oxtitle->value}][{/if}]',
[{if $gtmCategory}] [{if $gtmCategory}]
'item_category': '[{$gtmCategory->getSplitCategoryArray(0, true)}]', 'item_category': '[{$gtmCategory->getSplitCategoryArray(0, true)}]',
'item_category_2':'[{$gtmCategory->getSplitCategoryArray(1, true)}]', 'item_category2': '[{$gtmCategory->getSplitCategoryArray(1, true)}]',
'item_category_3':'[{$gtmCategory->getSplitCategoryArray(2, true)}]', 'item_category3': '[{$gtmCategory->getSplitCategoryArray(2, true)}]',
'item_category_4':'[{$gtmCategory->getSplitCategoryArray(3, true)}]', 'item_category4': '[{$gtmCategory->getSplitCategoryArray(3, true)}]',
'item_list_name':'[{$gtmCategory->getSplitCategoryArray()}]', 'item_list_name':'[{$gtmCategory->getSplitCategoryArray()}]',
[{/if}] [{/if}]
'quantity': 1 'quantity': 1
@ -41,4 +42,4 @@
[{/if}] [{/if}]
[{/block}] [{/block}]
[{include file='@d3googleanalytics4/event/add_to_cart.tpl' htmlIdAmountOfArticles='#amountToBasket'}] [{include file="event/add_to_cart.tpl" htmlIdAmountOfArticles='#amountToBasket'}]

Datei anzeigen

@ -8,7 +8,7 @@
<p class="alert alert-info">[{oxmultilang ident="WISH_LIST_EMPTY"}]</p> <p class="alert alert-info">[{oxmultilang ident="WISH_LIST_EMPTY"}]</p>
[{/if}] [{/if}]
[{include file='@d3googleanalytics4/event/add_to_cart.tpl' htmlIdAmountOfArticles='#amountToBasket'}] [{include file="event/add_to_cart.tpl" htmlIdAmountOfArticles='#amountToBasket'}]
[{insert name="oxid_tracker" title=$template_title}] [{insert name="oxid_tracker" title=$template_title}]
[{/capture}] [{/capture}]

Datei anzeigen

@ -21,7 +21,7 @@
[{/if}] [{/if}]
[{/block}] [{/block}]
[{include file='@d3googleanalytics4/event/add_to_cart.tpl' htmlIdAmountOfArticles='#amountToBasket'}] [{include file="event/add_to_cart.tpl" htmlIdAmountOfArticles='#amountToBasket'}]
[{insert name="oxid_tracker" title=$template_title}] [{insert name="oxid_tracker" title=$template_title}]
[{/capture}] [{/capture}]

Datei anzeigen

@ -34,7 +34,7 @@
</p> </p>
[{/if}] [{/if}]
[{include file='@d3googleanalytics4/event/add_to_cart.tpl' htmlIdAmountOfArticles='#amountToBasket'}] [{include file="event/add_to_cart.tpl" htmlIdAmountOfArticles='#amountToBasket'}]
[{insert name="oxid_tracker" title=$template_title}] [{insert name="oxid_tracker" title=$template_title}]
[{/capture}] [{/capture}]

Datei anzeigen

@ -4,17 +4,19 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [unreleased](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/3.0.0.1...rel_3.x) - 2025-x ## [unreleased](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.24.0.0...rel_2.x) - 2025-x
## [3.0.0.1](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/3.0.0.0...3.0.0.1) - 2024-03-19 ## [2.24.0.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.23.0.2...2.24.0.0) - 2025-06-12
### Fixed ### Fixed
- reset of cmp-selection - return payment-object instead of string
- over-engineered getter-methods - missing semicolon
- irritating admin-list module-group-name
## [3.0.0.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.22.0...3.0.0.0) - 2024-11-25
### Added ### Added
- installability OXID 7 - 'item_oxid' parameter
- don't submit item prices, if user doesn't have "show price" right - 'item_brand' parameter
- setting to use literal category-title
- setting to replace chars in item_category-parameter
- setting to list article-variants into parameter-array
## [2.23.0.2](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.23.0.1...2.23.0.2) - 2025-03-19 ## [2.23.0.2](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.23.0.1...2.23.0.2) - 2025-03-19
### Fixed ### Fixed

Datei anzeigen

@ -14,28 +14,18 @@
*/ */
namespace D3\GoogleAnalytics4\Modules\Core{ namespace D3\GoogleAnalytics4\Modules\Core{
class ViewConfig_parent extends \OxidEsales\Eshop\Core\ViewConfig class ViewConfig_parent extends \OxidEsales\Eshop\Core\ViewConfig{}
{
}
} }
namespace D3\GoogleAnalytics4\Modules\Application\Model{ namespace D3\GoogleAnalytics4\Modules\Application\Model{
use OxidEsales\Eshop\Application\Model\Payment; use OxidEsales\Eshop\Application\Model\Payment;
class Category_parent extends \OxidEsales\Eshop\Application\Model\Category class Category_parent extends \OxidEsales\Eshop\Application\Model\Category {}
{ class Basket_parent extends \OxidEsales\Eshop\Application\Model\Basket {}
} class Manufacturer_parent extends \OxidEsales\Eshop\Application\Model\Manufacturer {}
class Basket_parent extends \OxidEsales\Eshop\Application\Model\Basket
{
}
class Manufacturer_parent extends \OxidEsales\Eshop\Application\Model\Manufacturer
{
}
class gtmPayment_parent extends Payment class gtmPayment_parent extends Payment {}
{
}
} }
namespace D3\GoogleAnalytics4\Modules\Application\Controller{ namespace D3\GoogleAnalytics4\Modules\Application\Controller{
@ -48,60 +38,36 @@ namespace D3\GoogleAnalytics4\Modules\Application\Controller{
use OxidEsales\Eshop\Application\Controller\SearchController; use OxidEsales\Eshop\Application\Controller\SearchController;
use OxidEsales\Eshop\Application\Controller\StartController; use OxidEsales\Eshop\Application\Controller\StartController;
class BasketController_parent extends \OxidEsales\Eshop\Application\Controller\BasketController class BasketController_parent extends \OxidEsales\Eshop\Application\Controller\BasketController {}
{ class ThankYouController_parent extends \OxidEsales\Eshop\Application\Controller\ThankYouController {}
}
class ThankYouController_parent extends \OxidEsales\Eshop\Application\Controller\ThankYouController
{
}
class ArticleListController_AddToCartHelpMethods_parent extends ArticleListController class ArticleListController_AddToCartHelpMethods_parent extends ArticleListController {}
{
}
class ArticleDetailsController_parent extends \OxidEsales\Eshop\Application\Controller\ArticleDetailsController class ArticleDetailsController_parent extends \OxidEsales\Eshop\Application\Controller\ArticleDetailsController {}
{
}
class d3GtmAccountNoticeListController_parent extends AccountNoticeListController class d3GtmAccountNoticeListController_parent extends AccountNoticeListController {}
{
}
class d3GtmAccountRecommlistController_parent extends AccountRecommlistController class d3GtmAccountRecommlistController_parent extends AccountRecommlistController {}
{
}
class d3GtmAccountWishlistController_parent extends AccountWishlistController class d3GtmAccountWishlistController_parent extends AccountWishlistController {}
{
}
class d3GtmStartController_parent extends StartController class d3GtmStartController_parent extends StartController {}
{
}
class d3GtmSearchController_parent extends SearchController class d3GtmSearchController_parent extends SearchController {}
{
}
class d3GtmManufacturerListController_parent extends ManufacturerController class d3GtmManufacturerListController_parent extends ManufacturerController {}
{
}
} }
namespace D3\GoogleAnalytics4\Modules\Application\Component{ namespace D3\GoogleAnalytics4\Modules\Application\Component{
use OxidEsales\Eshop\Application\Component\BasketComponent; use OxidEsales\Eshop\Application\Component\BasketComponent;
class d3GtmBasketComponentExtension_parent extends BasketComponent class d3GtmBasketComponentExtension_parent extends BasketComponent {}
{
}
} }
namespace D3\GoogleAnalytics4\Modules\Application\Component\Widget{ namespace D3\GoogleAnalytics4\Modules\Application\Component\Widget{
use OxidEsales\Eshop\Application\Component\Widget\ArticleDetails; use OxidEsales\Eshop\Application\Component\Widget\ArticleDetails;
class d3GtmWidgetArticleDetails_parent extends ArticleDetails class d3GtmWidgetArticleDetails_parent extends ArticleDetails {}
{ }
}
}

Datei anzeigen

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace D3\GoogleAnalytics4\Modules\Application\Component\Widget; namespace D3\GoogleAnalytics4\Modules\Application\Component\Widget;
class d3GtmWidgetArticleDetails extends d3GtmWidgetArticleDetails_parent class d3GtmWidgetArticleDetails extends d3GtmWidgetArticleDetails_parent
{ {
public function render() public function render()
@ -14,4 +15,4 @@ class d3GtmWidgetArticleDetails extends d3GtmWidgetArticleDetails_parent
return $return; return $return;
} }
} }

Datei anzeigen

@ -24,9 +24,9 @@ class d3GtmBasketComponentExtension extends d3GtmBasketComponentExtension_parent
$iAmountArticlesAddedToCart = (int) Registry::getRequest()->getRequestEscapedParameter('am'); $iAmountArticlesAddedToCart = (int) Registry::getRequest()->getRequestEscapedParameter('am');
if ($iAmountArticlesAddedToCart) { if ($iAmountArticlesAddedToCart){
Registry::getSession()->setVariable('d3GtmAddToCartAmountArticles', $iAmountArticlesAddedToCart); Registry::getSession()->setVariable('d3GtmAddToCartAmountArticles', $iAmountArticlesAddedToCart);
} else { }else{
Registry::getSession()->setVariable('d3GtmAddToCartAmountArticles', 1); Registry::getSession()->setVariable('d3GtmAddToCartAmountArticles', 1);
} }
@ -36,7 +36,7 @@ class d3GtmBasketComponentExtension extends d3GtmBasketComponentExtension_parent
/** /**
* @return int * @return int
*/ */
public function getD3GtmAddToCartAmountArticles(): int public function getD3GtmAddToCartAmountArticles() :int
{ {
$iAmount = Registry::getSession()->getVariable('d3GtmAddToCartAmountArticles'); $iAmount = Registry::getSession()->getVariable('d3GtmAddToCartAmountArticles');
@ -48,7 +48,7 @@ class d3GtmBasketComponentExtension extends d3GtmBasketComponentExtension_parent
/** /**
* @return bool * @return bool
*/ */
public function getAddToBasketDecision(): bool public function getAddToBasketDecision() :bool
{ {
$decision = Registry::getSession()->getVariable('d3GtmAddToBasketTrigger'); $decision = Registry::getSession()->getVariable('d3GtmAddToBasketTrigger');
@ -66,7 +66,7 @@ class d3GtmBasketComponentExtension extends d3GtmBasketComponentExtension_parent
$oArticle = null; $oArticle = null;
if ($sAnid) { if ($sAnid){
/** @var Article $oArticle */ /** @var Article $oArticle */
$oArticle = oxNew(Article::class); $oArticle = oxNew(Article::class);
$oArticle->load($sAnid); $oArticle->load($sAnid);
@ -74,4 +74,4 @@ class d3GtmBasketComponentExtension extends d3GtmBasketComponentExtension_parent
return $oArticle; return $oArticle;
} }
} }

Datei anzeigen

@ -12,4 +12,4 @@ class ArticleDetailsController extends ArticleDetailsController_parent
return $return; return $return;
} }
} }

Datei anzeigen

@ -12,4 +12,4 @@ class ArticleListController_AddToCartHelpMethods extends ArticleListController_A
return $render; return $render;
} }
} }

Datei anzeigen

@ -26,7 +26,7 @@ class BasketController extends BasketController_parent
* @return void * @return void
* @throws oxSystemComponentException * @throws oxSystemComponentException
*/ */
public function d3GA4getRemovedArticlesListObject(): void public function d3GA4getRemovedArticlesListObject() :void
{ {
$this->addTplParam('hasBeenReloaded', false); $this->addTplParam('hasBeenReloaded', false);
// collecting items to add // collecting items to add
@ -52,7 +52,7 @@ class BasketController extends BasketController_parent
'am' => $dAmount, 'am' => $dAmount,
'sel' => $aSel, 'sel' => $aSel,
'persparam' => $aPersParam, 'persparam' => $aPersParam,
'basketitemid' => $sBasketItemId, 'basketitemid' => $sBasketItemId
]; ];
} }
@ -84,9 +84,9 @@ class BasketController extends BasketController_parent
#dumpVar($this->getBasketArticles()); #dumpVar($this->getBasketArticles());
/** @var Article $item */ /** @var Article $item */
foreach ($oArtList->getArray() as $item) { foreach ($oArtList->getArray() as $item){
foreach ($artIdOnArtAmountList as $artId => $artAmount) { foreach ($artIdOnArtAmountList as $artId => $artAmount){
if ($item->getId() === $artId) { if ($item->getId() === $artId){
$item->assign(['d3AmountThatGotRemoved' => $artAmount]); $item->assign(['d3AmountThatGotRemoved' => $artAmount]);
} }
} }
@ -104,13 +104,13 @@ class BasketController extends BasketController_parent
* if that doesn't work, we check if there's an Article in the Products array, that has "'am' = 0" * 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 * Which also shows we're in that state rn
*/ */
protected function isArticleRemovedState(array $productsArray): bool protected function isArticleRemovedState(array $productsArray) :bool
{ {
if (Registry::getRequest()->getRequestEscapedParameter('removeBtn') if (Registry::getRequest()->getRequestEscapedParameter('removeBtn')
or Registry::getRequest()->getRequestEscapedParameter('updateBtn') or Registry::getRequest()->getRequestEscapedParameter('updateBtn')
) { ){
return true; return true;
} else { }else{
foreach ($productsArray as $aProduct) { foreach ($productsArray as $aProduct) {
if (intval($aProduct['am']) === 0) { if (intval($aProduct['am']) === 0) {
return true; return true;

Datei anzeigen

@ -16,10 +16,10 @@ class ThankYouController extends ThankYouController_parent
$oOrder = $this->getOrder(); $oOrder = $this->getOrder();
$sCountryId = $oOrder->getFieldData('oxbillcountryid'); $sCountryId = $oOrder->getFieldData('oxbillcountryid');
/** @var Country::class $oCountry */ /** @var Country $oCountry */
$oCountry = oxNew(Country::class); $oCountry = oxNew(Country::class);
$oCountry->load($sCountryId); $oCountry->load($sCountryId);
return $oCountry; return $oCountry;
} }
} }

Datei anzeigen

@ -2,11 +2,9 @@
namespace D3\GoogleAnalytics4\Modules\Application\Controller; namespace D3\GoogleAnalytics4\Modules\Application\Controller;
use D3\GoogleAnalytics4\Application\Model\Constants;
class d3GtmAccountNoticeListController extends d3GtmAccountNoticeListController_parent class d3GtmAccountNoticeListController extends d3GtmAccountNoticeListController_parent
{ {
protected $_sThisTemplate = '@' . Constants::OXID_MODULE_ID . '/page/account/d3gtmnoticelist.tpl'; protected $_sThisTemplate = 'page/account/d3gtmnoticelist.tpl';
public function render() public function render()
{ {
@ -16,4 +14,4 @@ class d3GtmAccountNoticeListController extends d3GtmAccountNoticeListController_
return $return; return $return;
} }
} }

Datei anzeigen

@ -2,11 +2,9 @@
namespace D3\GoogleAnalytics4\Modules\Application\Controller; namespace D3\GoogleAnalytics4\Modules\Application\Controller;
use D3\GoogleAnalytics4\Application\Model\Constants;
class d3GtmAccountRecommlistController extends d3GtmAccountRecommlistController_parent class d3GtmAccountRecommlistController extends d3GtmAccountRecommlistController_parent
{ {
protected $_sThisTemplate = '@' . Constants::OXID_MODULE_ID . '/page/account/d3gtmrecommendationlist.tpl'; protected $_sThisTemplate = 'page/account/d3gtmrecommendationlist.tpl';
public function render() public function render()
{ {
@ -16,4 +14,4 @@ class d3GtmAccountRecommlistController extends d3GtmAccountRecommlistController_
return $return; return $return;
} }
} }

Datei anzeigen

@ -2,11 +2,9 @@
namespace D3\GoogleAnalytics4\Modules\Application\Controller; namespace D3\GoogleAnalytics4\Modules\Application\Controller;
use D3\GoogleAnalytics4\Application\Model\Constants;
class d3GtmAccountWishlistController extends d3GtmAccountWishlistController_parent class d3GtmAccountWishlistController extends d3GtmAccountWishlistController_parent
{ {
protected $_sThisTemplate = '@' . Constants::OXID_MODULE_ID . '/page/account/d3gtmwishlist.tpl'; protected $_sThisTemplate = 'page/account/d3gtmwishlist.tpl';
public function render() public function render()
{ {
@ -16,4 +14,4 @@ class d3GtmAccountWishlistController extends d3GtmAccountWishlistController_pare
return $return; return $return;
} }
} }

Datei anzeigen

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace D3\GoogleAnalytics4\Modules\Application\Controller; namespace D3\GoogleAnalytics4\Modules\Application\Controller;
class d3GtmManufacturerListController extends d3GtmManufacturerListController_parent class d3GtmManufacturerListController extends d3GtmManufacturerListController_parent
{ {
public function render() public function render()
@ -14,4 +15,4 @@ class d3GtmManufacturerListController extends d3GtmManufacturerListController_pa
return $return; return $return;
} }
} }

Datei anzeigen

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace D3\GoogleAnalytics4\Modules\Application\Controller; namespace D3\GoogleAnalytics4\Modules\Application\Controller;
class d3GtmSearchController extends d3GtmSearchController_parent class d3GtmSearchController extends d3GtmSearchController_parent
{ {
/** /**
@ -13,10 +14,10 @@ class d3GtmSearchController extends d3GtmSearchController_parent
{ {
$return = parent::render(); $return = parent::render();
if (false === in_array('oxcmp_basket', $this->getComponents())) { if (false === in_array('oxcmp_basket', $this->getComponents())){
$this->addTplParam('d3CmpBasket', $this->getComponent('oxcmp_basket')); $this->addTplParam('d3CmpBasket', $this->getComponent('oxcmp_basket'));
} }
return $return; return $return;
} }
} }

Datei anzeigen

@ -10,10 +10,10 @@ class d3GtmStartController extends d3GtmStartController_parent
{ {
$return = parent::render(); $return = parent::render();
if (false === in_array('oxcmp_basket', $this->getComponents())) { if (false === in_array('oxcmp_basket', $this->getComponents())){
$this->addTplParam('d3CmpBasket', $this->getComponent('oxcmp_basket')); $this->addTplParam('d3CmpBasket', $this->getComponent('oxcmp_basket'));
} }
return $return; return $return;
} }
} }

Datei anzeigen

@ -9,15 +9,15 @@ class Basket extends Basket_parent
/** /**
* @return string * @return string
*/ */
public function getPaymentOnPaymentId(): string public function getPaymentOnPaymentId() :string
{ {
if ($this->getPaymentId()) { if ($this->getPaymentId()){
$oPayment = oxNew(Payment::class); $oPayment = oxNew(Payment::class);
if ($oPayment->load($this->getPaymentId())) { if ($oPayment->load($this->getPaymentId())){
return $oPayment->getFieldData('oxdesc'); return $oPayment->getFieldData('oxdesc');
} }
} }
return "couldn't load payment!"; return "couldn't load payment!";
} }
} }

Datei anzeigen

@ -5,4 +5,4 @@ namespace D3\GoogleAnalytics4\Modules\Application\Model;
class Category extends Category_parent class Category extends Category_parent
{ {
use articleTreeStructure; use articleTreeStructure;
} }

Datei anzeigen

@ -5,4 +5,4 @@ namespace D3\GoogleAnalytics4\Modules\Application\Model;
class Manufacturer extends Manufacturer_parent class Manufacturer extends Manufacturer_parent
{ {
use articleTreeStructure; use articleTreeStructure;
} }

Datei anzeigen

@ -4,7 +4,8 @@ declare(strict_types=1);
namespace D3\GoogleAnalytics4\Modules\Application\Model; namespace D3\GoogleAnalytics4\Modules\Application\Model;
class Vendor extends \OxidEsales\Eshop\Application\Model\Vendor class Vendor extends \OxidEsales\Eshop\Application\Model\Vendor
{ {
use articleTreeStructure; use articleTreeStructure;
} }

Datei anzeigen

@ -2,16 +2,60 @@
namespace D3\GoogleAnalytics4\Modules\Application\Model; namespace D3\GoogleAnalytics4\Modules\Application\Model;
use OxidEsales\Eshop\Core\Registry;
use OxidEsales\Eshop\Core\ViewConfig;
trait articleTreeStructure trait articleTreeStructure
{ {
/**
* Get all parent category titles, starting from the base category.
*
* @return array
*/
protected function getParentCategoryTitles() :array
{
$parentTitles[] = $this->getTitle();
// we may be in Manufacturer, Vendor, etc.
if (method_exists($this, 'getParentCategory')) {
$parent = $this->getParentCategory();
while ($parent != null) {
$parentTitles[] = $parent->getTitle();
$parent = $parent->getParentCategory();
}
}
return array_reverse(array_map([$this, 'cleanUpTitle'], $parentTitles));
}
/**
* Cleanup title, decode entities, remove some chars and trim
*
* @param string $title
* @return string
*/
public function cleanUpTitle($title) :string
{
// remove unwanted characters, e.g. Zoll "
$charsToReplace = Registry::get(ViewConfig::class)->getCharsToReplaceInCategorTitles();
if (empty($charsToReplace)){
return $title;
}
// decode encoded characters
$title = html_entity_decode($title, ENT_QUOTES);
$title = preg_replace('/[' . $charsToReplace . ']/', '', $title);
// trim whitespace from both ends of the string
$title = trim($title);
return $title;
}
/** /**
* @param int $indexOfArray * @param int $indexOfArray
* @return string * @return string
*/ */
public function getSplitCategoryArray(int $indexOfArray = -1, bool $bShallTakeStd = false): string public function getSplitCategoryArray(int $indexOfArray = -1, bool $bShallTakeStd = false) :string
{ {
if ($bShallTakeStd) { if ($bShallTakeStd){
$splitCatArray = $bUseRealCatTitles = (bool)Registry::get(ViewConfig::class)->d3GetModuleConfigParam('_blUseRealCategoyTitles');
$splitCatArray = $bUseRealCatTitles ? $this->getParentCategoryTitles() :
array_values( array_values(
array_filter( array_filter(
explode( explode(
@ -26,9 +70,9 @@ trait articleTreeStructure
) )
); );
if (($indexOfArray >= 0) and (false === empty($splitCatArray[$indexOfArray]))) { if (($indexOfArray >= 0) and (false === empty($splitCatArray[$indexOfArray]))){
return $splitCatArray[$indexOfArray]; return $splitCatArray[$indexOfArray];
} else { }else{
return ""; return "";
} }
} }
@ -41,4 +85,4 @@ trait articleTreeStructure
) )
); );
} }
} }

Datei anzeigen

@ -4,16 +4,13 @@ declare(strict_types=1);
namespace D3\GoogleAnalytics4\Modules\Application\Model; namespace D3\GoogleAnalytics4\Modules\Application\Model;
use OxidEsales\Eshop\Application\Model\Payment;
use OxidEsales\Eshop\Core\Registry;
class gtmPayment extends gtmPayment_parent class gtmPayment extends gtmPayment_parent
{ {
/** /**
* @return string * @return string
*/ */
public function gtmGetSelectedPaymentName(): string public function gtmGetSelectedPaymentName() :string
{ {
return $this->getFieldData('oxpayments__oxdesc') ?: 'No payment name available'; return (string)$this->getFieldData('oxpayments__oxdesc')?: 'No payment name available';
} }
} }

Datei anzeigen

@ -1,5 +1,4 @@
<?php <?php
/** /**
* For the full copyright and license information, please view the LICENSE * For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code. * file that was distributed with this source code.
@ -19,16 +18,15 @@ use D3\GoogleAnalytics4\Application\Model\ManagerHandler;
use D3\GoogleAnalytics4\Application\Model\ManagerTypes; use D3\GoogleAnalytics4\Application\Model\ManagerTypes;
use OxidEsales\Eshop\Application\Controller\FrontendController; use OxidEsales\Eshop\Application\Controller\FrontendController;
use OxidEsales\Eshop\Core\Config; use OxidEsales\Eshop\Core\Config;
use OxidEsales\Eshop\Application\Model\User; use OxidEsales\Eshop\Application\Model\User;use OxidEsales\Eshop\Core\Registry;
use OxidEsales\Eshop\Core\Registry;
use OxidEsales\EshopCommunity\Internal\Container\ContainerFactory; use OxidEsales\EshopCommunity\Internal\Container\ContainerFactory;
use OxidEsales\EshopCommunity\Internal\Framework\Module\Configuration\Exception\ModuleConfigurationNotFoundException; use OxidEsales\EshopCommunity\Internal\Framework\Module\Configuration\Bridge\ModuleSettingBridgeInterface;
use OxidEsales\EshopCommunity\Internal\Framework\Module\Setup\Bridge\ModuleActivationBridgeInterface;
use Psr\Container\ContainerExceptionInterface; use Psr\Container\ContainerExceptionInterface;
use Psr\Container\NotFoundExceptionInterface; use Psr\Container\NotFoundExceptionInterface;
class ViewConfig extends ViewConfig_parent class ViewConfig extends ViewConfig_parent
{ {
// Google Tag Manager Container ID // Google Tag Manager Container ID
private $sContainerId = null; private $sContainerId = null;
@ -40,7 +38,8 @@ class ViewConfig extends ViewConfig_parent
public function getGtmContainerId() public function getGtmContainerId()
{ {
if ($this->sContainerId === null) { if ($this->sContainerId === null)
{
$this->sContainerId = $this->d3GetModuleConfigParam("_sContainerID"); $this->sContainerId = $this->d3GetModuleConfigParam("_sContainerID");
} }
return $this->sContainerId; return $this->sContainerId;
@ -49,9 +48,10 @@ class ViewConfig extends ViewConfig_parent
/** /**
* @return void * @return void
*/ */
public function defineCookieManagerType(): void public function defineCookieManagerType() :void
{ {
if ($this->sCookieManagerType === null) { if ($this->sCookieManagerType === null)
{
/** @var ManagerHandler $oManagerHandler */ /** @var ManagerHandler $oManagerHandler */
$oManagerHandler = oxNew(ManagerHandler::class); $oManagerHandler = oxNew(ManagerHandler::class);
$this->sCookieManagerType = $oManagerHandler->getActManager(); $this->sCookieManagerType = $oManagerHandler->getActManager();
@ -61,11 +61,19 @@ class ViewConfig extends ViewConfig_parent
/** /**
* @return bool * @return bool
*/ */
public function shallUseOwnCookieManager(): bool public function shallUseOwnCookieManager() :bool
{ {
return (bool) $this->d3GetModuleConfigParam('_blEnableOwnCookieManager'); return (bool) $this->d3GetModuleConfigParam('_blEnableOwnCookieManager');
} }
/**
* @return string
*/
public function getCharsToReplaceInCategorTitles(): string
{
return (string) $this->d3GetModuleConfigParam('_sReplaceChars');
}
/** /**
* @return bool * @return bool
*/ */
@ -74,7 +82,7 @@ class ViewConfig extends ViewConfig_parent
/** @var Config $oConfig */ /** @var Config $oConfig */
$oConfig = Registry::getConfig(); $oConfig = Registry::getConfig();
if (false === $this->isGA4enabled()) { if (false === $this->isGA4enabled()){
return false; return false;
} }
@ -101,13 +109,15 @@ class ViewConfig extends ViewConfig_parent
return $this->isCookieCategoryEnabled($sCookieID); return $this->isCookieCategoryEnabled($sCookieID);
} }
} }
if ( if (
in_array( in_array
$this->sCookieManagerType, (
(oxNew(ManagerTypes::class)->scriptTagDeliveredByDefaultArray()) $this->sCookieManagerType,
) (oxNew(ManagerTypes::class)->scriptTagDeliveredByDefaultArray())
) { )
)
{
// Always needs the script-tags delivered to the DOM. // Always needs the script-tags delivered to the DOM.
return true; return true;
} }
@ -121,30 +131,32 @@ class ViewConfig extends ViewConfig_parent
* This is especially important for UserCentrics. * This is especially important for UserCentrics.
* @return string * @return string
*/ */
public function getGtmScriptAttributes(): string public function getGtmScriptAttributes() :string
{ {
$sControlParameter = trim($this->d3GetModuleConfigParam('_sControlParameter')); $sControlParameter = trim($this->d3GetModuleConfigParam('_sControlParameter'));
if (false === $this->shallUseOwnCookieManager() or ($sControlParameter === '')) { if (false === $this->shallUseOwnCookieManager() or ($sControlParameter === '')){
return ""; return "";
} }
if ( if (
$this->sCookieManagerType === Usercentrics::sModuleIncludationInternalName $this->sCookieManagerType === Usercentrics::sModuleIncludationInternalName
or $this->sCookieManagerType === Usercentrics::sExternalIncludationInternalName or $this->sCookieManagerType === Usercentrics::sExternalIncludationInternalName
) { )
{
return 'data-usercentrics="' . $sControlParameter . '" type="text/plain" async=""'; return 'data-usercentrics="' . $sControlParameter . '" type="text/plain" async=""';
} }
if ($this->sCookieManagerType === ManagerTypes::INTERNAL_CONSENTMANAGER) { if ($this->sCookieManagerType === ManagerTypes::INTERNAL_CONSENTMANAGER)
{
return 'type="text/plain" class="cmplazyload" data-cmp-vendor="'.$sControlParameter.'"'; return 'type="text/plain" class="cmplazyload" data-cmp-vendor="'.$sControlParameter.'"';
} }
if ($this->sCookieManagerType === ManagerTypes::INTERNAL_COOKIEFIRST) { if ($this->sCookieManagerType === ManagerTypes::INTERNAL_COOKIEFIRST){
return 'type="text/plain" data-cookiefirst-category="' . $sControlParameter .'"'; return 'type="text/plain" data-cookiefirst-category="' . $sControlParameter .'"';
} }
if ($this->sCookieManagerType === ManagerTypes::INTERNAL_COOKIEBOT) { if ($this->sCookieManagerType === ManagerTypes::INTERNAL_COOKIEBOT){
return 'type="text/plain" data-cookieconsent="' . $sControlParameter .'"'; return 'type="text/plain" data-cookieconsent="' . $sControlParameter .'"';
} }
@ -157,23 +169,22 @@ class ViewConfig extends ViewConfig_parent
*/ */
public function isGA4enabled() public function isGA4enabled()
{ {
if ($this->blGA4enabled === null) { if ($this->blGA4enabled === null)
{
$this->blGA4enabled = $this->d3GetModuleConfigParam("_blEnableGA4"); $this->blGA4enabled = $this->d3GetModuleConfigParam("_blEnableGA4");
} }
return $this->blGA4enabled; return $this->blGA4enabled;
} }
public function isGtmConsentModeSetActivated(): bool public function isGtmConsentModeSetActivated() :bool
{ {
return $this->d3GetModuleConfigParam("_blEnableConsentMode") ?: false; return $this->d3GetModuleConfigParam("_blEnableConsentMode")?: false;
} }
public function getGtmDataLayer() public function getGtmDataLayer()
{ {
if (!$this->getGtmContainerId()) { if (!$this->getGtmContainerId()) return "[]";
return "[]";
}
$oConfig = Registry::getConfig(); $oConfig = Registry::getConfig();
$oView = $oConfig->getTopActiveView(); $oView = $oConfig->getTopActiveView();
@ -204,13 +215,48 @@ class ViewConfig extends ViewConfig_parent
'sessionid' => session_id(), 'sessionid' => session_id(),
//'httpref' => $_SERVER["HTTP_REFERER"] ?? "unknown" //'httpref' => $_SERVER["HTTP_REFERER"] ?? "unknown"
]; ];
$dataLayer = $this->d3AdditionalGlobalAnalyticsVariables($dataLayer);
return json_encode([$dataLayer], JSON_PRETTY_PRINT); return json_encode([$dataLayer], JSON_PRETTY_PRINT);
} }
/**
* @param array $dataLayerGlobals
* @return array
*/
public function d3AdditionalGlobalAnalyticsVariables(array $dataLayerGlobals) :array
{
/** @var User $oUser */
$oUser = Registry::getSession()->getUser();
if ($oUser and $oUser->getFieldData('OXUSERNAME')){
$sUsername = $oUser->getFieldData('OXUSERNAME') ?: "";
$iCustNr = $oUser->getFieldData('OXCUSTNR') ?: "";
$iZipCode = $oUser->getFieldData('OXZIP') ?: "";
return array_merge($dataLayerGlobals, [
'custnr' => $iCustNr,
'email' => $sUsername,
'zipcode' => $iZipCode
]);
}
return $dataLayerGlobals;
}
public function isDebugModeOn(): bool /**
* @return bool
*/
public function isDebugModeOn() :bool
{ {
return $this->d3GetModuleConfigParam("_blEnableDebug") ?: false; return $this->d3GetModuleConfigParam("_blEnableDebug")?: false;
}
/**
* @return bool
*/
public function useRealCategoryTitles(): bool
{
return $this->d3GetModuleConfigParam("_blUseRealCategoyTitles") ?: false;
} }
/** /**
@ -218,9 +264,9 @@ class ViewConfig extends ViewConfig_parent
* @throws ContainerExceptionInterface * @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface * @throws NotFoundExceptionInterface
*/ */
public function getServerSidetaggingJsDomain(): string public function getServerSidetaggingJsDomain() :string
{ {
return $this->d3GetModuleConfigParam("_sServersidetagging_js") ?: ""; return $this->d3GetModuleConfigParam("_sServersidetagging_js")?: "";
} }
/** /**
@ -228,9 +274,9 @@ class ViewConfig extends ViewConfig_parent
* @throws ContainerExceptionInterface * @throws ContainerExceptionInterface
* @throws NotFoundExceptionInterface * @throws NotFoundExceptionInterface
*/ */
public function getServerSidetaggingNoJsDomain(): string public function getServerSidetaggingNoJsDomain() :string
{ {
return $this->d3GetModuleConfigParam('_sServersidetagging_nojs') ?: ""; return $this->d3GetModuleConfigParam('_sServersidetagging_nojs')?: "";
} }
/** /**
@ -245,7 +291,7 @@ class ViewConfig extends ViewConfig_parent
/** /**
* @return bool * @return bool
*/ */
public function d3IsUsercentricsCMPChosen(): bool public function d3IsUsercentricsCMPChosen() :bool
{ {
$sCMPPubName = $this->d3GetModuleConfigParam('_HAS_STD_MANAGER'); $sCMPPubName = $this->d3GetModuleConfigParam('_HAS_STD_MANAGER');
$aPossibleCMP = (oxNew(ManagerTypes::class))->getManagerList(); $aPossibleCMP = (oxNew(ManagerTypes::class))->getManagerList();
@ -253,26 +299,4 @@ class ViewConfig extends ViewConfig_parent
return (bool) ($sCMPPubName === Usercentrics::sExternalIncludationInternalName return (bool) ($sCMPPubName === Usercentrics::sExternalIncludationInternalName
or $sCMPPubName === Usercentrics::sModuleIncludationInternalName); or $sCMPPubName === Usercentrics::sModuleIncludationInternalName);
} }
}
/**
* @return bool
*/
public function d3IsModuleActive(string $sModuleId): bool
{
/** @var ModuleActivationBridgeInterface $moduleActivationBridge */
$moduleActivationBridge = $this
->getContainer()
->get(ModuleActivationBridgeInterface::class);
try {
$isActiveBool = $moduleActivationBridge->isActive(
$sModuleId,
Registry::getConfig()->getShopId()
);
} catch (\Exception|ModuleConfigurationNotFoundException $e) {
return false;
}
return (bool) $isActiveBool;
}
}

Datei anzeigen

@ -4,8 +4,7 @@ namespace D3\GoogleAnalytics4\Modules\Core;
use OxidEsales\EshopCommunity\Core\Registry; use OxidEsales\EshopCommunity\Core\Registry;
class WidgetControl extends WidgetControl_parent class WidgetControl extends WidgetControl_parent{
{
protected function getFrontendStartControllerKey() // phpcs:ignore PSR2.Methods.MethodDeclaration.Underscore protected function getFrontendStartControllerKey() // phpcs:ignore PSR2.Methods.MethodDeclaration.Underscore
{ {
/* /*
@ -28,15 +27,17 @@ class WidgetControl extends WidgetControl_parent
) )
*/ */
$sScriptName = $_SERVER['SCRIPT_NAME']; $sScriptName = $_SERVER['SCRIPT_NAME'];
if ($sScriptName !== '/widget.php') { if($sScriptName !== '/widget.php')
{
return parent::getFrontendStartControllerKey(); return parent::getFrontendStartControllerKey();
} }
$aParameter = $_GET; $aParameter = $_GET;
if (is_null($aParameter['actcontrol']) and is_null($aParameter['oxwparent'])) { if(is_null($aParameter['actcontrol']) and is_null($aParameter['oxwparent']))
{
return 'D3\GoogleAnalytics4\Application\Component\Widget\d3GtmStartWidget'; return 'D3\GoogleAnalytics4\Application\Component\Widget\d3GtmStartWidget';
} }
return parent::getFrontendStartControllerKey(); return parent::getFrontendStartControllerKey();
} }
} }

Datei anzeigen

@ -23,21 +23,11 @@ Dieses Paket erfordert einen mit Composer installierten OXID eShop in einer in d
Öffnen Sie eine Kommandozeile und navigieren Sie zum Stammverzeichnis des Shops (Elternverzeichnis von source und vendor). Führen Sie den folgenden Befehl aus. Passen Sie die Pfadangaben an Ihre Installationsumgebung an. Öffnen Sie eine Kommandozeile und navigieren Sie zum Stammverzeichnis des Shops (Elternverzeichnis von source und vendor). Führen Sie den folgenden Befehl aus. Passen Sie die Pfadangaben an Ihre Installationsumgebung an.
```bash ```bash
php composer require d3/google-analytics4:^3 php composer require d3/google-analytics4:^2
``` ```
Sofern nötig, bestätigen Sie bitte, dass Sie `package-name` erlauben, Code auszuführen. Sofern nötig, bestätigen Sie bitte, dass Sie `package-name` erlauben, Code auszuführen.
```bash
./vendor/bin/oe-console oe:module:deactivate d3googleanalytics4
./vendor/bin/oe-console oe:module:install ./vendor/d3/google-analytics4/
./vendor/bin/oe-console oe:module:activate d3googleanalytics4
./vendor/bin/oe-eshop-db_views_generate
```
Leeren Sie anschließend den Temp Ordner des Shops.
Aktivieren Sie das Modul im Shopadmin unter "Erweiterungen -> Module". Aktivieren Sie das Modul im Shopadmin unter "Erweiterungen -> Module".
### Wichtig! ### Wichtig!

Datei anzeigen

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace D3\GoogleAnalytics4\Setup; namespace D3\GoogleAnalytics4\Setup;
use D3\GoogleAnalytics4\Application\Model\Constants; use D3\GoogleAnalytics4\Application\Model\Constants;
use OxidEsales\Eshop\Core\Registry; use OxidEsales\Eshop\Core\Registry;
use OxidEsales\Eshop\Core\ViewConfig; use OxidEsales\Eshop\Core\ViewConfig;
@ -16,11 +17,10 @@ class Actions
* @param string $sSettingValue * @param string $sSettingValue
* @return void * @return void
*/ */
public function d3SaveDefaultSettings(string $sVarType, string $sSettingName, string $sSettingValue) public function d3SaveDefaultSettings(string $sVarType, string $sSettingName, string $sSettingValue){
{
$oConfig = Registry::getConfig(); $oConfig = Registry::getConfig();
if ($this->d3GetModuleConfigParam($sSettingName) and (trim($this->d3GetModuleConfigParam($sSettingName)) !== trim($sSettingValue))) { if ($this->d3GetModuleConfigParam($sSettingName) and (trim($this->d3GetModuleConfigParam($sSettingName)) !== trim($sSettingValue))){
$sSettingValue = trim($this->d3GetModuleConfigParam($sSettingName)); $sSettingValue = trim($this->d3GetModuleConfigParam($sSettingName));
} }
@ -41,4 +41,4 @@ class Actions
{ {
return Registry::getConfig()->getShopConfVar(Constants::OXID_MODULE_ID.$configParamName, null, Constants::OXID_MODULE_ID); return Registry::getConfig()->getShopConfVar(Constants::OXID_MODULE_ID.$configParamName, null, Constants::OXID_MODULE_ID);
} }
} }

Datei anzeigen

@ -4,6 +4,7 @@ declare(strict_types=1);
namespace D3\GoogleAnalytics4\Setup; namespace D3\GoogleAnalytics4\Setup;
class Events class Events
{ {
/** /**
@ -32,7 +33,5 @@ class Events
/** /**
* @return void * @return void
*/ */
public static function onDeactivate() public static function onDeactivate(){}
{ }
}
}

Datei anzeigen

@ -1,52 +1,62 @@
{ {
"name": "d3/google-analytics4", "name": "d3/google-analytics4",
"description": "Google Tag Manager with new Google Analytics 4 for OXID eShop v6", "description": "Google Tag Manager with new Google Analytics 4 for OXID eShop v6",
"type": "oxideshop-module", "type": "oxideshop-module",
"keywords": [ "keywords": [
"oxid", "oxid",
"modules", "modules",
"eShop", "eShop",
"d3", "d3",
"google", "google",
"ga4", "ga4",
"googleanalytics", "googleanalytics",
"gtm", "gtm",
"configuration" "configuration"
], ],
"homepage": "https://www.d3data.de", "homepage": "https://www.d3data.de",
"license": [ "license": [
"GPL-3.0" "GPL-3.0"
], ],
"authors": [ "authors": [
{ {
"name": "Marat Bedoev", "name": "Marat Bedoev",
"email": "hello@mb-dev.pro" "email": "hello@mb-dev.pro"
}, },
{ {
"name": "D3 Data Development (Inh. Thomas Dartsch)", "name": "D3 Data Development (Inh. Thomas Dartsch)",
"email": "info@shopmodule.com", "email": "info@shopmodule.com",
"homepage": "https://www.d3data.de" "homepage": "https://www.d3data.de"
} }
], ],
"supports": { "support": {
"email": "support@shopmodule.com" "email": "support@shopmodule.com"
}, },
"require": { "extra": {
"php": "^8.0", "oxideshop": {
"oxid-esales/oxideshop-ce": "7.0 - 7.2", "blacklist-filter": [
"google/apiclient":" ^2.0", "*.md",
"phpstan/phpstan": "^1.10" "composer.json",
}, ".php-cs-fixer.php",
"require-dev": { "*.neon"
"friendsofphp/php-cs-fixer": "^3.9" ],
}, "target-directory": "d3/googleanalytics4"
"autoload": { }
"psr-4": { },
"D3\\GoogleAnalytics4\\": "" "require": {
} "php": "7.1 - 8.2",
}, "oxid-esales/oxideshop-ce": "^6.5.3",
"scripts": { "google/apiclient":" ^2.0"
"php-cs-fixer_audit": "./vendor/bin/php-cs-fixer list-files --config=./vendor/d3/google-analytics4/.php-cs-fixer.php", },
"php-cs-fixer_fix": "./vendor/bin/php-cs-fixer fix --config=./vendor/d3/google-analytics4/.php-cs-fixer.php" "require-dev": {
} "phpstan/phpstan": "^1.10"
},
"autoload": {
"psr-4": {
"D3\\GoogleAnalytics4\\": "../../../source/modules/d3/googleanalytics4"
}
},
"scripts": {
"php-cs-fixer_audit": "./vendor/bin/php-cs-fixer list-files --config=./vendor/d3/googleanalytics4/.php-cs-fixer.php",
"php-cs-fixer_fix": "./vendor/bin/php-cs-fixer fix --config=./vendor/d3/googleanalytics4/.php-cs-fixer.php"
}
} }

Datei anzeigen

@ -52,12 +52,12 @@ $aModule = [
Die Entwicklung basiert auf einem Fork von Marat Bedoev - <a href='https://github.com/vanilla-thunder/oxid-module-gtm'>Github-Link</a> Die Entwicklung basiert auf einem Fork von Marat Bedoev - <a href='https://github.com/vanilla-thunder/oxid-module-gtm'>Github-Link</a>
", ",
'thumbnail' => 'thumbnail.png', 'thumbnail' => 'thumbnail.png',
'version' => '3.0.0.1', 'version' => '2.24.0.0',
'author' => 'Data Development (Inh.: Thomas Dartsch)', 'author' => 'Data Development (Inh.: Thomas Dartsch)',
'email' => 'support@shopmodule.com', 'email' => 'support@shopmodule.com',
'url' => 'https://www.oxidmodule.com/', 'url' => 'https://www.oxidmodule.com/',
'controllers' => [ 'controllers' => [
'd3googleanalytics4_main' => GA4AdminUserInterfaceMainController::class, 'd3googleanalytics4_main' => GA4AdminUserInterfaceMainController::class
], ],
'extend' => [ 'extend' => [
// Core // Core
@ -88,109 +88,106 @@ $aModule = [
], ],
'templates' => [ 'templates' => [
// Event files that store the GA4 Event-Information // Event files that store the GA4 Event-Information
'@' . Constants::OXID_MODULE_ID . '/event/add_to_cart.tpl' => 'views/smarty/event/add_to_cart.tpl', 'event/add_to_cart.tpl' => 'd3/googleanalytics4/Application/views/event/add_to_cart.tpl',
'@' . Constants::OXID_MODULE_ID . '/event/view_item.tpl' => 'views/smarty/event/view_item.tpl', 'event/view_item.tpl' => 'd3/googleanalytics4/Application/views/event/view_item.tpl',
'@' . Constants::OXID_MODULE_ID . '/event/view_cart.tpl' => 'views/smarty/event/view_cart.tpl', 'event/view_cart.tpl' => 'd3/googleanalytics4/Application/views/event/view_cart.tpl',
'@' . Constants::OXID_MODULE_ID . '/event/begin_checkout.tpl' => 'views/smarty/event/begin_checkout.tpl', 'event/begin_checkout.tpl' => 'd3/googleanalytics4/Application/views/event/begin_checkout.tpl',
'@' . Constants::OXID_MODULE_ID . '/event/add_payment_info.tpl' => 'views/smarty/event/add_payment_info.tpl', 'event/add_payment_info.tpl' => 'd3/googleanalytics4/Application/views/event/add_payment_info.tpl',
'@' . Constants::OXID_MODULE_ID . '/event/purchase.tpl' => 'views/smarty/event/purchase.tpl', 'event/purchase.tpl' => 'd3/googleanalytics4/Application/views/event/purchase.tpl',
'@' . Constants::OXID_MODULE_ID . '/event/view_item_list.tpl' => 'views/smarty/event/view_item_list.tpl', 'event/view_item_list.tpl' => 'd3/googleanalytics4/Application/views/event/view_item_list.tpl',
'@' . Constants::OXID_MODULE_ID . '/event/view_search_result.tpl' => 'views/smarty/event/view_search_result.tpl', 'event/view_search_result.tpl' => 'd3/googleanalytics4/Application/views/event/view_search_result.tpl',
'@' . Constants::OXID_MODULE_ID . '/event/remove_from_cart.tpl' => 'views/smarty/event/remove_from_cart.tpl', 'event/remove_from_cart.tpl' => 'd3/googleanalytics4/Application/views/event/remove_from_cart.tpl',
// complete overwritten file of OXID-Originals // complete overwritten file of OXID-Originals
// the path of the template-name is the original path to the file in OXID-context from tpl/-> // the path of the template-name is the original path to the file in OXID-context from tpl/->
'@' . Constants::OXID_MODULE_ID . '/page/account/d3gtmnoticelist.tpl' => 'views/smarty/page/account/d3gtmnoticelist.tpl', 'page/account/d3gtmnoticelist.tpl' => 'd3/googleanalytics4/Application/views/tpl/page/account/d3gtmnoticelist.tpl',
'@' . Constants::OXID_MODULE_ID . '/page/account/d3gtmrecommendationlist.tpl' => 'views/smarty/page/account/d3gtmrecommendationlist.tpl', 'page/account/d3gtmrecommendationlist.tpl' => 'd3/googleanalytics4/Application/views/tpl/page/account/d3gtmrecommendationlist.tpl',
'@' . Constants::OXID_MODULE_ID . '/page/account/d3gtmwishlist.tpl' => 'views/smarty/page/account/d3gtmwishlist.tpl', 'page/account/d3gtmwishlist.tpl' => 'd3/googleanalytics4/Application/views/tpl/page/account/d3gtmwishlist.tpl',
// Admin Templates // Admin Templates
'@' . Constants::OXID_MODULE_ID . '/admin/d3ga4uimain.tpl' => 'views/smarty/admin/d3googleanalytics4_main.tpl', 'ga4/admin/d3ga4uimain.tpl' => 'd3/googleanalytics4/Application/views/admin/tpl/d3googleanalytics4_main.tpl',
'@' . Constants::OXID_MODULE_ID . '/admin/d3ga4uiheaditem.tpl' => 'views/smarty/admin/d3googleanalytics4_headitem.tpl', 'ga4/admin/d3ga4uiheaditem.tpl' => 'd3/googleanalytics4/Application/views/admin/tpl/d3googleanalytics4_headitem.tpl',
], ],
'blocks' => [ 'blocks' => [
// tag manager js // tag manager js
[ [
'template' => 'layout/base.tpl', 'template' => 'layout/base.tpl',
'block' => 'head_meta_robots', 'block' => 'head_meta_robots',
'file' => 'views/smarty/blocks/_gtm_js.tpl', 'file' => '/Application/views/blocks/_gtm_js.tpl',
'position' => 150, 'position' => 150
], ],
// tag manager nojs // tag manager nojs
[ [
'template' => 'layout/base.tpl', 'template' => 'layout/base.tpl',
'block' => 'theme_svg_icons', 'block' => 'theme_svg_icons',
'file' => 'views/smarty/blocks/_gtm_nojs.tpl', 'file' => '/Application/views/blocks/_gtm_nojs.tpl'
'position' => 150,
], ],
// details // details
[ [
'template' => 'page/details/inc/productmain.tpl', 'template' => 'page/details/inc/productmain.tpl',
'block' => 'details_productmain_title', 'block' => 'details_productmain_title',
'file' => 'views/smarty/blocks/view_item.tpl', 'file' => '/Application/views/blocks/view_item.tpl',
'position' => 150, 'position' => 150
], ],
// View Cart // View Cart
[ [
'template' => 'page/checkout/basket.tpl', 'template' => 'page/checkout/basket.tpl',
'block' => 'checkout_basket_main', 'block' => 'checkout_basket_main',
'file' => 'views/smarty/blocks/view_cart.tpl', 'file' => '/Application/views/blocks/view_cart.tpl'
'position' => 150,
], ],
// add_to_cart // add_to_cart
[ [
'template' => 'page/details/inc/productmain.tpl', 'template' => 'page/details/inc/productmain.tpl',
'block' => 'details_productmain_tobasket', 'block' => 'details_productmain_tobasket',
'file' => 'views/smarty/blocks/details_productmain_tobasket.tpl', 'file' => '/Application/views/blocks/details_productmain_tobasket.tpl',
'position' => 150, 'position' => 150
], ],
// remove_from_cart // remove_from_cart
[ [
'template' => 'page/checkout/basket.tpl', 'template' => 'page/checkout/basket.tpl',
'block' => 'checkout_basket_main', 'block' => 'checkout_basket_main',
'file' => 'views/smarty/blocks/remove_from_cart.tpl', 'file' => '/Application/views/blocks/remove_from_cart.tpl',
'position' => 150, 'position' => 150
], ],
[ [
'template' => 'page/checkout/thankyou.tpl', 'template' => 'page/checkout/thankyou.tpl',
'block' => 'checkout_thankyou_main', 'block' => 'checkout_thankyou_main',
'file' => 'views/smarty/blocks/purchase.tpl', 'file' => '/Application/views/blocks/purchase.tpl'
'position' => 150,
], ],
// Lists // Lists
// view_item_list // view_item_list
[ [
'template' => 'page/list/list.tpl', 'template' => 'page/list/list.tpl',
'block' => 'page_list_productlist', 'block' => 'page_list_productlist',
'file' => 'views/smarty/blocks/view_item_list.tpl', 'file' => '/Application/views/blocks/view_item_list.tpl',
'position' => 150, 'position' => 150
], ],
// view_search_result // view_search_result
[ [
'template' => 'page/search/search.tpl', 'template' => 'page/search/search.tpl',
'block' => 'search_results', 'block' => 'search_results',
'file' => 'views/smarty/blocks/view_search_result.tpl', 'file' => '/Application/views/blocks/view_search_result.tpl',
'position' => 150, 'position' => 150
], ],
[ [
'template' => 'page/list/list.tpl', 'template' => 'page/list/list.tpl',
'block' => 'page_list_listbody', 'block' => 'page_list_listbody',
'file' => 'views/smarty/blocks/page_list_listbody.tpl', 'file' => '/Application/views/blocks/page_list_listbody.tpl',
'position' => 150, 'position' => 150
], ],
[ [
'template' => 'page/shop/start.tpl', 'template' => 'page/shop/start.tpl',
'block' => 'start_welcome_text', 'block' => 'start_welcome_text',
'file' => 'views/smarty/blocks/start_welcome_text.tpl', 'file' => '/Application/views/blocks/start_welcome_text.tpl',
'position' => 150, 'position' => 150
], ],
// Checkout process // Checkout process
// Begin CHeckout // Begin CHeckout
[ [
'template' => 'page/checkout/user.tpl', 'template' => 'page/checkout/user.tpl',
'block' => 'checkout_user_main', 'block' => 'checkout_user_main',
'file' => 'views/smarty/blocks/begin_checkout.tpl', 'file' => '/Application/views/blocks/begin_checkout.tpl',
'position' => 150, 'position' => 150
], ],
// Add payment info // Add payment info
// We add it into checkout_order_main ( checkout/order.tpl ) to make sure a payment is actually added; // We add it into checkout_order_main ( checkout/order.tpl ) to make sure a payment is actually added;
@ -198,12 +195,12 @@ $aModule = [
[ [
'template' => 'page/checkout/order.tpl', 'template' => 'page/checkout/order.tpl',
'block' => 'checkout_order_main', 'block' => 'checkout_order_main',
'file' => 'views/smarty/blocks/add_payment_info.tpl', 'file' => '/Application/views/blocks/add_payment_info.tpl',
'position' => 150, 'position' => 150
], ],
], ],
'events' => [ 'events' => [
'onActivate' => '\D3\GoogleAnalytics4\Setup\Events::onActivate', 'onActivate' => '\D3\GoogleAnalytics4\Setup\Events::onActivate',
'onDeactivate' => '\D3\GoogleAnalytics4\Setup\Events::onDeactivate', 'onDeactivate' => '\D3\GoogleAnalytics4\Setup\Events::onDeactivate',
], ],
]; ];

0
assets/thumbnail.png → thumbnail.png Normale Datei → Ausführbare Datei
Datei anzeigen

Vorher

Breite:  |  Höhe:  |  Größe: 31 KiB

Nachher

Breite:  |  Höhe:  |  Größe: 31 KiB

Datei anzeigen

@ -1,3 +0,0 @@
[{$smarty.block.parent}]
[{include file="@d3googleanalytics4/event/add_payment_info.tpl"}]

Datei anzeigen

@ -1,3 +0,0 @@
[{$smarty.block.parent}]
[{include file="@d3googleanalytics4/event/begin_checkout.tpl"}]

Datei anzeigen

@ -1,3 +0,0 @@
[{$smarty.block.parent}]
[{include file='@d3googleanalytics4/event/add_to_cart.tpl' htmlIdAmountOfArticles='#amountToBasket'}]

Datei anzeigen

@ -1,3 +0,0 @@
[{$smarty.block.parent}]
[{include file='@d3googleanalytics4/event/add_to_cart.tpl' htmlIdAmountOfArticles='#amountToBasket'}]

Datei anzeigen

@ -1,3 +0,0 @@
[{$smarty.block.parent}]
[{include file="@d3googleanalytics4/event/purchase.tpl"}]

Datei anzeigen

@ -1,3 +0,0 @@
[{$smarty.block.parent}]
[{include file="@d3googleanalytics4/event/remove_from_cart.tpl"}]

Datei anzeigen

@ -1,3 +0,0 @@
[{$smarty.block.parent}]
[{include file='@d3googleanalytics4/event/add_to_cart.tpl' htmlIdAmountOfArticles='#amountToBasket'}]

Datei anzeigen

@ -1,3 +0,0 @@
[{$smarty.block.parent}]
[{include file="@d3googleanalytics4/event/view_cart.tpl"}]

Datei anzeigen

@ -1,3 +0,0 @@
[{$smarty.block.parent}]
[{include file="@d3googleanalytics4/event/view_item.tpl"}]

Datei anzeigen

@ -1,3 +0,0 @@
[{$smarty.block.parent}]
[{include file="@d3googleanalytics4/event/view_item_list.tpl"}]

Datei anzeigen

@ -1,3 +0,0 @@
[{$smarty.block.parent}]
[{include file="@d3googleanalytics4/event/view_search_result.tpl"}]

Datei anzeigen

@ -1,41 +0,0 @@
[{assign var="gtmProduct" value=$oView->getProduct()}]
[{assign var="gtmCategory" value=$gtmProduct->getCategory()}]
[{assign var="gtmManufacturer" value=$gtmProduct->getManufacturer()}]
[{block name="d3_ga4_view_item_block"}]
[{capture name="d3_ga4_view_item"}]
[{strip}]
dataLayer.push({"event": null, "eventLabel": null, "ecommerce": null}); /* Clear the previous ecommerce object. */
dataLayer.push({
'event': 'view_item',
'eventLabel':'Product View',
'ecommerce':
{
'currency': '[{$currency->name}]',
'items':
[
{
'item_name': '[{$gtmProduct->getFieldData("oxtitle")}]',
'item_id': '[{$gtmProduct->getFieldData("oxartnum")}]',
'item_brand': '[{if $gtmManufacturer}][{$gtmManufacturer->oxmanufacturers__oxtitle->value}][{/if}]',
'item_variant': '[{if $gtmProduct->getFieldData("oxvarselect")}][{$gtmProduct->getFieldData("oxvarselect")}][{/if}]',
[{if $gtmCategory}]
'item_category': '[{$gtmCategory->getSplitCategoryArray(0, true)}]',
'item_category_2':'[{$gtmCategory->getSplitCategoryArray(1, true)}]',
'item_category_3':'[{$gtmCategory->getSplitCategoryArray(2, true)}]',
'item_category_4':'[{$gtmCategory->getSplitCategoryArray(3, true)}]',
'item_list_name':'[{$gtmCategory->getSplitCategoryArray()}]',
[{/if}]
[{assign var="d3PriceObject" value=$gtmProduct->getPrice()}]
'price': [{$d3PriceObject->getPrice()}]
}
]
}[{if $oViewConf->isDebugModeOn()}],
'debug_mode': 'true'
[{/if}]
});
[{/strip}]
[{/capture}]
[{oxscript add=$smarty.capture.d3_ga4_view_item}]
[{/block}]