diff --git a/Application/views/blocks/add_payment_info.tpl b/Application/views/blocks/add_payment_info.tpl
new file mode 100644
index 0000000..e6a2f18
--- /dev/null
+++ b/Application/views/blocks/add_payment_info.tpl
@@ -0,0 +1,3 @@
+[{$smarty.block.parent}]
+
+[{include file="event/add_payment_info.tpl"}]
\ No newline at end of file
diff --git a/Application/views/event/add_payment_info.tpl b/Application/views/event/add_payment_info.tpl
index e69de29..f79bddb 100644
--- a/Application/views/event/add_payment_info.tpl
+++ b/Application/views/event/add_payment_info.tpl
@@ -0,0 +1,53 @@
+[{*$oxcmp_basket|get_class_methods|dumpvar*}]
+
+[{assign var="gtmBasketPrice" value=$oxcmp_basket->getPrice()}]
+[{assign var="gtmBasketObject" value=$oxcmp_basket}]
+[{assign var='gtmCartArticles' value=$gtmBasketObject->getBasketArticles()}]
+[{assign var="gtmPaymentObject" value=$oView->getPayment()}]
+
+[{block name="gtm_ga4_add_payment_info_block"}]
+ [{capture name="gtm_ga4_add_payment_info"}]
+ [{strip}]
+ dataLayer.push({"event": null, "eventLabel": null, "ecommerce": null}); /* Clear the previous ecommerce object. */
+ dataLayer.push({
+ 'event': 'add_payment_info',
+ 'eventLabel':'Checkout - Payment info',
+ 'payment_type':'[{$gtmPaymentObject->gtmGetSelectedPaymentName()}]',
+ 'ecommerce':
+ {
+ 'actionField': "Payment-Info",
+ 'currency': "[{$currency->name}]",
+ 'value': [{$gtmBasketPrice->getPrice()}],
+ 'coupon': '[{foreach from=$oxcmp_basket->getVouchers() item=sVoucher key=key name=Voucher}][{$sVoucher->sVoucherNr}][{if !$smarty.foreach.Voucher.last}], [{/if}][{/foreach}]',
+ 'items':
+ [
+ [{foreach from=$oxcmp_basket->getContents() item=basketitem name=gtmCartContents key=basketindex}]
+ [{assign var="gtmItemPriceObject" value=$basketitem->getPrice()}]
+ [{assign var="gtmBasketItem" value=$basketitem->getArticle()}]
+ [{assign var="gtmBasketItemCategory" value=$gtmBasketItem->getCategory()}]
+ {
+ 'item_id': '[{$gtmCartArticles[$basketindex]->getFieldData('oxartnum')}]',
+ 'item_name': '[{$gtmCartArticles[$basketindex]->getFieldData('oxtitle')}]',
+ 'item_variant': '[{$gtmCartArticles[$basketindex]->getFieldData('oxvarselect')}]',
+ [{if $gtmBasketItemCategory}]
+ 'item_category': '[{$gtmBasketItemCategory->getSplitCategoryArray(0, true)}]',
+ 'item_category_2': '[{$gtmBasketItemCategory->getSplitCategoryArray(1, true)}]',
+ 'item_category_3': '[{$gtmBasketItemCategory->getSplitCategoryArray(2, true)}]',
+ 'item_category_4': '[{$gtmBasketItemCategory->getSplitCategoryArray(3, true)}]',
+ 'item_list_name': '[{$gtmBasketItemCategory->getSplitCategoryArray()}]',
+ [{/if}]
+ 'price': [{$gtmItemPriceObject->getPrice()}],
+ 'coupon': '[{foreach from=$oxcmp_basket->getVouchers() item=sVoucher key=key name=Voucher}][{$sVoucher->sVoucherNr}][{if !$smarty.foreach.Voucher.last}], [{/if}][{/foreach}]',
+ 'quantity': [{$basketitem->getAmount()}],
+ 'position': [{$smarty.foreach.gtmCartContents.index}]
+ }[{if !$smarty.foreach.gtmCartContents.last}],[{/if}]
+ [{/foreach}]
+ ]
+ }[{if $oViewConf->isDebugModeOn()}],
+ 'debug_mode': 'true'
+ [{/if}]
+ });
+ [{/strip}]
+ [{/capture}]
+ [{oxscript add=$smarty.capture.gtm_ga4_add_payment_info}]
+ [{/block}]
\ No newline at end of file
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8ee449a..d98d45d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [2.20.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.19.0...2.20.0) - 2024-08-20
### Added
- new event "begin_checkout"
+- new event "add_payment_info"
## [2.19.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.18.2...2.19.0) - 2024-08-10
### Fixed
diff --git a/IntelliSenseHelper.php b/IntelliSenseHelper.php
index 4666e9e..5b71e72 100644
--- a/IntelliSenseHelper.php
+++ b/IntelliSenseHelper.php
@@ -18,9 +18,14 @@ namespace D3\GoogleAnalytics4\Modules\Core{
}
namespace D3\GoogleAnalytics4\Modules\Application\Model{
+
+ use OxidEsales\Eshop\Application\Model\Payment;
+
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 gtmPayment_parent extends Payment {}
}
namespace D3\GoogleAnalytics4\Modules\Application\Controller{
diff --git a/Modules/Application/Model/gtmPayment.php b/Modules/Application/Model/gtmPayment.php
new file mode 100644
index 0000000..b2baa61
--- /dev/null
+++ b/Modules/Application/Model/gtmPayment.php
@@ -0,0 +1,20 @@
+getFieldData('oxpayments__oxdesc')?: 'No payment name available';
+ }
+}
\ No newline at end of file
diff --git a/metadata.php b/metadata.php
index b1cfeb3..aeced8b 100755
--- a/metadata.php
+++ b/metadata.php
@@ -16,6 +16,7 @@ use D3\GoogleAnalytics4\Modules\Application\Controller\d3GtmStartController;
use D3\GoogleAnalytics4\Modules\Application\Controller\ThankYouController;
use D3\GoogleAnalytics4\Modules\Application\Model\Basket as Basket;
use D3\GoogleAnalytics4\Modules\Application\Model\Category as Category;
+use D3\GoogleAnalytics4\Modules\Application\Model\gtmPayment as gtmPayment;
use D3\GoogleAnalytics4\Modules\Application\Model\Manufacturer as Manufacturer;
use D3\GoogleAnalytics4\Modules\Core\ViewConfig;
use OxidEsales\Eshop\Application\Component\BasketComponent as OEBasketComponent;
@@ -33,12 +34,13 @@ use OxidEsales\Eshop\Application\Controller\ThankYouController as OEThankYouCont
use OxidEsales\Eshop\Application\Model\Basket as OEBasket;
use OxidEsales\Eshop\Application\Model\Category as OECategory;
use OxidEsales\Eshop\Application\Model\Manufacturer as OEManufacturer;
+use OxidEsales\Eshop\Application\Model\Payment as OEPayment;
use OxidEsales\Eshop\Core\ViewConfig as OEViewConfig;
$sMetadataVersion = '2.1';
-$aModule = [
- 'id' => Constants::OXID_MODULE_ID,
- 'title' => 'Google Analytics 4',
+$aModule = [
+ 'id' => Constants::OXID_MODULE_ID,
+ 'title' => 'Google Analytics 4',
'description' => "Dieses Modul bietet die Möglichkeit in Ihrem OXID eShop (6.x) die neue 'Property'
Google Analytics 4 (GA4) von Google zu integrieren.
Hierfür stehen Ihnen verschiedene 'templates' zur verfügung,
@@ -49,144 +51,155 @@ $aModule = [
Die Entwicklung basiert auf einem Fork von Marat Bedoev - Github-Link
",
- 'thumbnail' => 'thumbnail.png',
- 'version' => 'DEV-2.20.0',
- 'author' => 'Data Development (Inh.: Thomas Dartsch)',
- 'email' => 'support@shopmodule.com',
- 'url' => 'https://www.oxidmodule.com/',
+ 'thumbnail' => 'thumbnail.png',
+ 'version' => 'DEV-2.20.0',
+ 'author' => 'Data Development (Inh.: Thomas Dartsch)',
+ 'email' => 'support@shopmodule.com',
+ 'url' => 'https://www.oxidmodule.com/',
'controllers' => [
'd3googleanalytics4_main' => GA4AdminUserInterfaceMainController::class
],
- 'extend' => [
+ 'extend' => [
// Core
- OEViewConfig::class => ViewConfig::class,
+ OEViewConfig::class => ViewConfig::class,
// Model
- OECategory::class => Category::class,
- OEBasket::class => Basket::class,
- OEManufacturer::class => Manufacturer::class,
+ OECategory::class => Category::class,
+ OEBasket::class => Basket::class,
+ OEManufacturer::class => Manufacturer::class,
+ OEPayment::class => gtmPayment::class,
// Controller
- OEBasketController::class => BasketController::class,
- OEThankYouController::class => ThankYouController::class,
- OEArticleListController::class => ArticleListController_AddToCartHelpMethods::class,
- OEArticleDetailsController::class => ArticleDetailsController::class,
- OEAccountNoticeListController::class => d3GtmAccountNoticeListController::class,
- OEAccountRecommlistController::class => d3GtmAccountRecommlistController::class,
- OEAccountWishlistController::class => d3GtmAccountWishlistController::class,
- OEStartController::class => d3GtmStartController::class,
- OESearchController::class => d3GtmSearchController::class,
- OEManufacturerListController::class => d3GtmManufacturerListController::class,
+ OEBasketController::class => BasketController::class,
+ OEThankYouController::class => ThankYouController::class,
+ OEArticleListController::class => ArticleListController_AddToCartHelpMethods::class,
+ OEArticleDetailsController::class => ArticleDetailsController::class,
+ OEAccountNoticeListController::class => d3GtmAccountNoticeListController::class,
+ OEAccountRecommlistController::class => d3GtmAccountRecommlistController::class,
+ OEAccountWishlistController::class => d3GtmAccountWishlistController::class,
+ OEStartController::class => d3GtmStartController::class,
+ OESearchController::class => d3GtmSearchController::class,
+ OEManufacturerListController::class => d3GtmManufacturerListController::class,
// Component
- OEArticleDetails::class => d3GtmWidgetArticleDetails::class,
- OEBasketComponent::class => d3GtmBasketComponentExtension::class,
+ OEArticleDetails::class => d3GtmWidgetArticleDetails::class,
+ OEBasketComponent::class => d3GtmBasketComponentExtension::class,
],
- 'templates' => [
+ 'templates' => [
// Event files that store the GA4 Event-Information
- 'event/add_to_cart.tpl' => 'd3/googleanalytics4/Application/views/event/add_to_cart.tpl',
- 'event/view_item.tpl' => 'd3/googleanalytics4/Application/views/event/view_item.tpl',
- 'event/view_item.tpl' => 'd3/googleanalytics4/Application/views/event/view_item.tpl',
- 'event/begin_checkout.tpl' => 'd3/googleanalytics4/Application/views/event/begin_checkout.tpl',
- 'event/purchase.tpl' => 'd3/googleanalytics4/Application/views/event/purchase.tpl',
- 'event/view_item_list.tpl' => 'd3/googleanalytics4/Application/views/event/view_item_list.tpl',
- 'event/view_search_result.tpl' => 'd3/googleanalytics4/Application/views/event/view_search_result.tpl',
- 'event/remove_from_cart.tpl' => 'd3/googleanalytics4/Application/views/event/remove_from_cart.tpl',
+ 'event/add_to_cart.tpl' => 'd3/googleanalytics4/Application/views/event/add_to_cart.tpl',
+ 'event/view_item.tpl' => 'd3/googleanalytics4/Application/views/event/view_item.tpl',
+ 'event/view_item.tpl' => 'd3/googleanalytics4/Application/views/event/view_item.tpl',
+ 'event/begin_checkout.tpl' => 'd3/googleanalytics4/Application/views/event/begin_checkout.tpl',
+ 'event/add_payment_info.tpl' => 'd3/googleanalytics4/Application/views/event/add_payment_info.tpl',
+ 'event/purchase.tpl' => 'd3/googleanalytics4/Application/views/event/purchase.tpl',
+ 'event/view_item_list.tpl' => 'd3/googleanalytics4/Application/views/event/view_item_list.tpl',
+ 'event/view_search_result.tpl' => 'd3/googleanalytics4/Application/views/event/view_search_result.tpl',
+ 'event/remove_from_cart.tpl' => 'd3/googleanalytics4/Application/views/event/remove_from_cart.tpl',
// complete overwritten file of OXID-Originals
// the path of the template-name is the original path to the file in OXID-context from tpl/->
- 'page/account/d3gtmnoticelist.tpl' => 'd3/googleanalytics4/Application/views/tpl/page/account/d3gtmnoticelist.tpl',
- 'page/account/d3gtmrecommendationlist.tpl' => 'd3/googleanalytics4/Application/views/tpl/page/account/d3gtmrecommendationlist.tpl',
- 'page/account/d3gtmwishlist.tpl' => 'd3/googleanalytics4/Application/views/tpl/page/account/d3gtmwishlist.tpl',
+ 'page/account/d3gtmnoticelist.tpl' => 'd3/googleanalytics4/Application/views/tpl/page/account/d3gtmnoticelist.tpl',
+ 'page/account/d3gtmrecommendationlist.tpl' => 'd3/googleanalytics4/Application/views/tpl/page/account/d3gtmrecommendationlist.tpl',
+ 'page/account/d3gtmwishlist.tpl' => 'd3/googleanalytics4/Application/views/tpl/page/account/d3gtmwishlist.tpl',
// Admin Templates
- 'ga4/admin/d3ga4uimain.tpl' => 'd3/googleanalytics4/Application/views/admin/tpl/d3googleanalytics4_main.tpl',
- 'ga4/admin/d3ga4uiheaditem.tpl' => 'd3/googleanalytics4/Application/views/admin/tpl/d3googleanalytics4_headitem.tpl',
+ 'ga4/admin/d3ga4uimain.tpl' => 'd3/googleanalytics4/Application/views/admin/tpl/d3googleanalytics4_main.tpl',
+ 'ga4/admin/d3ga4uiheaditem.tpl' => 'd3/googleanalytics4/Application/views/admin/tpl/d3googleanalytics4_headitem.tpl',
],
- 'blocks' => [
+ 'blocks' => [
// tag manager js
[
'template' => 'layout/base.tpl',
- 'block' => 'head_meta_robots',
- 'file' => '/Application/views/blocks/_gtm_js.tpl',
+ 'block' => 'head_meta_robots',
+ 'file' => '/Application/views/blocks/_gtm_js.tpl',
'position' => 150
],
// tag manager nojs
[
'template' => 'layout/base.tpl',
- 'block' => 'theme_svg_icons',
- 'file' => '/Application/views/blocks/_gtm_nojs.tpl'
+ 'block' => 'theme_svg_icons',
+ 'file' => '/Application/views/blocks/_gtm_nojs.tpl'
],
// details
[
'template' => 'page/details/inc/productmain.tpl',
- 'block' => 'details_productmain_title',
- 'file' => '/Application/views/blocks/view_item.tpl',
+ 'block' => 'details_productmain_title',
+ 'file' => '/Application/views/blocks/view_item.tpl',
'position' => 150
],
// View Cart
[
'template' => 'page/checkout/basket.tpl',
- 'block' => 'checkout_basket_main',
- 'file' => '/Application/views/blocks/view_cart.tpl'
+ 'block' => 'checkout_basket_main',
+ 'file' => '/Application/views/blocks/view_cart.tpl'
],
// add_to_cart
[
'template' => 'page/details/inc/productmain.tpl',
- 'block' => 'details_productmain_tobasket',
- 'file' => '/Application/views/blocks/details_productmain_tobasket.tpl',
+ 'block' => 'details_productmain_tobasket',
+ 'file' => '/Application/views/blocks/details_productmain_tobasket.tpl',
'position' => 150
],
// remove_from_cart
[
'template' => 'page/checkout/basket.tpl',
- 'block' => 'checkout_basket_main',
- 'file' => '/Application/views/blocks/remove_from_cart.tpl',
+ 'block' => 'checkout_basket_main',
+ 'file' => '/Application/views/blocks/remove_from_cart.tpl',
'position' => 150
],
[
'template' => 'page/checkout/thankyou.tpl',
- 'block' => 'checkout_thankyou_main',
- 'file' => '/Application/views/blocks/purchase.tpl'
+ 'block' => 'checkout_thankyou_main',
+ 'file' => '/Application/views/blocks/purchase.tpl'
],
// Lists
// view_item_list
[
'template' => 'page/list/list.tpl',
- 'block' => 'page_list_productlist',
- 'file' => '/Application/views/blocks/view_item_list.tpl',
+ 'block' => 'page_list_productlist',
+ 'file' => '/Application/views/blocks/view_item_list.tpl',
'position' => 150
],
// view_search_result
[
'template' => 'page/search/search.tpl',
- 'block' => 'search_results',
- 'file' => '/Application/views/blocks/view_search_result.tpl',
+ 'block' => 'search_results',
+ 'file' => '/Application/views/blocks/view_search_result.tpl',
'position' => 150
],
[
'template' => 'page/list/list.tpl',
- 'block' => 'page_list_listbody',
- 'file' => '/Application/views/blocks/page_list_listbody.tpl',
+ 'block' => 'page_list_listbody',
+ 'file' => '/Application/views/blocks/page_list_listbody.tpl',
'position' => 150
],
[
'template' => 'page/shop/start.tpl',
- 'block' => 'start_welcome_text',
- 'file' => '/Application/views/blocks/start_welcome_text.tpl',
+ 'block' => 'start_welcome_text',
+ 'file' => '/Application/views/blocks/start_welcome_text.tpl',
'position' => 150
],
// Checkout process
// Begin CHeckout
[
'template' => 'page/checkout/user.tpl',
- 'block' => 'checkout_user_main',
- 'file' => '/Application/views/blocks/begin_checkout.tpl',
+ 'block' => 'checkout_user_main',
+ 'file' => '/Application/views/blocks/begin_checkout.tpl',
+ 'position' => 150
+ ],
+ // Add payment info
+ // We add it into checkout_order_main ( checkout/order.tpl ) to make sure a payment is actually added;
+ // we'll also do it like that in the future for add_shipping_info ( not planed yet )
+ [
+ 'template' => 'page/checkout/order.tpl',
+ 'block' => 'checkout_order_main',
+ 'file' => '/Application/views/blocks/add_payment_info.tpl',
'position' => 150
],
],
- 'events' => [
- 'onActivate' => '\D3\GoogleAnalytics4\Setup\Events::onActivate',
- 'onDeactivate' => '\D3\GoogleAnalytics4\Setup\Events::onDeactivate',
+ 'events' => [
+ 'onActivate' => '\D3\GoogleAnalytics4\Setup\Events::onActivate',
+ 'onDeactivate' => '\D3\GoogleAnalytics4\Setup\Events::onDeactivate',
],
];
\ No newline at end of file