Compare commits

..

7 Commits
2.6.0 ... 1.5.0

Author SHA1 Message Date
dfdc5d5edf bump version && changelog to 1.5.0 2023-05-23 11:44:07 +02:00
ae6f9bfaa9 switch php-file-header hint 2023-05-23 10:49:59 +02:00
1d9e09b8b1 switch view_item and item_list template 2023-05-23 10:49:05 +02:00
f9a0834d26 add settings-entry; add consentmanager-option 2023-05-16 14:42:12 +02:00
bb70cda626 fix unnecessary convert of int to str 2023-05-16 14:41:47 +02:00
c9a1174c98 genuine code cleanup; switch hard-getter to methods and use price-object
# Conflicts:
#	Application/views/blocks/view_item.tpl
#	Application/views/ga4/add_to_cart.tpl
2023-05-16 14:41:32 +02:00
f3b2911679 OXID UserCentrics support, general overhaul for cookie managers 2023-05-16 14:24:50 +02:00
11 changed files with 93 additions and 289 deletions

View File

@ -1,53 +0,0 @@
<?php
namespace D3\GoogleAnalytics4\Application\Model;
use OxidEsales\Eshop\Core\Registry;
use OxidEsales\Eshop\Core\ViewConfig;
class ManagerHandler
{
/**
* @return string
*/
public function getCurrManager() :string
{
/** @var ManagerTypes $oManagerTypes */
$oManagerTypes = oxNew(ManagerTypes::class);
/** @var ViewConfig $oViewConfig */
$oViewConfig = oxNew(ViewConfig::class);
$aManagerList = $oManagerTypes->getManagerList();
foreach ($aManagerList as $managerName){
if ($oViewConfig->isModuleActive($managerName)){
return $managerName;
}
}
return $this->getExplicitManager();
}
/**
* @return string
*/
public function getModuleSettingExplicitManagerSelectValue() :string
{
return Registry::getConfig()->getConfigParam('d3_gtm_settings_HAS_STD_MANAGER');
}
/**
* @return string
*/
public function getExplicitManager() :string
{
$sPotentialManagerName = $this->getModuleSettingExplicitManagerSelectValue();
/** @var ManagerTypes $oManagerTypes */
$oManagerTypes = oxNew(ManagerTypes::class);
return $oManagerTypes->isManagerInList($sPotentialManagerName)
? $sPotentialManagerName
: "NONE";
}
}

View File

@ -1,60 +0,0 @@
<?php
namespace D3\GoogleAnalytics4\Application\Model;
class ManagerTypes
{
#ToDo: make own classes for each of the manager
const EXTERNAL_SERVICE = "externalService";
const NET_COOKIE_MANAGER = "net_cookie_manager";
/**
* Further information's:
* https://github.com/aggrosoft/oxid-cookie-compliance
*/
const AGCOOKIECOMPLIANCE = "agcookiecompliance";
/**
* Used the OXID Module.
*
* Further information's:
* https://docs.oxid-esales.com/modules/usercentrics/de/latest/einfuehrung.html
*
* Usercentrics homepage:
* https://usercentrics.com
*/
const USERCENTRICS_MODULE = "oxps_usercentrics";
/**
* manually included usercentrics script
*/
const USERCENTRICS_MANUALLY = "USERCENTRICS";
const CONSENTMANAGER = "CONSENTMANAGER";
/**
* @return array
*/
public function getManagerList(): array
{
return [
"externalService" => self::EXTERNAL_SERVICE,
"agcookiecompliance" => self::AGCOOKIECOMPLIANCE,
"net_cookie_manager" => self::NET_COOKIE_MANAGER,
"oxps_usercentrics" => self::USERCENTRICS_MODULE,
"usercentrics" => self::USERCENTRICS_MANUALLY,
"consentmanager" => self::CONSENTMANAGER
];
}
/**
* @param string $sManager
* @return bool
*/
public function isManagerInList(string $sManager) :bool
{
return in_array($sManager, $this->getManagerList(), true);
}
}

View File

@ -31,10 +31,8 @@ $aLang = [
// for cookie manager settings // for cookie manager settings
'SHOP_MODULE_GROUP_d3_gtm_settings_cookiemanager' => 'Cookie Manager Einstellungen', 'SHOP_MODULE_GROUP_d3_gtm_settings_cookiemanager' => 'Cookie Manager Einstellungen',
'SHOP_MODULE_d3_gtm_settings_hasOwnCookieManager' => 'Cookie Manager nutzen?', 'SHOP_MODULE_d3_gtm_settings_hasOwnCookieManager' => 'Cookie Manager nutzen?',
'SHOP_MODULE_d3_gtm_settings_HAS_STD_MANAGER' => 'Nutzen Sie eine der folgenden Einbindungen?<br> 'SHOP_MODULE_d3_gtm_settings_HAS_CONSENTMANAGER' => 'Nutzen Sie die Consentmanager-Einbindung?',
Dann wählen Sie bitte die zutreffende aus.', 'SHOP_MODULE_d3_gtm_settings_HAS_CONSENTMANAGER_NO' => 'Nein',
'SHOP_MODULE_d3_gtm_settings_HAS_STD_MANAGER_NONE' => '---', 'SHOP_MODULE_d3_gtm_settings_HAS_CONSENTMANAGER_YES' => 'Ja',
'SHOP_MODULE_d3_gtm_settings_HAS_STD_MANAGER_CONSENTMANAGER' => 'consentmanager',
'SHOP_MODULE_d3_gtm_settings_HAS_STD_MANAGER_USERCENTRICS' => 'usercentrics',
'SHOP_MODULE_d3_gtm_settings_cookieName' => 'CookieID', 'SHOP_MODULE_d3_gtm_settings_cookieName' => 'CookieID',
]; ];

View File

@ -1,4 +1,4 @@
[{if $oViewConf->D3blShowGtmScript()}] [{if $oViewConf->D3blShowGtmScript() && !$oViewConf->getCookieManagerType()}]
[{if $oViewConf->getGtmContainerId()}][{strip}] [{if $oViewConf->getGtmContainerId()}][{strip}]
<!-- Google Tag Manager (noscript) --> <!-- Google Tag Manager (noscript) -->
<noscript> <noscript>

View File

@ -1,5 +1,5 @@
[{$smarty.block.parent}] [{$smarty.block.parent}]
[{assign var="gtmProducts" value=$oView->getArticleList()}] [{assign var="gtmProducts" value=$products}]
[{assign var="breadCrumb" value=''}] [{assign var="breadCrumb" value=''}]

View File

@ -4,70 +4,6 @@ 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).
## [2.6.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.5.0...2.6.0) - 2023-05-31
### Added
- add settings to explicit choose an external service (usercentrics/ consentmanager)
- position to block-extension
- extended instructions to check for in readme
### Fixed
- usercentrics script
- missing right articleList-getter
### Changed
- view_item_list-template block extension
- cookieManager handling
### Removed
- additional check for cookieManagerType
## [2.5.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.4.0...2.5.0) - 2023-05-23
### Added
- additional settings to explicitly indicate that consentmanager is used
### Fixed
- unnecessary converting of int to str
- missing PriceObject-bug
### Changed
- genuine code cleanup
## [2.4.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.3.3...2.4.0) - 2023-05-02
### Added
- "OXID Cookie Management powered by usercentrics" compatibility
- usercentrics defined script attributes
- cookie-manager evaluation
### Changed
- genuine clean up of base-js-files
## [2.3.3](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.3.2...2.3.3) - 2023-03-20
### Fixed
- metadata file path for view_item
## [2.3.2](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.2.2...2.3.2) - 2023-03-17
### Added
- Aggrosoft-Cookie-Consent compatibility
### Fixed
- wrong function for pageview on thankyou page
### Deleted
- unused files
## [2.2.2](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.2.1...2.2.2) - 2023-02-22
### Fixed
- price formatting in view_cart
## [2.2.1](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.1.1...2.2.1) - 2023-02-21
### Added
- cookie handling
## [2.1.1](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.1...2.1.1) - 2023-01-27
### Fixed
- add missing class import
## [2.1](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.0...2.1) - 2023-01-27
### Added
- block section for add_to_basket js
- template block order positions
## [2.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/1.1...2.0) - 2023-01-20
### Added
- using of ContainerFactory in ViewConfig
## [1.5.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/1.4.0...1.5.0) - 2023-05-23 ## [1.5.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/1.4.0...1.5.0) - 2023-05-23
### Added ### Added
- additional settings to explicitly indicate that consentmanager is used - additional settings to explicitly indicate that consentmanager is used

View File

@ -12,8 +12,8 @@ Für den geregelten Ablauf sind folgende Blöcke nötig:
- Datei: page/search/search.tpl - Datei: page/search/search.tpl
- GA4 Event: view_search_results - GA4 Event: view_search_results
- Artikelliste - Artikelliste
- Blockname: page_list_productlist (muss hinzugefĂĽgt werden) - Blockname: d3Ga4_view_item_list (muss hinzugefĂĽgt werden)
- Datei: page/list/list.tpl - Datei: widget/product/list.tpl
- GA4 Event: view_item_list - GA4 Event: view_item_list
- Detailseite - Detailseite
- Blockname: details_productmain_title - Blockname: details_productmain_title
@ -63,6 +63,6 @@ Aktivieren Sie anschlieĂźend diese Weiche. Setzen Sie den Haken bei "Eigenen Coo
```Einstell. > Cookie Manager Einstellungen > Cookie-ID``` eintragen ```Einstell. > Cookie Manager Einstellungen > Cookie-ID``` eintragen
- [OXID Cookie Management powered by usercentrics](https://docs.oxid-esales.com/modules/usercentrics/de/latest/einfuehrung.html) - [OXID Cookie Management powered by usercentrics](https://docs.oxid-esales.com/modules/usercentrics/de/latest/einfuehrung.html)
- In der Usercentrics-Verwaltung die Services "Google Analytics" und "Google Tag Manager" anlegen - In der Usercentrics-Verwaltung einen Service fĂĽr Google Analytics anlegen
- Den Service ```Google Tag Manager``` in den Moduleinstellungen des 'Google Analytics 4' unter - Den Service-Namen in den Moduleinstellungen des 'Google Analytics 4' unter
```Einstell. > Cookie Manager Einstellungen > Cookie-ID``` eintragen ```Einstell. > Cookie Manager Einstellungen > Cookie-ID``` eintragen

View File

@ -12,13 +12,9 @@
namespace D3\GoogleAnalytics4\Modules\Core; namespace D3\GoogleAnalytics4\Modules\Core;
use D3\GoogleAnalytics4\Application\Model\ManagerHandler;
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\Core\Registry; use OxidEsales\Eshop\Core\Registry;
use OxidEsales\EshopCommunity\Internal\Container\ContainerFactory;
use OxidEsales\EshopCommunity\Internal\Framework\Module\Configuration\Bridge\ModuleSettingBridgeInterface;
class ViewConfig extends ViewConfig_parent class ViewConfig extends ViewConfig_parent
{ {
@ -31,33 +27,42 @@ class ViewConfig extends ViewConfig_parent
{ {
if ($this->sContainerId === null) if ($this->sContainerId === null)
{ {
$this->sContainerId = ContainerFactory::getInstance()
->getContainer() $this->sContainerId = $this->getConfig()->getConfigParam('d3_gtm_sContainerID');
->get(ModuleSettingBridgeInterface::class)
->get('d3_gtm_sContainerID', 'd3googleanalytics4');
} }
return $this->sContainerId; return $this->sContainerId;
} }
/** public function getModuleConsentmanagerSettingSelectValue() :bool
* @return void {
*/ return Registry::getConfig()->getConfigParam('d3_gtm_settings_HAS_CONSENTMANAGER') === 'YES';
public function defineCookieManagerType() :void }
public function getCookieManagerType()
{ {
if ($this->sCookieManagerType === null) if ($this->sCookieManagerType === null)
{ {
/** @var ManagerHandler $oManagerHandler */ $this->sCookieManagerType = false;
$oManagerHandler = oxNew(ManagerHandler::class);
$this->sCookieManagerType = $oManagerHandler->getCurrManager(); $allowedManagerTypes = [
'net_cookie_manager',
'agcookiecompliance',
'oxps_usercentrics'
];
foreach ($allowedManagerTypes as $type) {
if ($this->isModuleActive($type)) {
$this->sCookieManagerType = $type;
break;
}
} }
} }
/** if ($this->sCookieManagerType === false and $this->getModuleConsentmanagerSettingSelectValue()){
* @return bool return "consentmanager";
*/ }
public function shallUseOwnCookieManager() :bool
{ return $this->sCookieManagerType;
return (bool) Registry::getConfig()->getConfigParam('d3_gtm_settings_hasOwnCookieManager');
} }
/** /**
@ -69,37 +74,29 @@ class ViewConfig extends ViewConfig_parent
$oConfig = Registry::getConfig(); $oConfig = Registry::getConfig();
// No Cookie Manager in use // No Cookie Manager in use
if (!$this->shallUseOwnCookieManager()) { if (!$oConfig->getConfigParam('d3_gtm_settings_hasOwnCookieManager')) {
return true; return true;
} }
$this->defineCookieManagerType();
$sCookieID = $oConfig->getConfigParam('d3_gtm_settings_cookieName'); $sCookieID = $oConfig->getConfigParam('d3_gtm_settings_cookieName');
// Netensio Cookie Manager // Netensio Cookie Manager
if ($this->sCookieManagerType === ManagerTypes::NET_COOKIE_MANAGER) { if ($this->getCookieManagerType() == "net_cookie_manager") {
$oSession = Registry::getSession(); $oSession = Registry::getSession();
$aCookies = $oSession->getVariable("aCookieSel"); $aCookies = $oSession->getVariable("aCookieSel");
return (is_array($aCookies) && array_key_exists($sCookieID, $aCookies) && $aCookies[$sCookieID] == "1"); return (!is_null($aCookies) && is_array($aCookies) && array_key_exists($sCookieID, $aCookies) && $aCookies[$sCookieID] == "1");
} }
// Aggrosoft Cookie Consent // Aggrosoft Cookie Consent
if ($this->sCookieManagerType === ManagerTypes::AGCOOKIECOMPLIANCE) { if ($this->getCookieManagerType() == "agcookiecompliance") {
if (method_exists($this, "isCookieCategoryEnabled")) { if (method_exists($this, "isCookieCategoryEnabled")) {
return $this->isCookieCategoryEnabled($sCookieID); return $this->isCookieCategoryEnabled($sCookieID);
} }
} }
// UserCentrics or consentmanager // UserCentrics
if ( if ($this->getCookieManagerType() === "oxps_usercentrics" or $this->getCookieManagerType() === 'consentmanager') {
$this->sCookieManagerType === ManagerTypes::USERCENTRICS_MODULE
or $this->sCookieManagerType === ManagerTypes::USERCENTRICS_MANUALLY
or $this->sCookieManagerType === ManagerTypes::CONSENTMANAGER
or $this->sCookieManagerType === ManagerTypes::EXTERNAL_SERVICE
)
{
// Always needs the script-tags delivered to the DOM. // Always needs the script-tags delivered to the DOM.
return true; return true;
} }
@ -113,27 +110,21 @@ 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()
{ {
$oConfig = Registry::getConfig(); $oConfig = Registry::getConfig();
if ($this->getCookieManagerType() == "oxps_usercentrics") {
$sCookieId = $oConfig->getConfigParam('d3_gtm_settings_cookieName'); $sCookieId = $oConfig->getConfigParam('d3_gtm_settings_cookieName');
if (false === $this->shallUseOwnCookieManager()){
return "";
}
if (
$this->sCookieManagerType === ManagerTypes::USERCENTRICS_MODULE
or $this->sCookieManagerType === ManagerTypes::USERCENTRICS_MANUALLY
)
{
if ($sCookieId) { if ($sCookieId) {
return 'data-usercentrics="' . $sCookieId . '" type="text/plain" async=""'; return 'type="text/plain" data-usercentrics="' . $sCookieId . '"';
} }
} }
if ($this->sCookieManagerType === ManagerTypes::CONSENTMANAGER) if ($this->getCookieManagerType() == "consentmanager") {
{ $sCookieId = $oConfig->getConfigParam('d3_gtm_settings_cookieName');
if ($sCookieId) { if ($sCookieId) {
return 'async return 'async
type="text/plain" type="text/plain"
@ -153,10 +144,7 @@ class ViewConfig extends ViewConfig_parent
{ {
if ($this->blGA4enabled === null) if ($this->blGA4enabled === null)
{ {
$this->sContainerId = ContainerFactory::getInstance() $this->sContainerId = $this->getConfig()->getConfigParam('d3_gtm_blEnableGA4');
->getContainer()
->get(ModuleSettingBridgeInterface::class)
->get('d3_gtm_blEnableGA4', 'd3googleanalytics4');
} }
return $this->blGA4enabled; return $this->blGA4enabled;

View File

@ -23,17 +23,13 @@ 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:^2 php composer require d3/google-analytics4:^1
``` ```
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.
Aktivieren Sie das Modul im Shopadmin unter "Erweiterungen -> Module". Aktivieren Sie das Modul im Shopadmin unter "Erweiterungen -> Module".
### Wichtig!
Bitte stellen Sie sicher, dass die nötigen Template-Blöcke im OXID-Shop zur Verfügung stehen.
Lesen Sie mehr in der [technischen Doku](./Docs/README.md) unter "Blöcke"!
## Verwendung ## Verwendung
### Grundfunktionalität ### Grundfunktionalität
Nach erfolgreicher Installation finden Sie in Ihrem Shop-Admin unter "Erweiterungen > Module" Nach erfolgreicher Installation finden Sie in Ihrem Shop-Admin unter "Erweiterungen > Module"

View File

@ -45,7 +45,7 @@
}, },
"require": { "require": {
"php": ">=7.1", "php": ">=7.1",
"oxid-esales/oxideshop-ce": "^6.5", "oxid-esales/oxideshop-ce": "v6.0 - 6.3",
"google/apiclient":" ^2.0" "google/apiclient":" ^2.0"
}, },
"autoload": { "autoload": {

View File

@ -17,7 +17,7 @@ $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' => '2.6.0', 'version' => '1.5.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/',
@ -35,8 +35,7 @@ $aModule = [
[ [
'template' => 'layout/base.tpl', 'template' => 'layout/base.tpl',
'block' => 'head_meta_robots', 'block' => 'head_meta_robots',
'file' => '/Application/views/blocks/_gtm_js.tpl', 'file' => '/Application/views/blocks/_gtm_js.tpl'
'position' => 150
], ],
// tag manager nojs // tag manager nojs
[ [
@ -65,8 +64,8 @@ $aModule = [
// Lists // Lists
// view_item_list // view_item_list
[ [
'template' => 'page/list/list.tpl', 'template' => 'widget/product/list.tpl',
'block' => 'page_list_productlist', 'block' => 'widget_product_list',
'file' => '/Application/views/ga4/view_item_list.tpl', 'file' => '/Application/views/ga4/view_item_list.tpl',
'position' => 150 'position' => 150
], ],
@ -123,10 +122,10 @@ $aModule = [
], ],
[ [
'group' => 'd3_gtm_settings_cookiemanager', 'group' => 'd3_gtm_settings_cookiemanager',
'name' => 'd3_gtm_settings_HAS_STD_MANAGER', 'name' => 'd3_gtm_settings_HAS_CONSENTMANAGER',
'type' => 'select', 'type' => 'select',
'value' => 'none', 'value' => 'none',
'constraints' => 'NONE|CONSENTMANAGER|USERCENTRICS', 'constraints' => 'NO|YES',
], ],
] ]
]; ];