Compare commits
16 Commits
Author | SHA1 | Date | |
---|---|---|---|
db680b893f | |||
4458fc55ee | |||
6053219687 | |||
dbaf871c9e | |||
2a8c939afd | |||
02db7be9d8 | |||
aa616db0f2 | |||
60a3c797fb | |||
55306e0495 | |||
d856a994ab | |||
550c9dbdf9 | |||
44e54b7329 | |||
5f72d0837e | |||
201bcb6e37 | |||
97c3927998 | |||
cbe3293ff1 |
@ -1,15 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace D3\GoogleAnalytics4\Application\Component\Widget;
|
|
||||||
|
|
||||||
class d3GtmStartWidget extends \OxidEsales\Eshop\Application\Component\Widget\WidgetController
|
|
||||||
{
|
|
||||||
public function render()
|
|
||||||
{
|
|
||||||
parent::render();
|
|
||||||
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,85 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace D3\GoogleAnalytics4\Application\Controller\Admin;
|
|
||||||
|
|
||||||
use D3\GoogleAnalytics4\Application\Model\Constants;
|
|
||||||
use D3\GoogleAnalytics4\Application\Model\ManagerHandler;
|
|
||||||
use D3\GoogleAnalytics4\Application\Model\ManagerTypes;
|
|
||||||
use OxidEsales\Eshop\Core\Registry;
|
|
||||||
use OxidEsales\Eshop\Core\ViewConfig;
|
|
||||||
|
|
||||||
class GA4AdminUserInterface_main extends \OxidEsales\Eshop\Application\Controller\Admin\AdminDetailsController
|
|
||||||
{
|
|
||||||
protected $_sThisTemplate = 'ga4/admin/d3ga4uimain.tpl';
|
|
||||||
|
|
||||||
public function render()
|
|
||||||
{
|
|
||||||
$return = parent::render();
|
|
||||||
|
|
||||||
$this->addTplParam('d3ViewObject', $this);
|
|
||||||
$this->addTplParam('d3ViewConfObject', Registry::get(ViewConfig::class));
|
|
||||||
$this->addTplParam('d3ManagerTypeArray', oxNew(ManagerTypes::class)->getManagerList());
|
|
||||||
$this->addTplParam('d3CurrentCMP', oxNew(ManagerHandler::class)->getCurrManager());
|
|
||||||
|
|
||||||
return $return;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function save()
|
|
||||||
{
|
|
||||||
parent::save();
|
|
||||||
|
|
||||||
$aParams = Registry::getRequest()->getRequestEscapedParameter('editval');
|
|
||||||
|
|
||||||
$aCheckBoxParams = [
|
|
||||||
'_blEnableGa4',
|
|
||||||
'_blEnableDebug',
|
|
||||||
'_blEnableConsentMode',
|
|
||||||
'_blEnableOwnCookieManager',
|
|
||||||
'_blEnableMeasurementCapabilities',
|
|
||||||
'_blEnableUsercentricsConsentModeApi',
|
|
||||||
];
|
|
||||||
|
|
||||||
foreach ($aCheckBoxParams as $checkBoxName){
|
|
||||||
if (isset($aParams['bool'][$checkBoxName])){
|
|
||||||
$aParams['bool'][$checkBoxName] = true;
|
|
||||||
}else{
|
|
||||||
$aParams['bool'][$checkBoxName] = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$this->d3SaveShopConfigVars($aParams);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $aParams
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
protected function d3SaveShopConfigVars(array $aParams)
|
|
||||||
{
|
|
||||||
$oConfig = Registry::getConfig();
|
|
||||||
foreach ($aParams as $sConfigType => $aConfigParams) {
|
|
||||||
foreach ($aConfigParams as $sParamName => $sParamValue){
|
|
||||||
if($this->d3GetModuleConfigParam($sParamName) !== $sParamValue){
|
|
||||||
$oConfig->saveShopConfVar(
|
|
||||||
$sConfigType,
|
|
||||||
Constants::OXID_MODULE_ID.$sParamName,
|
|
||||||
$sParamValue,
|
|
||||||
$oConfig->getShopId(),
|
|
||||||
Constants::OXID_MODULE_ID
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $configParamName
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function d3GetModuleConfigParam(string $configParamName)
|
|
||||||
{
|
|
||||||
return Registry::get(ViewConfig::class)->d3GetModuleConfigParam($configParamName);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace D3\GoogleAnalytics4\Application\Model\CMP;
|
|
||||||
|
|
||||||
|
|
||||||
abstract class ConsentManagementPlatformBaseModel extends \OxidEsales\Eshop\Core\Model\BaseModel implements ConsentManagementPlatformInterface
|
|
||||||
{
|
|
||||||
public string $sCMPName;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getCMPName(): string
|
|
||||||
{
|
|
||||||
return $this->sCMPName;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,8 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace D3\GoogleAnalytics4\Application\Model\CMP;
|
|
||||||
|
|
||||||
interface ConsentManagementPlatformInterface
|
|
||||||
{
|
|
||||||
public function getCMPName();
|
|
||||||
}
|
|
@ -1,25 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace D3\GoogleAnalytics4\Application\Model\CMP;
|
|
||||||
|
|
||||||
|
|
||||||
use D3\GoogleAnalytics4\Application\Model\ManagerTypes;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Used the OXID Module.
|
|
||||||
*
|
|
||||||
* Further information's:
|
|
||||||
* https://docs.oxid-esales.com/modules/usercentrics/de/latest/einfuehrung.html
|
|
||||||
*
|
|
||||||
* Usercentrics homepage:
|
|
||||||
* https://usercentrics.com
|
|
||||||
*/
|
|
||||||
class Usercentrics extends ConsentManagementPlatformBaseModel
|
|
||||||
{
|
|
||||||
const sExternalIncludationPublicName = "( Externe Einbindung ) Usercentrics";
|
|
||||||
const sExternalIncludationInternalName = "usercentrics";
|
|
||||||
const sModuleIncludationPublicName = "( Modul ) Usercentrics";
|
|
||||||
const sModuleIncludationInternalName = "oxps_usercentrics";
|
|
||||||
}
|
|
@ -8,8 +8,6 @@ use OxidEsales\Eshop\Core\ViewConfig;
|
|||||||
class ManagerHandler
|
class ManagerHandler
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* Gets current chosen Manager
|
|
||||||
*
|
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getCurrManager() :string
|
public function getCurrManager() :string
|
||||||
@ -22,32 +20,13 @@ class ManagerHandler
|
|||||||
|
|
||||||
$aManagerList = $oManagerTypes->getManagerList();
|
$aManagerList = $oManagerTypes->getManagerList();
|
||||||
|
|
||||||
if ($this->getModuleSettingExplicitManagerSelectValue()){
|
foreach ($aManagerList as $managerName){
|
||||||
return $this->getExplicitManager();
|
if ($oViewConfig->isModuleActive($managerName)){
|
||||||
}
|
return $managerName;
|
||||||
|
|
||||||
foreach ($aManagerList as $shopModuleId => $publicCMPName){
|
|
||||||
if ($oViewConfig->isModuleActive($shopModuleId)){
|
|
||||||
$this->d3SaveShopConfVar($shopModuleId);
|
|
||||||
return $shopModuleId;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return "";
|
return $this->getExplicitManager();
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $sParam
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function d3SaveShopConfVar(string $sParam){
|
|
||||||
Registry::getConfig()->saveShopConfVar(
|
|
||||||
'select',
|
|
||||||
Constants::OXID_MODULE_ID."_HAS_STD_MANAGER",
|
|
||||||
$sParam,
|
|
||||||
Registry::getConfig()->getShopId(),
|
|
||||||
Constants::OXID_MODULE_ID
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -55,7 +34,7 @@ class ManagerHandler
|
|||||||
*/
|
*/
|
||||||
public function getModuleSettingExplicitManagerSelectValue() :string
|
public function getModuleSettingExplicitManagerSelectValue() :string
|
||||||
{
|
{
|
||||||
return Registry::get(ViewConfig::class)->d3GetModuleConfigParam('_HAS_STD_MANAGER')?:"";
|
return Registry::getConfig()->getConfigParam('d3_gtm_settings_HAS_STD_MANAGER');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -67,12 +46,8 @@ class ManagerHandler
|
|||||||
|
|
||||||
/** @var ManagerTypes $oManagerTypes */
|
/** @var ManagerTypes $oManagerTypes */
|
||||||
$oManagerTypes = oxNew(ManagerTypes::class);
|
$oManagerTypes = oxNew(ManagerTypes::class);
|
||||||
$sCMPName = $oManagerTypes->isManagerInList($sPotentialManagerName)
|
return $oManagerTypes->isManagerInList($sPotentialManagerName)
|
||||||
? $sPotentialManagerName
|
? $sPotentialManagerName
|
||||||
: "NONE";
|
: "NONE";
|
||||||
|
|
||||||
$this->d3SaveShopConfVar($sCMPName);
|
|
||||||
|
|
||||||
return $sCMPName;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -2,24 +2,41 @@
|
|||||||
|
|
||||||
namespace D3\GoogleAnalytics4\Application\Model;
|
namespace D3\GoogleAnalytics4\Application\Model;
|
||||||
|
|
||||||
use D3\GoogleAnalytics4\Application\Model\CMP\Usercentrics;
|
|
||||||
|
|
||||||
class ManagerTypes
|
class ManagerTypes
|
||||||
{
|
{
|
||||||
const EXTERNAL_SERVICE = "eigener Service";
|
#ToDo: make own classes for each of the manager
|
||||||
const NET_COOKIE_MANAGER = "Netensio Cookie Manager";
|
|
||||||
|
|
||||||
|
const EXTERNAL_SERVICE = "externalService";
|
||||||
|
const 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
|
||||||
*/
|
*/
|
||||||
const AGCOOKIECOMPLIANCE = "Aggrosoft Cookie Compliance";
|
const AGCOOKIECOMPLIANCE = "agcookiecompliance";
|
||||||
|
|
||||||
const CONSENTMANAGER = "Consentmanager";
|
/**
|
||||||
|
* 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";
|
||||||
|
|
||||||
const COOKIEFIRST = "Cookiefirst";
|
/**
|
||||||
|
* manually included usercentrics script
|
||||||
|
*/
|
||||||
|
const USERCENTRICS_MANUALLY = "USERCENTRICS";
|
||||||
|
|
||||||
const COOKIEBOT = "Cookiebot";
|
const CONSENTMANAGER = "CONSENTMANAGER";
|
||||||
|
|
||||||
|
const COOKIEFIRST = "COOKIEFIRST";
|
||||||
|
|
||||||
|
const COOKIEBOT = "COOKIEBOT";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return array
|
* @return array
|
||||||
@ -30,9 +47,9 @@ class ManagerTypes
|
|||||||
"externalService" => self::EXTERNAL_SERVICE,
|
"externalService" => self::EXTERNAL_SERVICE,
|
||||||
"agcookiecompliance" => self::AGCOOKIECOMPLIANCE,
|
"agcookiecompliance" => self::AGCOOKIECOMPLIANCE,
|
||||||
"net_cookie_manager" => self::NET_COOKIE_MANAGER,
|
"net_cookie_manager" => self::NET_COOKIE_MANAGER,
|
||||||
Usercentrics::sModuleIncludationInternalName => Usercentrics::sModuleIncludationPublicName,
|
"oxps_usercentrics" => self::USERCENTRICS_MODULE,
|
||||||
Usercentrics::sExternalIncludationInternalName => Usercentrics::sExternalIncludationPublicName,
|
"usercentrics" => self::USERCENTRICS_MANUALLY,
|
||||||
"cmconsentmanager" => self::CONSENTMANAGER,
|
"consentmanager" => self::CONSENTMANAGER,
|
||||||
"cookiefirst" => self::COOKIEFIRST,
|
"cookiefirst" => self::COOKIEFIRST,
|
||||||
"cookiebot" => self::COOKIEBOT,
|
"cookiebot" => self::COOKIEBOT,
|
||||||
];
|
];
|
||||||
@ -44,6 +61,6 @@ class ManagerTypes
|
|||||||
*/
|
*/
|
||||||
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, $this->getManagerList(), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,123 +0,0 @@
|
|||||||
<?php
|
|
||||||
$sLangName = "Deutsch";
|
|
||||||
// -------------------------------
|
|
||||||
// RESOURCE IDENTITFIER = STRING
|
|
||||||
// -------------------------------
|
|
||||||
$aLang = array(
|
|
||||||
'charset' => 'UTF-8',
|
|
||||||
|
|
||||||
'd3mxgoogleanalytics4' => 'Google Analytics 4',
|
|
||||||
'd3mxgoogleanalytics4set' => 'Einstellungen',
|
|
||||||
|
|
||||||
// Base Translations
|
|
||||||
'D3BASECONFIG' => 'Grundeinstellungen',
|
|
||||||
'D3CLOSE' => 'Schließen',
|
|
||||||
'D3NONE' => '- keinen -',
|
|
||||||
'D3CONTAINERID' => 'Container-ID',
|
|
||||||
'D3CONTAINERID_HELP' => '<a target="_blank" href="https://github.com/d3datadevelopment/GoogleAnalytics4/blob/master/Docs/README.md#Container-ID" class="text-muted text-decoration-none"><i class="bi bi-book-half"></i> Was ist die <strong>Container-ID</strong>?</a>',
|
|
||||||
'D3ACTIVATEMOD' => 'Modul aktivieren',
|
|
||||||
'D3CNTRLPARAM' => 'Steuerungsparameter',
|
|
||||||
'D3CNTRLPARAM_HELP' => '<a target="_blank" href="https://github.com/d3datadevelopment/GoogleAnalytics4/blob/master/Docs/README.md#steuerungsparameter" class="text-muted text-decoration-none"><i class="bi bi-book-half"></i> Was ist der <strong>Steuerungsparameter</strong>?</a>',
|
|
||||||
'D3INACTIVATEMOD' => 'Modul ist nicht aktiv! Es werden keine Funktionen ausgespielt!',
|
|
||||||
// Usercentrics Dynamische Optionen
|
|
||||||
'D3USRCNTRCSDYNOPT' => 'Usercentrics Dynamische Optionen',
|
|
||||||
|
|
||||||
// Use debug mode?
|
|
||||||
'D3USEDEBUGMODE' => "Debug-Modus aktivieren",
|
|
||||||
'D3USEDEBUGMODE_HELP' => "Der <strong>Debug Modus</strong> setzt an alle DataLayer ( also Daten Sammlungen im Frontend )
|
|
||||||
<strong>'debug_mode': 'true'</strong> und ermöglicht im Google Tag Manager selbst ein detaillierteres
|
|
||||||
Auswerten des einfließenden Datenstroms.",
|
|
||||||
|
|
||||||
// Use Consentmode?
|
|
||||||
'D3USEGOOGLECONSENTMODE' => "Google Consent Mode 'Default Values' akivieren",
|
|
||||||
'D3USEGOOGLECONSENTMODE_HELP' => "Der <trong>Consent Mode 'Default Values'</trong> setzt im Frontend,
|
|
||||||
vor jedem Sammeln und Senden von Daten, einen Befehl der die Bearbeitung der Daten fortlaufend verändert.<br>
|
|
||||||
<br>
|
|
||||||
Diese Veränderte Berarbeitung heißt im Detail, dass der Google Tag Manager ( GTM )
|
|
||||||
bzw. in erster Instanz die Consent Management Platform ( CMP ) keine Daten zur Verarbeitung an Google sendet,
|
|
||||||
bis ein entsprechendes Zustimmungs-Signal vom Kunden explizit erteilt wurde.<br>
|
|
||||||
Die CMP ist sogar derartig restriktiv, dass diese den Datenstrom zum GTM ( Vorinstanz zu Google Analytics )
|
|
||||||
völlig verhindert, solange keine Zustimmung erteilt wurde.<br>
|
|
||||||
<br>
|
|
||||||
Ein einfaches anschalten dieser Funktion regelt noch <strong>nicht</strong> die völlige Funktionsweise
|
|
||||||
aller beteiligten Instanzen; diese bedarf eine detailliertere Konfiguration!<br>",
|
|
||||||
|
|
||||||
// Use CMP?
|
|
||||||
'D3CMPTABTITLE' => 'Cookie Manager Einstellungen',
|
|
||||||
'D3CMPUSEQ' => 'Consent Management Platform ( CMP ) nutzen?',
|
|
||||||
'D3CMPUSEQ_HELP' => '"Eine Consent Management Platform ( CMP ) ist eine Software, mit der Website-Betreiber
|
|
||||||
oder Anbieter von Web-Apps über ein Banner oder ein Pop-up eine datenschutzrechtliche
|
|
||||||
Einwilligung der Besucher einholen und speichern, bevor Nutzerdaten über
|
|
||||||
Website-Skripte erfasst werden (Tracking)." <a target="_blank" href="https://de.wikipedia.org/wiki/Consent_Management_Platform">Wikipedia Beschreibung</a><br>
|
|
||||||
<br>
|
|
||||||
Um Google Analytics 4 ( <a target="_blank" href="https://marketingplatform.google.com/intl/de/about/analytics/">Google Analytics</a> ) weiterhin nutzen zu können,
|
|
||||||
und dank fortschreitendem Datenschutz unserer personenbezogener Daten, ist das Nutzen eines konformen CMP
|
|
||||||
heute zwangläufig nötig.<br>
|
|
||||||
<br>
|
|
||||||
Diese konformen CMP sind in
|
|
||||||
<a target="_blank" href="https://cmppartnerprogram.withgoogle.com/">offizieller Partnerschaft mit Google ( Liste der Partner )</a>
|
|
||||||
und unterliegen strengen Vorschriften, um ein ordnungsgemäßes Senden und
|
|
||||||
Verarbeiten der Zustimmung unterliegenden Daten sicher stellen zu können.',
|
|
||||||
'D3CMP' => 'Consent Management Platform ( CMP ) wählen',
|
|
||||||
|
|
||||||
// Usercentrics Config
|
|
||||||
// activate Individual Default Values
|
|
||||||
'D3USRCNTRCSCFG_ACT_INDIVDEFVAL' => "Usercentrics individual 'Default Values' aktiveren",
|
|
||||||
// standard Consent
|
|
||||||
'D3USRCNTRCSCFG_STD_CNST' => "GTM Standard Consent",
|
|
||||||
// activate consent mode API
|
|
||||||
'D3USRCNTRCSCFG_ACT_CNSTMDE_API' => "Usercentrics Consent Mode API aktivieren",
|
|
||||||
// consent mode api
|
|
||||||
'D3USRCNTRCSCFG_CNSTMDE_API' => "Consent Mode API",
|
|
||||||
'D3USRCNTRCSCFG_DOCS' => 'Nähere Infos zu den hier konfigurierbaren Einstellungen entnehmen Sie bitte der offiziellen
|
|
||||||
Dokumentation von Usercentrics selbst: <a target="_blank" href="https://docs.usercentrics.com/#/consent-mode" class="text-primary"><i class="bi bi-book-half"></i> Dokumentation</a>',
|
|
||||||
'D3USRCNTRCSCFG_WARNING' => "Bevor Sie hier Anpassungen machen, konsultieren Sie bitte einen technischen Support!<br>
|
|
||||||
Anpassungen können zu Beeinträchtigungen und Ausfall von Funktionen im Frontend führen!",
|
|
||||||
|
|
||||||
// Additional Config
|
|
||||||
// Server-Side tagging
|
|
||||||
'D3SERVERSIDETAGGING' => 'Server-Side tagging',
|
|
||||||
'D3DETAILED_DESC' => 'Detailliertere Erklärung der Funktion',
|
|
||||||
'D3SERVERSIDETAGGING_HINT' => 'Die Conatiner-ID wird weiterhin unter "Grundeinstellungen" eingetragen!<br><br>
|
|
||||||
"Serverseitiges Tagging ist eine neue Möglichkeit, mit Google Tag Manager Ihre Anwendung geräteübergreifend zu verwalten.<br>
|
|
||||||
Servercontainer verwenden dasselbe Tag-, Trigger- und Variablenmodell, das Sie gewohnt sind.<br>
|
|
||||||
Außerdem bieten sie neue Tools, mit denen Sie Nutzeraktivitäten überall messen können." <br>
|
|
||||||
<br>
|
|
||||||
- Quelle <a href="https://developers.google.com/tag-platform/tag-manager/server-side/intro">Developers-Google Server-Side tagging</a><br>
|
|
||||||
<br>
|
|
||||||
<strong>Verändern Sie die Werte nur, wenn Sie Server-Side tagging verwenden wollen! Gegebenenfalls fragen Sie einen technischen Ansprechpartner.</strong>
|
|
||||||
',
|
|
||||||
'D3SERVERSIDETAGGING_TITLE_ACTIVE' => 'Ausführender code',
|
|
||||||
'D3SERVERSIDETAGGING_ACTIVE' => 'Diese Domain wird im <strong>aktiven</strong>-code ausgefüht. Das heißt,
|
|
||||||
dass es sich hierbei um das HTML-Tag <code>script</code> handelt.
|
|
||||||
Dieses kümmert sich darum, dass die im DataLayer
|
|
||||||
zusammengefassten Daten an den GTM weitergeleitet werden.<br>
|
|
||||||
<br>
|
|
||||||
<h4>Folgend eine Darstellung, was genau ausgetauscht wird</h4>
|
|
||||||
<pre>
|
|
||||||
<code>
|
|
||||||
Vorher:
|
|
||||||
https://www.googletagmanager.com/gtm.js?id=
|
|
||||||
|
|
||||||
Nachher:
|
|
||||||
{Domain}?id=
|
|
||||||
</code>
|
|
||||||
</pre>',
|
|
||||||
'D3SERVERSIDETAGGING_TITLE_PASSIVE' => '<u>nicht</u> Ausführneder code',
|
|
||||||
'D3SERVERSIDETAGGING_PASSIVE' => 'Diese Domain wird im <strong>passiven</strong>-code ausgefüht. Das heißt,
|
|
||||||
dass es sich hierbei um das HTML-Tag <code>noscript</code> handelt.
|
|
||||||
Dieses wird ausgeführt, wenn aus einem bestimmten Grund
|
|
||||||
das Javascript nicht ausgeführt wird.<br>
|
|
||||||
( keine Cookies erlaubt, JavaScript-Unterbindung, ... )
|
|
||||||
<br>
|
|
||||||
<h4>Folgend eine Darstellung, was genau ausgetauscht wird</h4>
|
|
||||||
<pre>
|
|
||||||
<code>
|
|
||||||
Vorher:
|
|
||||||
src="https://www.googletagmanager.com/ns.html?id={Container-ID}"
|
|
||||||
|
|
||||||
Nachher:
|
|
||||||
src="{Domain}?id={Container-ID}"
|
|
||||||
</code>
|
|
||||||
</pre>',
|
|
||||||
);
|
|
@ -10,8 +10,6 @@
|
|||||||
* @link https://www.oxidmodule.com
|
* @link https://www.oxidmodule.com
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use D3\GoogleAnalytics4\Application\Model\Constants as Constants;
|
|
||||||
|
|
||||||
$style = '<style type="text/css">
|
$style = '<style type="text/css">
|
||||||
.groupExp a.rc b {font-size:medium;color:#ff3600;}
|
.groupExp a.rc b {font-size:medium;color:#ff3600;}
|
||||||
.groupExp dt .txt,
|
.groupExp dt .txt,
|
||||||
@ -24,18 +22,14 @@ input.confinput:hover {outline:3px solid #ff3600;}
|
|||||||
</style>';
|
</style>';
|
||||||
$aLang = [
|
$aLang = [
|
||||||
'charset' => 'UTF-8',
|
'charset' => 'UTF-8',
|
||||||
|
'SHOP_MODULE_d3_gtm_sContainerID' => 'Container ID',
|
||||||
// STD-Einstellungen
|
'SHOP_MODULE_GROUP_d3_gtm_settings' => 'Einstellungen',
|
||||||
'SHOP_MODULE_GROUP_'.Constants::OXID_MODULE_ID.'_settings' => 'Einstellungen',
|
'SHOP_MODULE_d3_gtm_blGA4enab' => 'GA4 Aktivieren',
|
||||||
'SHOP_MODULE_'. Constants::OXID_MODULE_ID.'_sContainerID' => 'Container ID',
|
'SHOP_MODULE_d3_gtm_blUAenabled' => 'UA Aktivieren',
|
||||||
'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_blGA4enab' => 'GA4 Aktivieren',
|
'SHOP_MODULE_d3_gtm_blEnableDebug' => 'Debug-Modus aktivieren',
|
||||||
'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_blUAenabled' => 'UA Aktivieren',
|
'SHOP_MODULE_GROUP_d3_gtm_settings_serversidetagging' => 'Server-Side tagging',
|
||||||
'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_blEnableDebug' => 'Debug-Modus aktivieren',
|
'SHOP_MODULE_d3_gtm_settings_serversidetagging_js' => 'Servercontainer Ausführender-Code',
|
||||||
|
'HELP_SHOP_MODULE_d3_gtm_settings_serversidetagging_js' => 'Diese Domain wird im <strong>aktiven</strong>-code ausgefüht. Das heißt,
|
||||||
// Serverside - tagging
|
|
||||||
'SHOP_MODULE_GROUP_'.Constants::OXID_MODULE_ID.'_serversidetagging' => 'Server-Side tagging',
|
|
||||||
'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_serversidetagging_js' => 'Servercontainer Ausführender-Code',
|
|
||||||
'HELP_SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_serversidetagging_js' => 'Diese Domain wird im <strong>aktiven</strong>-code ausgefüht. Das heißt,
|
|
||||||
dass es sich hierbei um das HTML-Tag <code>script</code> handelt.
|
dass es sich hierbei um das HTML-Tag <code>script</code> handelt.
|
||||||
Dieses kümmert sich darum, dass die, im data_layer
|
Dieses kümmert sich darum, dass die, im data_layer
|
||||||
zusammengefassten Daten an den GTM weitergeleitet werden.<br>
|
zusammengefassten Daten an den GTM weitergeleitet werden.<br>
|
||||||
@ -52,7 +46,7 @@ Nachher:
|
|||||||
</pre>
|
</pre>
|
||||||
Die Conatiner-ID wird weiterhin im Punkt "Einstellung" eingetragen!
|
Die Conatiner-ID wird weiterhin im Punkt "Einstellung" eingetragen!
|
||||||
',
|
',
|
||||||
'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_serversidetagging_nojs' => 'Servercontainer NICHT Ausführender-Code<br><br>
|
'SHOP_MODULE_d3_gtm_settings_serversidetagging_nojs' => 'Servercontainer NICHT Ausführender-Code<br><br>
|
||||||
"Serverseitiges Tagging ist eine neue Möglichkeit, mit Google Tag Manager Ihre Anwendung geräteübergreifend zu verwalten.<br>
|
"Serverseitiges Tagging ist eine neue Möglichkeit, mit Google Tag Manager Ihre Anwendung geräteübergreifend zu verwalten.<br>
|
||||||
Servercontainer verwenden dasselbe Tag-, Trigger- und Variablenmodell, das Sie gewohnt sind.<br>
|
Servercontainer verwenden dasselbe Tag-, Trigger- und Variablenmodell, das Sie gewohnt sind.<br>
|
||||||
Außerdem bieten sie neue Tools, mit denen Sie Nutzeraktivitäten überall messen können." <br>
|
Außerdem bieten sie neue Tools, mit denen Sie Nutzeraktivitäten überall messen können." <br>
|
||||||
@ -61,7 +55,7 @@ Nachher:
|
|||||||
<br>
|
<br>
|
||||||
<strong>Verändern Sie die Werte nur, wenn Sie Server-Side tagging verwenden wollen!</strong>
|
<strong>Verändern Sie die Werte nur, wenn Sie Server-Side tagging verwenden wollen!</strong>
|
||||||
',
|
',
|
||||||
'HELP_SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_serversidetagging_nojs' => 'Diese Domain wird im <strong>passiven</strong>-code ausgefüht. Das heißt,
|
'HELP_SHOP_MODULE_d3_gtm_settings_serversidetagging_nojs' => 'Diese Domain wird im <strong>passiven</strong>-code ausgefüht. Das heißt,
|
||||||
dass es sich hierbei um das HTML-Tag <code>noscript</code> handelt.
|
dass es sich hierbei um das HTML-Tag <code>noscript</code> handelt.
|
||||||
Dieses wird ausgeführt, wenn aus einem bestimmten Grund
|
Dieses wird ausgeführt, wenn aus einem bestimmten Grund
|
||||||
das Javascript nicht ausgeführt wird.<br>
|
das Javascript nicht ausgeführt wird.<br>
|
||||||
@ -81,29 +75,29 @@ src="{Domain}?id={Container-ID}"
|
|||||||
',
|
',
|
||||||
|
|
||||||
// for cookie manager settings
|
// for cookie manager settings
|
||||||
'SHOP_MODULE_GROUP_'.Constants::OXID_MODULE_ID.'_cookiemanager' => 'Cookie Manager Einstellungen',
|
'SHOP_MODULE_GROUP_d3_gtm_settings_cookiemanager' => 'Cookie Manager Einstellungen',
|
||||||
'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_hasOwnCookieManager' => 'Cookie Manager nutzen?',
|
'SHOP_MODULE_d3_gtm_settings_hasOwnCookieManager' => 'Cookie Manager nutzen?',
|
||||||
'HELP_SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_HAS_STD_MANAGER' => 'Mehr Informationen zu den genannten Coookie-Manager finden Sie auf den folgenden Home-Pages<br><br>
|
'HELP_SHOP_MODULE_d3_gtm_settings_HAS_STD_MANAGER' => 'Mehr Informationen zu den genannten Coookie-Manager finden Sie auf den folgenden Home-Pages<br><br>
|
||||||
<a href="https://consentmanager.net/">Consentmanager</a><br>
|
<a href="https://consentmanager.net/">Consentmanager</a><br>
|
||||||
<a href="https://usercentrics.com/">Usercentrics</a><br>
|
<a href="https://usercentrics.com/">Usercentrics</a><br>
|
||||||
<a href="https://cookiefirst.com">Cookiefirst</a><br>
|
<a href="https://cookiefirst.com">Cookiefirst</a><br>
|
||||||
<hr>
|
<hr>
|
||||||
Bei weiteren Fragen stehen wir gern zur Verfügung! Kontaktieren Sie uns einfach unter <a href="https://www.d3data.de/">https://www.d3data.de/</a>',
|
Bei weiteren Fragen stehen wir gern zur Verfügung! Kontaktieren Sie uns einfach unter <a href="https://www.d3data.de/">https://www.d3data.de/</a>',
|
||||||
'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_HAS_STD_MANAGER' => 'Nutzen Sie eine der folgenden Einbindungen?<br>
|
'SHOP_MODULE_d3_gtm_settings_HAS_STD_MANAGER' => 'Nutzen Sie eine der folgenden Einbindungen?<br>
|
||||||
Dann wählen Sie bitte die zutreffende aus.',
|
Dann wählen Sie bitte die zutreffende aus.',
|
||||||
'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_HAS_STD_MANAGER_NONE' => '---',
|
'SHOP_MODULE_d3_gtm_settings_HAS_STD_MANAGER_NONE' => '---',
|
||||||
'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_HAS_STD_MANAGER_CONSENTMANAGER' => 'consentmanager',
|
'SHOP_MODULE_d3_gtm_settings_HAS_STD_MANAGER_CONSENTMANAGER' => 'consentmanager',
|
||||||
'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_HAS_STD_MANAGER_USERCENTRICS' => 'usercentrics',
|
'SHOP_MODULE_d3_gtm_settings_HAS_STD_MANAGER_USERCENTRICS' => 'usercentrics',
|
||||||
'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_HAS_STD_MANAGER_COOKIEFIRST' => 'cookiefirst',
|
'SHOP_MODULE_d3_gtm_settings_HAS_STD_MANAGER_COOKIEFIRST' => 'cookiefirst',
|
||||||
'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_HAS_STD_MANAGER_COOKIEBOT' => 'Cookiebot',
|
'SHOP_MODULE_d3_gtm_settings_HAS_STD_MANAGER_COOKIEBOT' => 'Cookiebot',
|
||||||
'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_controlParameter' => 'Steuerungsparameter',
|
'SHOP_MODULE_d3_gtm_settings_controlParameter' => 'Steuerungsparameter',
|
||||||
'HELP_SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_controlParameter' => 'Nähere infos zum <a target="_blank" href="https://git.d3data.de/D3Public/GoogleAnalytics4/src/branch/master/Docs">"<strong>Steuerungsparameter</strong>"</a><hr>
|
'HELP_SHOP_MODULE_d3_gtm_settings_controlParameter' => 'Nähere infos zum <a target="_blank" href="https://git.d3data.de/D3Public/GoogleAnalytics4/src/branch/master/Docs">"<strong>Steuerungsparameter</strong>"</a><hr>
|
||||||
<strong>Beachte:</strong><br>
|
<strong>Beachte:</strong><br>
|
||||||
Sofern Sie die <a target="_blank" href="https://consentmanager.net" style="color: blue">consentmanager</a> CMP verwenden,
|
Sofern Sie die <a target="_blank" href="https://consentmanager.net" style="color: blue">consentmanager</a> CMP verwenden,
|
||||||
bitte ich Sie, gründlichst, die Hinweise der <a target="_blank" href="https://git.d3data.de/D3Public/GoogleAnalytics4/src/branch/master/Docs/CMP/consentmanager.md">Moduldokumentation/Consentmanager</a> zu lesen.
|
bitte ich Sie, gründlichst, die Hinweise der <a target="_blank" href="https://git.d3data.de/D3Public/GoogleAnalytics4/src/branch/master/Docs/CMP/consentmanager.md">Moduldokumentation/Consentmanager</a> zu lesen.
|
||||||
',
|
',
|
||||||
'SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_blActivateConsentMode' => "Google Consent Mode 'Default Values' aktivieren",
|
'SHOP_MODULE_d3_gtm_blActivateConsentMode' => "Google Consent Mode 'Default Values' aktivieren",
|
||||||
'HELP_SHOP_MODULE_'.Constants::OXID_MODULE_ID.'_blActivateConsentMode' => 'Diese Einstellung ist zu aktivieren, wenn Sie den Google-Consent-Mode ( Einwilligungsmodus ) verwenden wollen.
|
'HELP_SHOP_MODULE_d3_gtm_blActivateConsentMode' => 'Diese Einstellung ist zu aktivieren, wenn Sie den Google-Consent-Mode ( Einwilligungsmodus ) verwenden wollen.
|
||||||
<hr>
|
<hr>
|
||||||
"Im Einwilligungsmodus können Sie Google über den Cookie- oder App-ID-Einwilligungsstatus Ihrer Nutzer informieren.
|
"Im Einwilligungsmodus können Sie Google über den Cookie- oder App-ID-Einwilligungsstatus Ihrer Nutzer informieren.
|
||||||
Mit Tags wird das Verhalten angepasst. Dabei werden die Einstellungen der Nutzer berücksichtigt." ~ <a href="https://support.google.com/google-ads/answer/10000067">Google Einwilligungsmodus</a>',
|
Mit Tags wird das Verhalten angepasst. Dabei werden die Einstellungen der Nutzer berücksichtigt." ~ <a href="https://support.google.com/google-ads/answer/10000067">Google Einwilligungsmodus</a>',
|
||||||
|
@ -1,108 +0,0 @@
|
|||||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<title>[{$title}]</title>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=[{$charset}]">
|
|
||||||
[{if isset($meta_refresh_sec,$meta_refresh_url)}]
|
|
||||||
<meta http-equiv=Refresh content="[{$meta_refresh_sec}];URL=[{$meta_refresh_url|replace:"&":"&"}]">
|
|
||||||
[{/if}]
|
|
||||||
<link rel="shortcut icon" href="[{$oViewConf->getBaseDir()}]favicon.ico">
|
|
||||||
|
|
||||||
[{block name="admin_headitem_inccss"}]
|
|
||||||
<link rel="stylesheet" href="[{$oViewConf->getResourceUrl()}]main.css">
|
|
||||||
<link rel="stylesheet" href="[{$oViewConf->getResourceUrl()}]colors_[{$oViewConf->getEdition()|lower}].css">
|
|
||||||
<link rel="stylesheet" type="text/css" href="[{$oViewConf->getResourceUrl()}]yui/build/assets/skins/sam/container.css">
|
|
||||||
[{/block}]
|
|
||||||
|
|
||||||
[{block name="admin_headitem_incjs"}]
|
|
||||||
<script type="text/javascript" src="[{$oViewConf->getResourceUrl()}]yui/build/utilities/utilities.js"></script>
|
|
||||||
<script type="text/javascript" src="[{$oViewConf->getResourceUrl()}]yui/build/container/container-min.js"></script>
|
|
||||||
<script type="text/javascript" src="[{$oViewConf->getResourceUrl()}]yui/oxid-help.js"></script>
|
|
||||||
[{/block}]
|
|
||||||
|
|
||||||
[{block name="admin_headitem_js"}]
|
|
||||||
<script type="text/javascript">
|
|
||||||
<!--
|
|
||||||
// standard messages
|
|
||||||
var sUnassignMessage = "[{oxmultilang ident='GENERAL_YOUWANTTOUNASSIGN'}]";
|
|
||||||
var sDeleteMessage = "[{oxmultilang ident='GENERAL_YOUWANTTODELETE'}]";
|
|
||||||
|
|
||||||
// class info
|
|
||||||
var sDefClass = '[{$default_edit}]';
|
|
||||||
var sActClass = '[{$actlocation}]';
|
|
||||||
|
|
||||||
[{if $updatelist == 1}]
|
|
||||||
window.onload = function ()
|
|
||||||
{
|
|
||||||
top.oxid.admin.updateList('[{$oxid}]');
|
|
||||||
}
|
|
||||||
[{/if}]
|
|
||||||
|
|
||||||
|
|
||||||
var ajaxpopup = null;
|
|
||||||
function showDialog( sParams )
|
|
||||||
{
|
|
||||||
ajaxpopup = window.open('[{$oViewConf->getSelfLink()|replace:"&":"&"}]'+sParams, 'ajaxpopup', 'width=850,height=680,scrollbars=yes,resizable=yes');
|
|
||||||
}
|
|
||||||
|
|
||||||
function focusPopup()
|
|
||||||
{
|
|
||||||
if ( ajaxpopup )ajaxpopup.focus();
|
|
||||||
}
|
|
||||||
|
|
||||||
window.onclick = focusPopup;
|
|
||||||
|
|
||||||
function cleanupLongDesc( sValue )
|
|
||||||
{
|
|
||||||
if ( sValue == '<br>' || sValue == '<br />' ) {
|
|
||||||
return '';
|
|
||||||
}
|
|
||||||
return sValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
function copyLongDesc( sIdent )
|
|
||||||
{
|
|
||||||
var textVal = null;
|
|
||||||
try {
|
|
||||||
if ( WPro.editors[sIdent] != null ) {
|
|
||||||
WPro.editors[sIdent].prepareSubmission();
|
|
||||||
textVal = cleanupLongDesc( WPro.editors[sIdent].getValue() );
|
|
||||||
}
|
|
||||||
} catch(err) {
|
|
||||||
var varEl = document.getElementById(sIdent);
|
|
||||||
if (varEl != null) {
|
|
||||||
textVal = cleanupLongDesc( varEl.value );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (textVal == null) {
|
|
||||||
var varName = 'editor_'+sIdent;
|
|
||||||
var varEl = document.getElementById(varName);
|
|
||||||
if (varEl != null) {
|
|
||||||
textVal = cleanupLongDesc( varEl.value );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (textVal != null) {
|
|
||||||
var oTarget = document.getElementsByName( 'editval['+ sIdent + ']' );
|
|
||||||
if ( oTarget != null && ( oField = oTarget.item( 0 ) ) != null ) {
|
|
||||||
oField.value = textVal;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-->
|
|
||||||
</script>
|
|
||||||
[{/block}]
|
|
||||||
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
[{include file="tooltips.tpl"}]
|
|
||||||
<div id="oxajax_data"></div>
|
|
||||||
|
|
||||||
<div class="[{$box|default:'box'}]" style="height: 100%;">
|
|
||||||
[{include file="inc_error.tpl" Errorlist=$Errors.default}]
|
|
||||||
|
|
||||||
<!-- Input help popup -->
|
|
||||||
<div id="helpTextContainer" class="yui-skin-sam">
|
|
||||||
<div id="helpPanel"></div>
|
|
||||||
</div>
|
|
@ -1,198 +0,0 @@
|
|||||||
[{include file="ga4/admin/d3ga4uiheaditem.tpl" title="GENERAL_ADMIN_TITLE"|oxmultilangassign}]
|
|
||||||
<style>
|
|
||||||
body {
|
|
||||||
background-image: linear-gradient(to top, #d5d4d0 0%, #d5d4d0 1%, #eeeeec 31%, #efeeec 75%, #e9e9e7 100%);
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
|
|
||||||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
|
|
||||||
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css">
|
|
||||||
|
|
||||||
[{if $readonly}]
|
|
||||||
[{assign var="readonly" value="readonly disabled"}]
|
|
||||||
[{else}]
|
|
||||||
[{assign var="readonly" value=""}]
|
|
||||||
[{/if}]
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<form name="d3gtmformedit" id="d3gtmformedit" action="[{$oViewConf->getSelfLink()}]" enctype="multipart/form-data" method="post">
|
|
||||||
<div class="row">
|
|
||||||
<div class="col-6">
|
|
||||||
[{$oViewConf->getHiddenSid()}]
|
|
||||||
<input type="hidden" name="cl" value="[{$oViewConf->getActiveClassName()}]">
|
|
||||||
<input type="hidden" name="fnc" value="">
|
|
||||||
<input type="hidden" name="editlanguage" value="[{$editlanguage}]">
|
|
||||||
|
|
||||||
<div class="card mb-5">
|
|
||||||
<div class="card-header">
|
|
||||||
[{oxmultilang ident="D3BASECONFIG"}]
|
|
||||||
</div>
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="form-check mb-3">
|
|
||||||
<input class="form-check-input" type="checkbox" value="" name="editval[bool][_blEnableGa4]" [{if $d3ViewObject->d3GetModuleConfigParam('_blEnableGa4')}]checked[{/if}] id="blGA4enab">
|
|
||||||
<label class="form-check-label" for="flexCheckDefault">
|
|
||||||
[{oxmultilang ident="D3ACTIVATEMOD"}] [{if false === $d3ViewObject->d3GetModuleConfigParam('_blEnableGa4')}]<span style="color: red">[{oxmultilang ident="D3INACTIVATEMOD"}]</span>[{/if}]
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div class="mb-3">
|
|
||||||
<div class="input-group w-50">
|
|
||||||
<span class="input-group-text" id="basic-addon3">[{oxmultilang ident="D3CONTAINERID"}]</span>
|
|
||||||
<input type="text" class="form-control" id="_sContainerID" name="editval[str][_sContainerID]" aria-describedby="basic-addon3" value="[{$d3ViewObject->d3GetModuleConfigParam('_sContainerID')}]">
|
|
||||||
</div>
|
|
||||||
<div class="text-muted">[{oxmultilang ident="D3CONTAINERID_HELP"}]</div>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" value="" id="_blEnableDebug" name="editval[bool][_blEnableDebug]" [{if $d3ViewObject->d3GetModuleConfigParam('_blEnableDebug')}]checked[{/if}]>
|
|
||||||
<label class="form-check-label" for="flexCheckDefault">
|
|
||||||
[{oxmultilang ident="D3USEDEBUGMODE"}][{oxinputhelp ident="D3USEDEBUGMODE_HELP"}]
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" value="" id="_blActivateConsentMode" name="editval[bool][_blEnableConsentMode]" [{if $d3ViewObject->d3GetModuleConfigParam('_blEnableConsentMode')}]checked[{/if}]>
|
|
||||||
<label class="form-check-label" for="flexCheckChecked">
|
|
||||||
[{oxmultilang ident="D3USEGOOGLECONSENTMODE"}][{oxinputhelp ident="D3USEGOOGLECONSENTMODE_HELP"}]
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<button type="submit" name="save" class="btn btn-light" onClick="Javascript:document.d3gtmformedit.fnc.value='save'">[{oxmultilang ident="GENERAL_SAVE"}]</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="col-6">
|
|
||||||
<div class="card border border-0">
|
|
||||||
<div class="accordion" id="accordionPanelsStayOpenExample">
|
|
||||||
<div class="accordion-item">
|
|
||||||
<h2 class="accordion-header">
|
|
||||||
<button class="accordion-button" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-cmpsettings" aria-expanded="true" aria-controls="panelsStayOpen-cmpsettings">
|
|
||||||
[{oxmultilang ident="D3CMPTABTITLE"}]
|
|
||||||
</button>
|
|
||||||
</h2>
|
|
||||||
<div id="panelsStayOpen-cmpsettings" class="accordion-collapse collapse show">
|
|
||||||
<div class="accordion-body">
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" name="editval[bool][_blEnableOwnCookieManager]" value="" id="_hasOwnCookieManager" [{if $d3ViewObject->d3GetModuleConfigParam('_blEnableOwnCookieManager')}]checked[{/if}]>
|
|
||||||
<label class="form-check-label" for="flexCheckChecked">
|
|
||||||
[{oxmultilang ident="D3CMPUSEQ"}][{oxinputhelp ident="D3CMPUSEQ_HELP"}]
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div class="mb-3">
|
|
||||||
<label>
|
|
||||||
[{oxmultilang ident="D3CMP"}]
|
|
||||||
</label>
|
|
||||||
<select class="form-select w-50" name="editval[select][_HAS_STD_MANAGER]" aria-label="Default select example">
|
|
||||||
<option value="NONE" selected>[{oxmultilang ident="D3NONE"}]</option>
|
|
||||||
[{foreach from=$d3ManagerTypeArray key="sInternalName" item="sPublicName" name="editval[aCmpNameArray]"}]
|
|
||||||
<option value="[{$sInternalName}]" [{if $sInternalName === $d3CurrentCMP}]SELECTED[{/if}]>[{$sPublicName}]</option>
|
|
||||||
[{/foreach}]
|
|
||||||
</select>
|
|
||||||
</div>
|
|
||||||
<div>
|
|
||||||
<div class="input-group w-75">
|
|
||||||
<span class="input-group-text" id="basic-addon3">[{oxmultilang ident="D3CNTRLPARAM"}]</span>
|
|
||||||
<input type="text" class="form-control" id="_controlParameter" name="editval[str][_sControlParameter]" value="[{$d3ViewObject->d3GetModuleConfigParam('_sControlParameter')}]" aria-describedby="basic-addon3">
|
|
||||||
</div>
|
|
||||||
<div class="text-muted">[{oxmultilang ident="D3CNTRLPARAM_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>
|
|
||||||
<div class="accordion-item">
|
|
||||||
<h2 class="accordion-header">
|
|
||||||
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-serversidetagging" aria-expanded="false" aria-controls="panelsStayOpen-serversidetagging">
|
|
||||||
[{oxmultilang ident="D3SERVERSIDETAGGING"}]
|
|
||||||
</button>
|
|
||||||
</h2>
|
|
||||||
<div id="panelsStayOpen-serversidetagging" class="accordion-collapse collapse">
|
|
||||||
<div class="accordion-body">
|
|
||||||
<div class="card bg-light rounded mb-3">
|
|
||||||
<div class="card-body">
|
|
||||||
[{oxmultilang ident="D3SERVERSIDETAGGING_HINT"}]
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="input-group mb-3">
|
|
||||||
<span class="input-group-text w-25" id="basic-addon3">[{oxmultilang ident="D3SERVERSIDETAGGING_TITLE_ACTIVE"}]</span>
|
|
||||||
<input type="text" class="form-control" id="_serversidetagging_js" name="editval[str][_sServersidetagging_js]" value="[{$d3ViewObject->d3GetModuleConfigParam('_sServersidetagging_js')}]" aria-describedby="basic-addon3">
|
|
||||||
</div>
|
|
||||||
<div class="input-group mb-3">
|
|
||||||
<span class="input-group-text w-25" id="basic-addon3">[{oxmultilang ident="D3SERVERSIDETAGGING_TITLE_PASSIVE"}]</span>
|
|
||||||
<input type="text" class="form-control" id="_serversidetagging_nojs" name="editval[str][_sServersidetagging_nojs]" value="[{$d3ViewObject->d3GetModuleConfigParam('_sServersidetagging_nojs')}]" aria-describedby="basic-addon3">
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<button type="button" class="btn btn-light mt-3" data-bs-toggle="modal" data-bs-target="#exampleModal">
|
|
||||||
[{oxmultilang ident="D3DETAILED_DESC"}]
|
|
||||||
</button>
|
|
||||||
|
|
||||||
<!-- Modal -->
|
|
||||||
<div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
|
|
||||||
<div class="modal-dialog">
|
|
||||||
<div class="modal-content">
|
|
||||||
<div class="modal-body">
|
|
||||||
<h4>[{oxmultilang ident="D3SERVERSIDETAGGING_TITLE_ACTIVE"}]</h4>
|
|
||||||
[{oxmultilang ident="D3SERVERSIDETAGGING_ACTIVE"}]
|
|
||||||
<hr>
|
|
||||||
<h4>[{oxmultilang ident="D3SERVERSIDETAGGING_TITLE_PASSIVE"}]</h4>
|
|
||||||
[{oxmultilang ident="D3SERVERSIDETAGGING_PASSIVE"}]
|
|
||||||
</div>
|
|
||||||
<div class="modal-footer">
|
|
||||||
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">[{oxmultilang ident="D3CLOSE"}]</button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</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()}]
|
|
||||||
<div class="accordion-item">
|
|
||||||
<h2 class="accordion-header">
|
|
||||||
<button class="accordion-button collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#panelsStayOpen-usercentricsdynamicoptions" aria-expanded="false" aria-controls="panelsStayOpen-usercentricsdynamicoptions">
|
|
||||||
[{oxmultilang ident="D3USRCNTRCSDYNOPT"}]
|
|
||||||
</button>
|
|
||||||
</h2>
|
|
||||||
<div id="panelsStayOpen-usercentricsdynamicoptions" class="accordion-collapse collapse">
|
|
||||||
<div class="accordion-body">
|
|
||||||
<div class="card bg-light rounded mb-3">
|
|
||||||
<div class="card-body">
|
|
||||||
<div class="text-danger mb-3">
|
|
||||||
[{oxmultilang ident="D3USRCNTRCSCFG_WARNING"}]
|
|
||||||
</div>
|
|
||||||
[{oxmultilang ident="D3USRCNTRCSCFG_DOCS"}]
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" value="" id="enabledefaultmeasurementvalues" name="editval[bool][_blEnableMeasurementCapabilities]" [{if $d3ViewObject->d3GetModuleConfigParam('_blEnableMeasurementCapabilities')}]checked[{/if}]>
|
|
||||||
<label class="form-check-label" for="flexCheckDefault">
|
|
||||||
[{oxmultilang ident="D3USRCNTRCSCFG_ACT_INDIVDEFVAL"}]
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div class="input-group mb-3">
|
|
||||||
<span class="input-group-text w-25" id="basic-addon3">[{oxmultilang ident="D3USRCNTRCSCFG_STD_CNST"}]</span>
|
|
||||||
<textarea name="editval[str][_sMeasurementCapabilities]" class="form-control" rows="15">[{$d3ViewObject->d3GetModuleConfigParam('_sDefaultMeasurementCapabilities')}]</textarea>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="form-check">
|
|
||||||
<input class="form-check-input" type="checkbox" value="" id="enableUsercentricsConsentModeApi" name="editval[bool][_blEnableUsercentricsConsentModeApi]" [{if $d3ViewObject->d3GetModuleConfigParam('_blEnableUsercentricsConsentModeApi')}]checked[{/if}]>
|
|
||||||
<label class="form-check-label" for="flexCheckDefault">
|
|
||||||
[{oxmultilang ident="D3USRCNTRCSCFG_ACT_CNSTMDE_API"}]
|
|
||||||
</label>
|
|
||||||
</div>
|
|
||||||
<div class="input-group mb-3">
|
|
||||||
<span class="input-group-text w-25" id="basic-addon3">[{oxmultilang ident="D3USRCNTRCSCFG_CNSTMDE_API"}]</span>
|
|
||||||
<textarea name="editval[str][_sUsercentricsConsentModeApi]" class="form-control" rows="40">[{$d3ViewObject->d3GetModuleConfigParam('_sDefaultUsercentricsConsentModeApi')}]</textarea>
|
|
||||||
</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}]
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</form>
|
|
||||||
</div>
|
|
@ -1,38 +1,27 @@
|
|||||||
[{* Always prepare the data layer to avoid errors *}]
|
[{* Always prepare the data layer to avoid errors *}]
|
||||||
[{if $oViewConf->isGA4enabled()}]
|
<script>
|
||||||
[{assign var="d3GtmContainerIdString" value=$oViewConf->getGtmContainerId()}]
|
var dataLayer = [{$oViewConf->getGtmDataLayer()}] || [];
|
||||||
<script>
|
</script>
|
||||||
var dataLayer = [{$oViewConf->getGtmDataLayer()}] || [];
|
|
||||||
</script>
|
|
||||||
[{/if}]
|
|
||||||
|
|
||||||
[{if $oViewConf->isGA4enabled() and $oViewConf->D3blShowGtmScript()}]
|
[{assign var="d3GtmContainerIdString" value=$oViewConf->getGtmContainerId()}]
|
||||||
|
|
||||||
|
[{if $oViewConf->D3blShowGtmScript()}]
|
||||||
[{if $d3GtmContainerIdString}]
|
[{if $d3GtmContainerIdString}]
|
||||||
[{strip}]
|
[{strip}]
|
||||||
|
|
||||||
[{if $oViewConf->isGtmConsentModeSetActivated()}]
|
[{if $oViewConf->isGtmConsentModeSetActivated()}]
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
[{if $oViewConf->d3IsUsercentricsCMPChosen() and $oViewConf->d3GetModuleConfigParam('_blEnableMeasurementCapabilities')}]
|
|
||||||
[{$oViewConf->d3GetModuleConfigParam('_sMeasurementCapabilities')|strip}]
|
|
||||||
[{else}]
|
|
||||||
function gtag() {
|
function gtag() {
|
||||||
dataLayer.push(arguments);
|
dataLayer.push(arguments);
|
||||||
}
|
}
|
||||||
|
|
||||||
gtag("consent", "default", {
|
gtag("consent", "default", {
|
||||||
ad_user_data: "denied",
|
ad_user_data: "denied",
|
||||||
ad_personalization: "denied",
|
ad_personalization: "denied",
|
||||||
ad_storage: "denied",
|
ad_storage: "denied",
|
||||||
analytics_storage: "denied",
|
analytics_storage: "denied",
|
||||||
wait_for_update: 2000
|
wait_for_update: 2000
|
||||||
});
|
});
|
||||||
[{/if}]
|
|
||||||
</script>
|
|
||||||
[{/if}]
|
|
||||||
|
|
||||||
[{if $oViewConf->d3IsUsercentricsCMPChosen() and $oViewConf->d3GetModuleConfigParam('_blEnableUsercentricsConsentModeApi')}]
|
|
||||||
<script type="text/javascript">
|
|
||||||
[{$oViewConf->d3GetModuleConfigParam('_sUsercentricsConsentModeApi')|strip}]
|
|
||||||
</script>
|
</script>
|
||||||
[{/if}]
|
[{/if}]
|
||||||
|
|
||||||
|
@ -1,3 +0,0 @@
|
|||||||
[{$smarty.block.parent}]
|
|
||||||
|
|
||||||
[{include file="event/add_payment_info.tpl"}]
|
|
@ -1,3 +0,0 @@
|
|||||||
[{$smarty.block.parent}]
|
|
||||||
|
|
||||||
[{include file="event/begin_checkout.tpl"}]
|
|
@ -1,3 +1,3 @@
|
|||||||
[{$smarty.block.parent}]
|
[{$smarty.block.parent}]
|
||||||
|
|
||||||
[{include file="event/view_cart.tpl"}]
|
[{include file="event/view_cart.tpl"}]
|
@ -1,3 +1,3 @@
|
|||||||
[{$smarty.block.parent}]
|
[{$smarty.block.parent}]
|
||||||
|
|
||||||
[{include file="event/view_item.tpl"}]
|
[{include file="event/view_item.tpl"}]
|
@ -1,53 +0,0 @@
|
|||||||
[{*$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}]
|
|
@ -1,52 +0,0 @@
|
|||||||
[{*$oxcmp_basket|get_class_methods|dumpvar*}]
|
|
||||||
|
|
||||||
[{assign var="d3BasketPrice" value=$oxcmp_basket->getPrice()}]
|
|
||||||
[{assign var="d3BasketObject" value=$oxcmp_basket}]
|
|
||||||
[{assign var='gtmCartArticles' value=$d3BasketObject->getBasketArticles()}]
|
|
||||||
[{assign var="gtmCurrency" value=$oView->getActCurrency()}]
|
|
||||||
|
|
||||||
[{block name="d3_ga4_begin_checkout_block"}]
|
|
||||||
[{capture name="d3_ga4_begin_checkout"}]
|
|
||||||
[{strip}]
|
|
||||||
dataLayer.push({"event": null, "eventLabel": null, "ecommerce": null}); /* Clear the previous ecommerce object. */
|
|
||||||
dataLayer.push({
|
|
||||||
'event': 'begin_checkout',
|
|
||||||
'eventLabel':'Begin of checkout',
|
|
||||||
'ecommerce':
|
|
||||||
{
|
|
||||||
'actionField': "Begin",
|
|
||||||
'currency': "[{$gtmCurrency->name}]",
|
|
||||||
'value': [{$d3BasketPrice->getPrice()}],
|
|
||||||
'coupon': '[{foreach from=$oxcmp_basket->getVouchers() item=sVoucher key=key name=Voucher}][{$sVoucher->sVoucherNr}][{if !$smarty.foreach.Voucher.last}], [{/if}][{/foreach}]',
|
|
||||||
'items':
|
|
||||||
[
|
|
||||||
[{foreach from=$oxcmp_basket->getContents() item=basketitem name=gtmCartContents key=basketindex}]
|
|
||||||
[{assign var="d3oItemPrice" 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': [{$d3oItemPrice->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.d3_ga4_begin_checkout}]
|
|
||||||
[{/block}]
|
|
218
CHANGELOG.md
218
CHANGELOG.md
@ -4,223 +4,11 @@ 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/2.17.2...rel_2.x) - 2024-x
|
|
||||||
|
|
||||||
## [2.21.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.20.1...2.21.0) - 2024-09-19
|
|
||||||
### Fixed
|
|
||||||
- missing parameters for widget.php call
|
|
||||||
|
|
||||||
## [2.20.1](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.20.0...2.20.1) - 2024-09-11
|
|
||||||
### Fixed
|
|
||||||
- missing currency name in begin_checkout template
|
|
||||||
## [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
|
|
||||||
- usage of not yet existing function
|
|
||||||
|
|
||||||
## [2.18.2](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.18.1...2.18.2) - 2024-06-25
|
|
||||||
### Fixed
|
|
||||||
- oe-console apply-configuration triggers on-activate and overwrites existing values
|
|
||||||
|
|
||||||
## [2.18.1](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.18.0...2.18.1) - 2024-06-04
|
|
||||||
### Fixed
|
|
||||||
- missing return statement, on null/ none
|
|
||||||
|
|
||||||
## [2.18.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.17.2...2.18.0) - 2024-06-03
|
|
||||||
### Added
|
|
||||||
- trait for generalized method
|
|
||||||
- new admin UI
|
|
||||||
- additional check for properly activated module
|
|
||||||
- admin headitem alternative
|
|
||||||
- usercentrips step/ option 2
|
|
||||||
- group CMP-Functionalities/ properties into own Model
|
|
||||||
- additional help texts, translations, explanations
|
|
||||||
- extended docs
|
|
||||||
- auto safe on first approach ga4 + cmp-mod
|
|
||||||
- onActivate/ onDeactivate
|
|
||||||
## Changed
|
|
||||||
- declare module settings consistency
|
|
||||||
- configParamGetter
|
|
||||||
- clear dead code
|
|
||||||
- template code upgrade
|
|
||||||
- lang text
|
|
||||||
- amount of save-buttons
|
|
||||||
- Usercentrics-Class constants and adjust global-module-code to it
|
|
||||||
- CMP-output in tpl
|
|
||||||
- clear code and adjust Naming
|
|
||||||
## Fixed
|
|
||||||
- false class-property declaration
|
|
||||||
- wrong to-save param
|
|
||||||
## Removed
|
|
||||||
- deprecated and obsolete module-settings
|
|
||||||
- false composer xml-excludation
|
|
||||||
|
|
||||||
## [2.17.2](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.17.1...2.17.2) - 2024-04-11
|
|
||||||
### Fixed
|
|
||||||
- error on missing necessary-component
|
|
||||||
|
|
||||||
## [2.17.1](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.17.0...2.17.1) - 2024-04-10
|
|
||||||
### Fixed
|
|
||||||
- second call of getGtmContainerId() ( returned false )
|
|
||||||
|
|
||||||
## [2.17.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.16.0...2.17.0) - 2024-04-10
|
|
||||||
### Added
|
|
||||||
- Google-Analytics default values
|
|
||||||
- default values switch ( admin module settings )
|
|
||||||
- translations
|
|
||||||
## Changed
|
|
||||||
- centralized metadata-id
|
|
||||||
|
|
||||||
## [2.16.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.15.0...2.16.0) - 2024-03-20
|
|
||||||
### Added
|
|
||||||
- ( Google ) Server-Side tagging usability
|
|
||||||
|
|
||||||
## [2.15.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.14.0...2.15.0) - 2024-02-05
|
|
||||||
### Fixed
|
|
||||||
- missing Component-ArticleDetails extension, missing ManufacturerListController extension
|
|
||||||
|
|
||||||
## [2.14.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.13.1...2.14.0) - 2023-01-22
|
|
||||||
### Added
|
|
||||||
- add_to_cart Event to several new shop-pages (landing-page, Account, category article-list, start)
|
|
||||||
- PHPStan code-cleanup
|
|
||||||
### Changed
|
|
||||||
- template structure
|
|
||||||
- code cleanup
|
|
||||||
|
|
||||||
## [2.13.1](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.13.0...2.13.1) - 2023-01-03
|
|
||||||
### Fixed
|
|
||||||
- error on array-count at zero entries
|
|
||||||
|
|
||||||
## [2.13.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.12.0...2.13.0) - 2023-09-13
|
|
||||||
### Added
|
|
||||||
- extended Docs
|
|
||||||
### Changed
|
|
||||||
- control-param name
|
|
||||||
- control-param function
|
|
||||||
- adjusted check for set control-param
|
|
||||||
- consentmanager-script-adjustments
|
|
||||||
|
|
||||||
## [2.12.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.11.1...2.12.0) - 2023-09-07
|
|
||||||
### Added
|
|
||||||
- cookiebot functionality
|
|
||||||
|
|
||||||
## [2.11.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.10.1...2.11.0) - 2023-08-23
|
|
||||||
### Added
|
|
||||||
- manufacturer extension
|
|
||||||
- working debug_mode
|
|
||||||
### Changed
|
|
||||||
- check for 'article has been removed'
|
|
||||||
- general template cleanup
|
|
||||||
|
|
||||||
## [2.10.1](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.10.0...2.10.1) - 2023-08-03
|
|
||||||
### Added
|
|
||||||
- missing param to identify the event
|
|
||||||
|
|
||||||
## [2.10.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.9.2...2.10.0) - 2023-08-02
|
|
||||||
### Added
|
|
||||||
- new Event "remove_from_cart"
|
|
||||||
|
|
||||||
## [2.9.2](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.9.1...2.9.2) - 2023-06-29
|
|
||||||
### Fixed
|
|
||||||
- wrong variable for category-object check
|
|
||||||
|
|
||||||
## [2.9.1](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.9.0...2.9.1) - 2023-06-27
|
|
||||||
### Fixed
|
|
||||||
- deny method call on no category
|
|
||||||
|
|
||||||
## [2.9.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.8.0...2.9.0) - 2023-06-27
|
|
||||||
### Added
|
|
||||||
- Cookiefirst usability
|
|
||||||
|
|
||||||
## [2.8.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.7.0...2.8.0) - 2023-06-23
|
|
||||||
### Added
|
|
||||||
- Method to get the in order used Payment-Name
|
|
||||||
- Method to get the current Article Category
|
|
||||||
- Following Entries to dedicated event-templates
|
|
||||||
- coupon
|
|
||||||
- paymentType
|
|
||||||
- item_list_name
|
|
||||||
- item_category
|
|
||||||
### Changed
|
|
||||||
- all used template-files have a more dedicated name
|
|
||||||
- general code cleanup
|
|
||||||
|
|
||||||
## [2.7.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/2.6.0...2.7.0) - 2023-06-19
|
|
||||||
### Changed
|
|
||||||
- add_to_cart event template-structure
|
|
||||||
|
|
||||||
## [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.17.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/1.16.0...1.17.0) - 2024-04-11
|
## [1.17.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/1.16.0...1.17.0) - 2024-04-11
|
||||||
### Added
|
### Added
|
||||||
- multilang translations
|
- multilang translations
|
||||||
- GA4 consent-mode default values
|
- GA4 consent-mode default values
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
- metadataID centralized
|
- metadataID centralized
|
||||||
|
|
||||||
@ -228,6 +16,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
### Added
|
### Added
|
||||||
- ( Google ) Server-Side tagging usability
|
- ( Google ) Server-Side tagging usability
|
||||||
|
|
||||||
|
## [1.15.1](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/1.15.0...1.15.1) - 2024-04-11
|
||||||
|
### Fixed
|
||||||
|
- false processing of template during missing necessary-component
|
||||||
|
|
||||||
## [1.15.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/1.14.0...1.15.0) - 2024-01-25
|
## [1.15.0](https://git.d3data.de/D3Public/GoogleAnalytics4/compare/1.14.0...1.15.0) - 2024-01-25
|
||||||
### Fixed
|
### Fixed
|
||||||
- missing Component-ArticleDetails extension, missing ManufacturerListController extension
|
- missing Component-ArticleDetails extension, missing ManufacturerListController extension
|
||||||
|
@ -5,19 +5,43 @@ Die Einbindung dieser Event-Templates erfolgt über TPL-Blöcke unter `source/mo
|
|||||||
*Hinweis: nicht alle templates sind bereits gefüllt. Wünschen Sie die Implementierung eines unausgefüllten templates?
|
*Hinweis: nicht alle templates sind bereits gefüllt. Wünschen Sie die Implementierung eines unausgefüllten templates?
|
||||||
Kommen Sie auf uns zu unter https://www.d3data.de/
|
Kommen Sie auf uns zu unter https://www.d3data.de/
|
||||||
|
|
||||||
## Container-ID
|
|
||||||
Diese finden Sie im "Google-Tag-Manager"-Arbeitsbereich in der Navigationsleiste.
|
|
||||||
Sie beginnt mit GTM, gefolgt von einem Bindestrich und einer Zeichenkette.
|
|
||||||
|
|
||||||
Diese ID wird benötigt, um Google anzuweise, zu welchem "Google Tag Manager"-Arbeitsbereich die
|
|
||||||
gesammelten Daten im Daten-Stream geleitet werden sollen.
|
|
||||||
|
|
||||||
## Steuerungsparameter
|
## Steuerungsparameter
|
||||||
Tragen Sie hier im Normalfall die ID des zu prüfenden Cookies ein.
|
Tragen Sie hier im Normalfall die ID des zu prüfenden Cookies ein.
|
||||||
In bestimmten Fällen, müssen Sie hier alternative Werte eintragen. Diese Fälle sind bedingt
|
In bestimmten Fällen, müssen Sie hier alternative Werte eintragen. Diese Fälle sind bedingt
|
||||||
nach der gewählten CMP (Consent Manager Platform).
|
nach der gewählten CMP (Consent Manager Platform).
|
||||||
|
|
||||||
> nähere Infos unter [CMP](#consent-manager-platform-cmp)
|
> nähere Infos unter [CMP](#consent-manager-platform-cmp)
|
||||||
|
|
||||||
|
## Blöcke
|
||||||
|
Für den geregelten Ablauf sind folgende Blöcke nötig:
|
||||||
|
- Suchergebnisse
|
||||||
|
- Blockname: search_results
|
||||||
|
- Datei: page/search/search.tpl
|
||||||
|
- GA4 Event: view_search_results
|
||||||
|
- Artikelliste
|
||||||
|
- Blockname: page_list_productlist
|
||||||
|
- Datei: page/list/list.tpl
|
||||||
|
- GA4 Event: view_item_list
|
||||||
|
- Detailseite
|
||||||
|
- Blockname: details_productmain_title
|
||||||
|
- Datei: page/details/inc/productmain.tpl
|
||||||
|
- GA4 Event: view_item
|
||||||
|
- dem WK hinzufügen (button)
|
||||||
|
- Blockname: details_productmain_tobasket
|
||||||
|
- Datei: page/details/inc/productmain.tpl
|
||||||
|
- GA4 Event: add_to_cart
|
||||||
|
- aus dem WK entfernen
|
||||||
|
- Blockname: checkout_basket_main
|
||||||
|
- Datei: page/checkout/basket.tpl
|
||||||
|
- GA4 Event: remove_from_cart
|
||||||
|
- Warenkorb
|
||||||
|
- Blockname: checkout_basket_main
|
||||||
|
- Datei: page/checkout/basket.tpl
|
||||||
|
- GA4 Event: view_cart
|
||||||
|
- abgeschlossener Kauf
|
||||||
|
- Blockname: checkout_thankyou_main
|
||||||
|
- Datei: page/checkout/thankyou.tpl
|
||||||
|
- GA4 Event: purchase
|
||||||
|
|
||||||
## Verfügbare Datalayer Variablen
|
## Verfügbare Datalayer Variablen
|
||||||
Für die einfachste Übersicht der enthaltenen Daten empfehle ich den Vorschau-Modus vom Google Tag Manager.
|
Für die einfachste Übersicht der enthaltenen Daten empfehle ich den Vorschau-Modus vom Google Tag Manager.
|
||||||
@ -56,7 +80,7 @@ Aktivieren Sie anschließend diese Weiche. Setzen Sie den Haken bei "Eigenen Coo
|
|||||||
- In der Usercentrics-Verwaltung die Services "Google Analytics" und "Google Tag Manager" anlegen
|
- In der Usercentrics-Verwaltung die Services "Google Analytics" und "Google Tag Manager" anlegen
|
||||||
- Den Service ```Google Tag Manager``` in den Moduleinstellungen des 'Google Analytics 4' unter
|
- Den Service ```Google Tag Manager``` in den Moduleinstellungen des 'Google Analytics 4' unter
|
||||||
Google Tag Manager eintragen
|
Google Tag Manager eintragen
|
||||||
|
-
|
||||||
- [Consent Management Provider](https://www.consentmanager.net/)
|
- [Consent Management Provider](https://www.consentmanager.net/)
|
||||||
- In der Consentmanager-Oberfläche den Anbieter "Google Tag Manager" mit der ID s905 hinzufügen
|
- In der Consentmanager-Oberfläche den Anbieter "Google Tag Manager" mit der ID s905 hinzufügen
|
||||||
- Im Frontend, im consentmanager-Pop-up nach dem 'Google Tag Manager' suchen
|
- Im Frontend, im consentmanager-Pop-up nach dem 'Google Tag Manager' suchen
|
||||||
@ -64,9 +88,6 @@ Aktivieren Sie anschließend diese Weiche. Setzen Sie den Haken bei "Eigenen Coo
|
|||||||
- prüfen, ob ein Cookie vorgegeben ist
|
- prüfen, ob ein Cookie vorgegeben ist
|
||||||
- sonst, in der Consentmanager-Oberfläche Cookie-Liste entsprechendes Cookie suchen und im Admin unter
|
- sonst, in der Consentmanager-Oberfläche Cookie-Liste entsprechendes Cookie suchen und im Admin unter
|
||||||
```Einstell. > Cookie Manager Einstellungen > Cookie-ID``` eintragen
|
```Einstell. > Cookie Manager Einstellungen > Cookie-ID``` eintragen
|
||||||
|
|
||||||
- [Cookiefirst](https://cookiefirst.com)
|
- [Cookiebot](https://www.cookiebot.com)
|
||||||
- im Cookiefirst-Hub das jeweilige Cookie finden underen zugeordnete Kategorie kopieren
|
- Nähere Informationen folgen bald! Bis dato, besuchen Sie bitte die offizielle Webseite.
|
||||||
- die kopierte Kategory wird nun in den Einstellungen des Moduls hinterlegt:
|
|
||||||
```Erweiterungen > Module > Google Analytics 4 > Einstell. > Cookie Manager Einstellungen > Steuerungsparameter (vormals CookieID)```
|
|
||||||
- **Wichtig!** bei Nutzung des Consent-Managers von Google, muss zwangsläufig die Einstellung "Cookie manager Nutzen?" __ausgeschalten!__ werden
|
|
@ -18,14 +18,9 @@ namespace D3\GoogleAnalytics4\Modules\Core{
|
|||||||
}
|
}
|
||||||
|
|
||||||
namespace D3\GoogleAnalytics4\Modules\Application\Model{
|
namespace D3\GoogleAnalytics4\Modules\Application\Model{
|
||||||
|
|
||||||
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 Basket_parent extends \OxidEsales\Eshop\Application\Model\Basket {}
|
||||||
class Manufacturer_parent extends \OxidEsales\Eshop\Application\Model\Manufacturer {}
|
class Manufacturer_parent extends \OxidEsales\Eshop\Application\Model\Manufacturer {}
|
||||||
|
|
||||||
class gtmPayment_parent extends Payment {}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace D3\GoogleAnalytics4\Modules\Application\Controller{
|
namespace D3\GoogleAnalytics4\Modules\Application\Controller{
|
||||||
|
@ -120,4 +120,4 @@ class BasketController extends BasketController_parent
|
|||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -4,5 +4,41 @@ namespace D3\GoogleAnalytics4\Modules\Application\Model;
|
|||||||
|
|
||||||
class Category extends Category_parent
|
class Category extends Category_parent
|
||||||
{
|
{
|
||||||
use articleTreeStructure;
|
/**
|
||||||
|
* @param int $indexOfArray
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getSplitCategoryArray(int $indexOfArray = -1, bool $bShallTakeStd = false) :string
|
||||||
|
{
|
||||||
|
if ($bShallTakeStd){
|
||||||
|
$splitCatArray =
|
||||||
|
array_values(
|
||||||
|
array_filter(
|
||||||
|
explode(
|
||||||
|
'/',
|
||||||
|
trim(
|
||||||
|
parse_url(
|
||||||
|
$this->getLink(),
|
||||||
|
5
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (($indexOfArray >= 0) and (false === empty($splitCatArray[$indexOfArray]))){
|
||||||
|
return $splitCatArray[$indexOfArray];
|
||||||
|
}else{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
trim(
|
||||||
|
parse_url(
|
||||||
|
$this->getLink(),
|
||||||
|
5
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
@ -4,5 +4,41 @@ namespace D3\GoogleAnalytics4\Modules\Application\Model;
|
|||||||
|
|
||||||
class Manufacturer extends Manufacturer_parent
|
class Manufacturer extends Manufacturer_parent
|
||||||
{
|
{
|
||||||
use articleTreeStructure;
|
/**
|
||||||
|
* @param int $indexOfArray
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getSplitCategoryArray(int $indexOfArray = -1, bool $bShallTakeStd = false) :string
|
||||||
|
{
|
||||||
|
if ($bShallTakeStd){
|
||||||
|
$splitCatArray =
|
||||||
|
array_values(
|
||||||
|
array_filter(
|
||||||
|
explode(
|
||||||
|
'/',
|
||||||
|
trim(
|
||||||
|
parse_url(
|
||||||
|
$this->getLink(),
|
||||||
|
5
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
if (($indexOfArray >= 0) and (false === empty($splitCatArray[$indexOfArray]))){
|
||||||
|
return $splitCatArray[$indexOfArray];
|
||||||
|
}else{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
trim(
|
||||||
|
parse_url(
|
||||||
|
$this->getLink(),
|
||||||
|
5
|
||||||
|
)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,11 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace D3\GoogleAnalytics4\Modules\Application\Model;
|
|
||||||
|
|
||||||
|
|
||||||
class Vendor extends \OxidEsales\Eshop\Application\Model\Vendor
|
|
||||||
{
|
|
||||||
use articleTreeStructure;
|
|
||||||
}
|
|
@ -1,44 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace D3\GoogleAnalytics4\Modules\Application\Model;
|
|
||||||
|
|
||||||
trait articleTreeStructure
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @param int $indexOfArray
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getSplitCategoryArray(int $indexOfArray = -1, bool $bShallTakeStd = false) :string
|
|
||||||
{
|
|
||||||
if ($bShallTakeStd){
|
|
||||||
$splitCatArray =
|
|
||||||
array_values(
|
|
||||||
array_filter(
|
|
||||||
explode(
|
|
||||||
'/',
|
|
||||||
trim(
|
|
||||||
parse_url(
|
|
||||||
$this->getLink(),
|
|
||||||
5
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
if (($indexOfArray >= 0) and (false === empty($splitCatArray[$indexOfArray]))){
|
|
||||||
return $splitCatArray[$indexOfArray];
|
|
||||||
}else{
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return
|
|
||||||
trim(
|
|
||||||
parse_url(
|
|
||||||
$this->getLink(),
|
|
||||||
5
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace D3\GoogleAnalytics4\Modules\Application\Model;
|
|
||||||
|
|
||||||
|
|
||||||
use OxidEsales\Eshop\Application\Model\Payment;
|
|
||||||
use OxidEsales\Eshop\Core\Registry;
|
|
||||||
|
|
||||||
class gtmPayment extends gtmPayment_parent
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function gtmGetSelectedPaymentName() :string
|
|
||||||
{
|
|
||||||
return $this->getFieldData('oxpayments__oxdesc')?: 'No payment name available';
|
|
||||||
}
|
|
||||||
}
|
|
@ -12,36 +12,24 @@
|
|||||||
|
|
||||||
namespace D3\GoogleAnalytics4\Modules\Core;
|
namespace D3\GoogleAnalytics4\Modules\Core;
|
||||||
|
|
||||||
use D3\GoogleAnalytics4\Application\Model\CMP\Usercentrics;
|
|
||||||
use D3\GoogleAnalytics4\Application\Model\Constants;
|
|
||||||
use D3\GoogleAnalytics4\Application\Model\ManagerHandler;
|
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\Application\Model\User;
|
use OxidEsales\Eshop\Application\Model\User;
|
||||||
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;
|
|
||||||
use Psr\Container\ContainerExceptionInterface;
|
|
||||||
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;
|
||||||
|
private $sCookieManagerType = null;
|
||||||
// used CMP
|
|
||||||
private $sCookieManagerType = null;#
|
|
||||||
|
|
||||||
// isModule Activated properly?
|
|
||||||
private $blGA4enabled = null;
|
|
||||||
|
|
||||||
public function getGtmContainerId()
|
public function getGtmContainerId()
|
||||||
{
|
{
|
||||||
if ($this->sContainerId === null)
|
if ($this->sContainerId === null)
|
||||||
{
|
{
|
||||||
$this->sContainerId = $this->d3GetModuleConfigParam("_sContainerID");
|
$this->sContainerId = Registry::getConfig()->getConfigParam('d3_gtm_sContainerID');
|
||||||
}
|
}
|
||||||
return $this->sContainerId;
|
return $this->sContainerId;
|
||||||
}
|
}
|
||||||
@ -58,12 +46,13 @@ class ViewConfig extends ViewConfig_parent
|
|||||||
$this->sCookieManagerType = $oManagerHandler->getCurrManager();
|
$this->sCookieManagerType = $oManagerHandler->getCurrManager();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function shallUseOwnCookieManager() :bool
|
public function shallUseOwnCookieManager() :bool
|
||||||
{
|
{
|
||||||
return (bool) $this->d3GetModuleConfigParam('_blEnableOwnCookieManager');
|
return (bool) Registry::getConfig()->getConfigParam('d3_gtm_settings_hasOwnCookieManager');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -74,18 +63,14 @@ class ViewConfig extends ViewConfig_parent
|
|||||||
/** @var Config $oConfig */
|
/** @var Config $oConfig */
|
||||||
$oConfig = Registry::getConfig();
|
$oConfig = Registry::getConfig();
|
||||||
|
|
||||||
if (false === $this->isGA4enabled()){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// No Cookie Manager in use
|
// No Cookie Manager in use
|
||||||
if (false === $this->shallUseOwnCookieManager()) {
|
if (!$this->shallUseOwnCookieManager()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->defineCookieManagerType();
|
$this->defineCookieManagerType();
|
||||||
|
|
||||||
$sCookieID = trim($this->d3GetModuleConfigParam('_sControlParameter'));
|
$sCookieID = trim($oConfig->getConfigParam('d3_gtm_settings_controlParameter'));
|
||||||
|
|
||||||
// Netensio Cookie Manager
|
// Netensio Cookie Manager
|
||||||
if ($this->sCookieManagerType === ManagerTypes::NET_COOKIE_MANAGER) {
|
if ($this->sCookieManagerType === ManagerTypes::NET_COOKIE_MANAGER) {
|
||||||
@ -104,8 +89,8 @@ class ViewConfig extends ViewConfig_parent
|
|||||||
|
|
||||||
// UserCentrics or consentmanager
|
// UserCentrics or consentmanager
|
||||||
if (
|
if (
|
||||||
$this->sCookieManagerType === Usercentrics::sModuleIncludationInternalName
|
$this->sCookieManagerType === ManagerTypes::USERCENTRICS_MODULE
|
||||||
or $this->sCookieManagerType === Usercentrics::sExternalIncludationInternalName
|
or $this->sCookieManagerType === ManagerTypes::USERCENTRICS_MANUALLY
|
||||||
or $this->sCookieManagerType === ManagerTypes::CONSENTMANAGER
|
or $this->sCookieManagerType === ManagerTypes::CONSENTMANAGER
|
||||||
or $this->sCookieManagerType === ManagerTypes::COOKIEFIRST
|
or $this->sCookieManagerType === ManagerTypes::COOKIEFIRST
|
||||||
or $this->sCookieManagerType === ManagerTypes::COOKIEBOT
|
or $this->sCookieManagerType === ManagerTypes::COOKIEBOT
|
||||||
@ -116,6 +101,7 @@ class ViewConfig extends ViewConfig_parent
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Cookie Manager not (yet) supported
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,15 +112,15 @@ class ViewConfig extends ViewConfig_parent
|
|||||||
*/
|
*/
|
||||||
public function getGtmScriptAttributes() :string
|
public function getGtmScriptAttributes() :string
|
||||||
{
|
{
|
||||||
$sControlParameter = trim($this->d3GetModuleConfigParam('_sControlParameter'));
|
$sControlParameter = trim(Registry::getConfig()->getConfigParam('d3_gtm_settings_controlParameter'));
|
||||||
|
|
||||||
if (false === $this->shallUseOwnCookieManager() or ($sControlParameter === '')){
|
if (false === $this->shallUseOwnCookieManager() or ($sControlParameter === '')){
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (
|
if (
|
||||||
$this->sCookieManagerType === Usercentrics::sModuleIncludationInternalName
|
$this->sCookieManagerType === ManagerTypes::USERCENTRICS_MODULE
|
||||||
or $this->sCookieManagerType === Usercentrics::sExternalIncludationInternalName
|
or $this->sCookieManagerType === ManagerTypes::USERCENTRICS_MANUALLY
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return 'data-usercentrics="' . $sControlParameter . '" type="text/plain" async=""';
|
return 'data-usercentrics="' . $sControlParameter . '" type="text/plain" async=""';
|
||||||
@ -156,31 +142,40 @@ class ViewConfig extends ViewConfig_parent
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private $blGA4enabled = null;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @throws ContainerExceptionInterface
|
* @return null
|
||||||
* @throws NotFoundExceptionInterface
|
|
||||||
*/
|
*/
|
||||||
public function isGA4enabled()
|
public function isGA4enabled()
|
||||||
{
|
{
|
||||||
if ($this->blGA4enabled === null)
|
if ($this->blGA4enabled === null)
|
||||||
{
|
{
|
||||||
$this->blGA4enabled = $this->d3GetModuleConfigParam("_blEnableGA4");
|
$this->sContainerId = Registry::getConfig()->getConfigParam('d3_gtm_blEnableGA4');
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->blGA4enabled;
|
return $this->blGA4enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return bool
|
||||||
|
*/
|
||||||
public function isGtmConsentModeSetActivated() :bool
|
public function isGtmConsentModeSetActivated() :bool
|
||||||
{
|
{
|
||||||
return $this->d3GetModuleConfigParam("_blEnableConsentMode")?: false;
|
return Registry::getConfig()->getConfigParam('d3_gtm_blActivateConsentMode');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return false|string
|
||||||
|
*/
|
||||||
public function getGtmDataLayer()
|
public function getGtmDataLayer()
|
||||||
{
|
{
|
||||||
if (!$this->getGtmContainerId()) return "[]";
|
if (!$this->getGtmContainerId()) return "[]";
|
||||||
|
|
||||||
$oConfig = Registry::getConfig();
|
$oConfig = Registry::getConfig();
|
||||||
$oView = $oConfig->getTopActiveView();
|
$oView = $oConfig->getTopActiveView();
|
||||||
|
|
||||||
/** @var User|false|null $oUser */
|
/** @var User|false|null $oUser */
|
||||||
$oUser = $oConfig->getUser();
|
$oUser = $oConfig->getUser();
|
||||||
|
|
||||||
@ -212,49 +207,37 @@ class ViewConfig extends ViewConfig_parent
|
|||||||
return json_encode([$dataLayer], JSON_PRETTY_PRINT);
|
return json_encode([$dataLayer], JSON_PRETTY_PRINT);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function isDebugModeOn() :bool
|
|
||||||
{
|
|
||||||
return $this->d3GetModuleConfigParam("_blEnableDebug")?: false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return string
|
|
||||||
* @throws ContainerExceptionInterface
|
|
||||||
* @throws NotFoundExceptionInterface
|
|
||||||
*/
|
|
||||||
public function getServerSidetaggingJsDomain() :string
|
|
||||||
{
|
|
||||||
return $this->d3GetModuleConfigParam("_sServersidetagging_js")?: "";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return string
|
|
||||||
* @throws ContainerExceptionInterface
|
|
||||||
* @throws NotFoundExceptionInterface
|
|
||||||
*/
|
|
||||||
public function getServerSidetaggingNoJsDomain() :string
|
|
||||||
{
|
|
||||||
return $this->d3GetModuleConfigParam('_sServersidetagging_nojs')?: "";
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $configParamName
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function d3GetModuleConfigParam(string $configParamName)
|
|
||||||
{
|
|
||||||
return Registry::getConfig()->getShopConfVar(Constants::OXID_MODULE_ID.$configParamName, null, Constants::OXID_MODULE_ID);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return bool
|
* @return bool
|
||||||
*/
|
*/
|
||||||
public function d3IsUsercentricsCMPChosen() :bool
|
public function isDebugModeOn() :bool
|
||||||
{
|
{
|
||||||
$sCMPPubName = $this->d3GetModuleConfigParam('_HAS_STD_MANAGER');
|
return Registry::getConfig()->getConfigParam('d3_gtm_blEnableDebug');
|
||||||
$aPossibleCMP = (oxNew(ManagerTypes::class))->getManagerList();
|
}
|
||||||
|
|
||||||
return (bool) ($sCMPPubName === Usercentrics::sExternalIncludationInternalName
|
/**
|
||||||
or $sCMPPubName === Usercentrics::sModuleIncludationInternalName);
|
* @param $listId
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function isPromotionList($listId)
|
||||||
|
{
|
||||||
|
$oConfig = Registry::getConfig();
|
||||||
|
$aPromotionListIds = $oConfig->getConfigParam("") ?? ['bargainItems', 'newItems', 'topBox', 'alsoBought', 'accessories', 'cross'];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getServerSidetaggingJsDomain() :string
|
||||||
|
{
|
||||||
|
return Registry::getConfig()->getConfigParam('d3_gtm_settings_serversidetagging_js');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getServerSidetaggingNoJsDomain() :string
|
||||||
|
{
|
||||||
|
return Registry::getConfig()->getConfigParam('d3_gtm_settings_serversidetagging_nojs');
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,43 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace D3\GoogleAnalytics4\Modules\Core;
|
|
||||||
|
|
||||||
use OxidEsales\EshopCommunity\Core\Registry;
|
|
||||||
|
|
||||||
class WidgetControl extends WidgetControl_parent{
|
|
||||||
protected function getFrontendStartControllerKey() // phpcs:ignore PSR2.Methods.MethodDeclaration.Underscore
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* array (
|
|
||||||
'force_sid' => '2pistlaubiq58qtg3moudei0la',
|
|
||||||
'lang' => '0',
|
|
||||||
'actcontrol' => 'details',
|
|
||||||
'anid' => '064471',
|
|
||||||
'cl' => 'oxwarticledetails',
|
|
||||||
'cnid' => '159dd0f2fb2bd6e24ace53a0f1913797',
|
|
||||||
'listtype' => 'list',
|
|
||||||
'nocookie' => '1',
|
|
||||||
'oxwparent' => 'details',
|
|
||||||
'sid' => '2pistlaubiq58qtg3moudei0la',
|
|
||||||
'stoken' => 'A22D0F9E',
|
|
||||||
'varselid' =>
|
|
||||||
array (
|
|
||||||
0 => 'b842982bf522aa839bd88221f562fce8',
|
|
||||||
),
|
|
||||||
)
|
|
||||||
*/
|
|
||||||
$sScriptName = $_SERVER['SCRIPT_NAME'];
|
|
||||||
if($sScriptName !== '/widget.php')
|
|
||||||
{
|
|
||||||
return parent::getFrontendStartControllerKey();
|
|
||||||
}
|
|
||||||
|
|
||||||
$aParameter = $_GET;
|
|
||||||
if(is_null($aParameter['actcontrol']) and is_null($aParameter['oxwparent']))
|
|
||||||
{
|
|
||||||
return 'D3\GoogleAnalytics4\Application\Component\Widget\d3GtmStartWidget';
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent::getFrontendStartControllerKey();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,44 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace D3\GoogleAnalytics4\Setup;
|
|
||||||
|
|
||||||
|
|
||||||
use D3\GoogleAnalytics4\Application\Model\Constants;
|
|
||||||
use OxidEsales\Eshop\Core\Registry;
|
|
||||||
use OxidEsales\Eshop\Core\ViewConfig;
|
|
||||||
|
|
||||||
class Actions
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @param string $sVarType
|
|
||||||
* @param string $sSettingName
|
|
||||||
* @param string $sSettingValue
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public function d3SaveDefaultSettings(string $sVarType, string $sSettingName, string $sSettingValue){
|
|
||||||
$oConfig = Registry::getConfig();
|
|
||||||
|
|
||||||
if ($this->d3GetModuleConfigParam($sSettingName) and (trim($this->d3GetModuleConfigParam($sSettingName)) !== trim($sSettingValue))){
|
|
||||||
$sSettingValue = trim($this->d3GetModuleConfigParam($sSettingName));
|
|
||||||
}
|
|
||||||
|
|
||||||
$oConfig->saveShopConfVar(
|
|
||||||
$sVarType,
|
|
||||||
Constants::OXID_MODULE_ID.$sSettingName,
|
|
||||||
$sSettingValue,
|
|
||||||
$oConfig->getShopId(),
|
|
||||||
Constants::OXID_MODULE_ID
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $configParamName
|
|
||||||
* @return mixed
|
|
||||||
*/
|
|
||||||
public function d3GetModuleConfigParam(string $configParamName)
|
|
||||||
{
|
|
||||||
return Registry::getConfig()->getShopConfVar(Constants::OXID_MODULE_ID.$configParamName, null, Constants::OXID_MODULE_ID);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
namespace D3\GoogleAnalytics4\Setup;
|
|
||||||
|
|
||||||
|
|
||||||
class Events
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public static function onActivate()
|
|
||||||
{
|
|
||||||
$oActions = oxNew(Actions::class);
|
|
||||||
$oActions->d3SaveDefaultSettings(
|
|
||||||
'str',
|
|
||||||
'_sServersidetagging_js',
|
|
||||||
'https://www.googletagmanager.com/gtm.js'
|
|
||||||
);
|
|
||||||
$oActions->d3SaveDefaultSettings(
|
|
||||||
'str',
|
|
||||||
'_sServersidetagging_nojs',
|
|
||||||
'https://www.googletagmanager.com/ns.html'
|
|
||||||
);
|
|
||||||
$oActions->d3SaveDefaultSettings(
|
|
||||||
'str',
|
|
||||||
'_sContainerID',
|
|
||||||
'GTM-'
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return void
|
|
||||||
*/
|
|
||||||
public static function onDeactivate(){}
|
|
||||||
}
|
|
111
composer.json
111
composer.json
@ -1,56 +1,57 @@
|
|||||||
{
|
{
|
||||||
"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"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"email": "support@shopmodule.com"
|
"email": "support@shopmodule.com"
|
||||||
},
|
},
|
||||||
"extra": {
|
"extra": {
|
||||||
"oxideshop": {
|
"oxideshop": {
|
||||||
"blacklist-filter": [
|
"blacklist-filter": [
|
||||||
"*.md",
|
"*.md",
|
||||||
"composer.json",
|
"composer.json",
|
||||||
".php-cs-fixer.php",
|
".php-cs-fixer.php",
|
||||||
"*.neon"
|
"*.xml",
|
||||||
],
|
"*.neon"
|
||||||
"target-directory": "d3/googleanalytics4"
|
],
|
||||||
}
|
"target-directory": "d3/googleanalytics4"
|
||||||
},
|
}
|
||||||
"require": {
|
},
|
||||||
"php": "7.1 - 8.2",
|
"require": {
|
||||||
"oxid-esales/oxideshop-ce": "^6.5.3",
|
"php": ">=7.1",
|
||||||
"google/apiclient":" ^2.0",
|
"oxid-esales/oxideshop-ce": "v6.0 - v6.3",
|
||||||
"phpstan/phpstan": "^1.10"
|
"google/apiclient":"^2.0",
|
||||||
},
|
"phpstan/phpstan": "^1.8"
|
||||||
"autoload": {
|
},
|
||||||
"psr-4": {
|
"autoload": {
|
||||||
"D3\\GoogleAnalytics4\\": "../../../source/modules/d3/googleanalytics4"
|
"psr-4": {
|
||||||
}
|
"D3\\GoogleAnalytics4\\": "../../../source/modules/d3/googleanalytics4"
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
8
menu.xml
8
menu.xml
@ -1,8 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="ISO-8859-15"?>
|
|
||||||
<OX>
|
|
||||||
<OXMENU id="d3mxd3modules">
|
|
||||||
<MAINMENU id="d3mxgoogleanalytics4">
|
|
||||||
<SUBMENU id="d3mxgoogleanalytics4set" cl="d3googleanalytics4_main"/>
|
|
||||||
</MAINMENU>
|
|
||||||
</OXMENU>
|
|
||||||
</OX>
|
|
231
metadata.php
231
metadata.php
@ -1,6 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
use D3\GoogleAnalytics4\Application\Controller\Admin\GA4AdminUserInterface_main as GA4AdminUserInterfaceMainController;
|
|
||||||
use D3\GoogleAnalytics4\Application\Model\Constants as Constants;
|
use D3\GoogleAnalytics4\Application\Model\Constants as Constants;
|
||||||
use D3\GoogleAnalytics4\Modules\Application\Component\d3GtmBasketComponentExtension;
|
use D3\GoogleAnalytics4\Modules\Application\Component\d3GtmBasketComponentExtension;
|
||||||
use D3\GoogleAnalytics4\Modules\Application\Component\Widget\d3GtmWidgetArticleDetails as d3GtmWidgetArticleDetails;
|
use D3\GoogleAnalytics4\Modules\Application\Component\Widget\d3GtmWidgetArticleDetails as d3GtmWidgetArticleDetails;
|
||||||
@ -16,7 +15,6 @@ use D3\GoogleAnalytics4\Modules\Application\Controller\d3GtmStartController;
|
|||||||
use D3\GoogleAnalytics4\Modules\Application\Controller\ThankYouController;
|
use D3\GoogleAnalytics4\Modules\Application\Controller\ThankYouController;
|
||||||
use D3\GoogleAnalytics4\Modules\Application\Model\Basket as Basket;
|
use D3\GoogleAnalytics4\Modules\Application\Model\Basket as Basket;
|
||||||
use D3\GoogleAnalytics4\Modules\Application\Model\Category as Category;
|
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\Application\Model\Manufacturer as Manufacturer;
|
||||||
use D3\GoogleAnalytics4\Modules\Core\ViewConfig;
|
use D3\GoogleAnalytics4\Modules\Core\ViewConfig;
|
||||||
use OxidEsales\Eshop\Application\Component\BasketComponent as OEBasketComponent;
|
use OxidEsales\Eshop\Application\Component\BasketComponent as OEBasketComponent;
|
||||||
@ -34,13 +32,12 @@ use OxidEsales\Eshop\Application\Controller\ThankYouController as OEThankYouCont
|
|||||||
use OxidEsales\Eshop\Application\Model\Basket as OEBasket;
|
use OxidEsales\Eshop\Application\Model\Basket as OEBasket;
|
||||||
use OxidEsales\Eshop\Application\Model\Category as OECategory;
|
use OxidEsales\Eshop\Application\Model\Category as OECategory;
|
||||||
use OxidEsales\Eshop\Application\Model\Manufacturer as OEManufacturer;
|
use OxidEsales\Eshop\Application\Model\Manufacturer as OEManufacturer;
|
||||||
use OxidEsales\Eshop\Application\Model\Payment as OEPayment;
|
|
||||||
use OxidEsales\Eshop\Core\ViewConfig as OEViewConfig;
|
use OxidEsales\Eshop\Core\ViewConfig as OEViewConfig;
|
||||||
|
|
||||||
$sMetadataVersion = '2.1';
|
$sMetadataVersion = '2.1';
|
||||||
$aModule = [
|
$aModule = [
|
||||||
'id' => Constants::OXID_MODULE_ID,
|
'id' => Constants::OXID_MODULE_ID,
|
||||||
'title' => 'Google Analytics 4',
|
'title' => 'Google Analytics 4',
|
||||||
'description' => "Dieses Modul bietet die Möglichkeit in Ihrem OXID eShop (6.x) die neue 'Property'
|
'description' => "Dieses Modul bietet die Möglichkeit in Ihrem OXID eShop (6.x) die neue 'Property'
|
||||||
Google Analytics 4 (GA4) von Google zu integrieren.<br>
|
Google Analytics 4 (GA4) von Google zu integrieren.<br>
|
||||||
Hierfür stehen Ihnen verschiedene 'templates' zur verfügung,
|
Hierfür stehen Ihnen verschiedene 'templates' zur verfügung,
|
||||||
@ -51,156 +48,188 @@ $aModule = [
|
|||||||
<hr>
|
<hr>
|
||||||
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.21.0',
|
'version' => '1.17.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' => [
|
'extend' => [
|
||||||
'd3googleanalytics4_main' => GA4AdminUserInterfaceMainController::class
|
|
||||||
],
|
|
||||||
'extend' => [
|
|
||||||
// Core
|
// Core
|
||||||
OEViewConfig::class => ViewConfig::class,
|
OEViewConfig::class => ViewConfig::class,
|
||||||
\OxidEsales\Eshop\Core\WidgetControl::class => \D3\GoogleAnalytics4\Modules\Core\WidgetControl::class,
|
|
||||||
|
|
||||||
// Model
|
// Model
|
||||||
OECategory::class => Category::class,
|
OECategory::class => Category::class,
|
||||||
OEBasket::class => Basket::class,
|
OEBasket::class => Basket::class,
|
||||||
OEManufacturer::class => Manufacturer::class,
|
OEManufacturer::class => Manufacturer::class,
|
||||||
OEPayment::class => gtmPayment::class,
|
|
||||||
|
|
||||||
// Controller
|
// Controller
|
||||||
OEBasketController::class => BasketController::class,
|
OEBasketController::class => BasketController::class,
|
||||||
OEThankYouController::class => ThankYouController::class,
|
OEThankYouController::class => ThankYouController::class,
|
||||||
OEArticleListController::class => ArticleListController_AddToCartHelpMethods::class,
|
OEArticleListController::class => ArticleListController_AddToCartHelpMethods::class,
|
||||||
OEArticleDetailsController::class => ArticleDetailsController::class,
|
OEArticleDetailsController::class => ArticleDetailsController::class,
|
||||||
OEAccountNoticeListController::class => d3GtmAccountNoticeListController::class,
|
OEAccountNoticeListController::class => d3GtmAccountNoticeListController::class,
|
||||||
OEAccountRecommlistController::class => d3GtmAccountRecommlistController::class,
|
OEAccountRecommlistController::class => d3GtmAccountRecommlistController::class,
|
||||||
OEAccountWishlistController::class => d3GtmAccountWishlistController::class,
|
OEAccountWishlistController::class => d3GtmAccountWishlistController::class,
|
||||||
OEStartController::class => d3GtmStartController::class,
|
OEStartController::class => d3GtmStartController::class,
|
||||||
OESearchController::class => d3GtmSearchController::class,
|
OESearchController::class => d3GtmSearchController::class,
|
||||||
OEManufacturerListController::class => d3GtmManufacturerListController::class,
|
OEManufacturerListController::class => d3GtmManufacturerListController::class,
|
||||||
|
|
||||||
// Component
|
// Component
|
||||||
OEArticleDetails::class => d3GtmWidgetArticleDetails::class,
|
OEArticleDetails::class => d3GtmWidgetArticleDetails::class,
|
||||||
OEBasketComponent::class => d3GtmBasketComponentExtension::class,
|
OEBasketComponent::class => d3GtmBasketComponentExtension::class,
|
||||||
],
|
],
|
||||||
'templates' => [
|
'templates' => [
|
||||||
// Event files that store the GA4 Event-Information
|
// Event files that store the GA4 Event-Information
|
||||||
'event/add_to_cart.tpl' => 'd3/googleanalytics4/Application/views/event/add_to_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/view_item.tpl' => 'd3/googleanalytics4/Application/views/event/view_item.tpl',
|
'event/view_cart.tpl' => 'd3/googleanalytics4/Application/views/event/view_cart.tpl',
|
||||||
'event/begin_checkout.tpl' => 'd3/googleanalytics4/Application/views/event/begin_checkout.tpl',
|
'event/purchase.tpl' => 'd3/googleanalytics4/Application/views/event/purchase.tpl',
|
||||||
'event/add_payment_info.tpl' => 'd3/googleanalytics4/Application/views/event/add_payment_info.tpl',
|
'event/view_item_list.tpl' => 'd3/googleanalytics4/Application/views/event/view_item_list.tpl',
|
||||||
'event/purchase.tpl' => 'd3/googleanalytics4/Application/views/event/purchase.tpl',
|
'event/view_search_result.tpl' => 'd3/googleanalytics4/Application/views/event/view_search_result.tpl',
|
||||||
'event/view_item_list.tpl' => 'd3/googleanalytics4/Application/views/event/view_item_list.tpl',
|
'event/remove_from_cart.tpl' => 'd3/googleanalytics4/Application/views/event/remove_from_cart.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
|
// 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/->
|
||||||
'page/account/d3gtmnoticelist.tpl' => 'd3/googleanalytics4/Application/views/tpl/page/account/d3gtmnoticelist.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/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/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',
|
|
||||||
],
|
],
|
||||||
'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' => '/Application/views/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' => '/Application/views/blocks/_gtm_nojs.tpl'
|
'file' => '/Application/views/blocks/_gtm_nojs.tpl'
|
||||||
],
|
],
|
||||||
// details
|
// details
|
||||||
[
|
[
|
||||||
'template' => 'page/details/inc/productmain.tpl',
|
'template' => 'page/details/inc/productmain.tpl',
|
||||||
'block' => 'details_productmain_title',
|
'block' => 'details_productmain_title',
|
||||||
'file' => '/Application/views/blocks/view_item.tpl',
|
'file' => '/Application/views/blocks/view_item.tpl',
|
||||||
'position' => 150
|
'position' => 150
|
||||||
],
|
],
|
||||||
// View Cart
|
// checkout
|
||||||
[
|
[
|
||||||
'template' => 'page/checkout/basket.tpl',
|
'template' => 'page/checkout/basket.tpl',
|
||||||
'block' => 'checkout_basket_main',
|
'block' => 'checkout_basket_main',
|
||||||
'file' => '/Application/views/blocks/view_cart.tpl'
|
'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',
|
|
||||||
'position' => 150
|
|
||||||
],
|
|
||||||
// remove_from_cart
|
|
||||||
[
|
|
||||||
'template' => 'page/checkout/basket.tpl',
|
|
||||||
'block' => 'checkout_basket_main',
|
|
||||||
'file' => '/Application/views/blocks/remove_from_cart.tpl',
|
|
||||||
'position' => 150
|
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'template' => 'page/checkout/thankyou.tpl',
|
'template' => 'page/checkout/thankyou.tpl',
|
||||||
'block' => 'checkout_thankyou_main',
|
'block' => 'checkout_thankyou_main',
|
||||||
'file' => '/Application/views/blocks/purchase.tpl'
|
'file' => '/Application/views/blocks/purchase.tpl'
|
||||||
],
|
],
|
||||||
// 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' => '/Application/views/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' => '/Application/views/blocks/view_search_result.tpl',
|
'file' => '/Application/views/blocks/view_search_result.tpl',
|
||||||
|
'position' => 150
|
||||||
|
],
|
||||||
|
// add_to_cart
|
||||||
|
[
|
||||||
|
'template' => 'page/details/inc/productmain.tpl',
|
||||||
|
'block' => 'details_productmain_tobasket',
|
||||||
|
'file' => '/Application/views/blocks/details_productmain_tobasket.tpl',
|
||||||
'position' => 150
|
'position' => 150
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'template' => 'page/list/list.tpl',
|
'template' => 'page/list/list.tpl',
|
||||||
'block' => 'page_list_listbody',
|
'block' => 'page_list_listbody',
|
||||||
'file' => '/Application/views/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' => '/Application/views/blocks/start_welcome_text.tpl',
|
'file' => '/Application/views/blocks/start_welcome_text.tpl',
|
||||||
'position' => 150
|
'position' => 150
|
||||||
],
|
],
|
||||||
// Checkout process
|
// remove_from_cart
|
||||||
// Begin CHeckout
|
|
||||||
[
|
[
|
||||||
'template' => 'page/checkout/user.tpl',
|
'template' => 'page/checkout/basket.tpl',
|
||||||
'block' => 'checkout_user_main',
|
'block' => 'checkout_basket_main',
|
||||||
'file' => '/Application/views/blocks/begin_checkout.tpl',
|
'file' => '/Application/views/blocks/remove_from_cart.tpl',
|
||||||
'position' => 150
|
'position' => 150
|
||||||
],
|
]
|
||||||
// Add payment info
|
],
|
||||||
// We add it into checkout_order_main ( checkout/order.tpl ) to make sure a payment is actually added;
|
'settings' => [
|
||||||
// we'll also do it like that in the future for add_shipping_info ( not planed yet )
|
|
||||||
[
|
[
|
||||||
'template' => 'page/checkout/order.tpl',
|
'group' => 'd3_gtm_settings',
|
||||||
'block' => 'checkout_order_main',
|
'name' => 'd3_gtm_sContainerID',
|
||||||
'file' => '/Application/views/blocks/add_payment_info.tpl',
|
'type' => 'str',
|
||||||
'position' => 150
|
'value' => 'GTM-',
|
||||||
|
'position' => 0
|
||||||
],
|
],
|
||||||
],
|
[
|
||||||
'events' => [
|
'group' => 'd3_gtm_settings',
|
||||||
'onActivate' => '\D3\GoogleAnalytics4\Setup\Events::onActivate',
|
'name' => 'd3_gtm_blGA4enab',
|
||||||
'onDeactivate' => '\D3\GoogleAnalytics4\Setup\Events::onDeactivate',
|
'type' => 'bool',
|
||||||
],
|
'value' => true,
|
||||||
|
'position' => 1
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'group' => 'd3_gtm_settings',
|
||||||
|
'name' => 'd3_gtm_blEnableDebug',
|
||||||
|
'type' => 'bool',
|
||||||
|
'value' => false,
|
||||||
|
'position' => 999
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'group' => 'd3_gtm_settings',
|
||||||
|
'name' => 'd3_gtm_blActivateConsentMode',
|
||||||
|
'type' => 'bool',
|
||||||
|
'value' => false,
|
||||||
|
'position' => 999
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'group' => 'd3_gtm_settings_cookiemanager',
|
||||||
|
'name' => 'd3_gtm_settings_hasOwnCookieManager',
|
||||||
|
'type' => 'bool',
|
||||||
|
'value' => false,
|
||||||
|
'position' => 999
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'group' => 'd3_gtm_settings_cookiemanager',
|
||||||
|
'name' => 'd3_gtm_settings_controlParameter',
|
||||||
|
'type' => 'str',
|
||||||
|
'value' => '',
|
||||||
|
'position' => 999
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'group' => 'd3_gtm_settings_cookiemanager',
|
||||||
|
'name' => 'd3_gtm_settings_HAS_STD_MANAGER',
|
||||||
|
'type' => 'select',
|
||||||
|
'value' => 'none',
|
||||||
|
'constraints' => 'NONE|CONSENTMANAGER|USERCENTRICS|COOKIEFIRST|COOKIEBOT',
|
||||||
|
],
|
||||||
|
// OST929760 - Erweiterung für Serverside Tagging
|
||||||
|
[
|
||||||
|
'group' => 'd3_gtm_settings_serversidetagging',
|
||||||
|
'name' => 'd3_gtm_settings_serversidetagging_js',
|
||||||
|
'type' => 'str',
|
||||||
|
'value' => 'https://www.googletagmanager.com/gtm.js',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'group' => 'd3_gtm_settings_serversidetagging',
|
||||||
|
'name' => 'd3_gtm_settings_serversidetagging_nojs',
|
||||||
|
'type' => 'str',
|
||||||
|
'value' => 'https://www.googletagmanager.com/ns.html',
|
||||||
|
],
|
||||||
|
]
|
||||||
];
|
];
|
11
phpstan.neon
11
phpstan.neon
@ -1,15 +1,16 @@
|
|||||||
parameters:
|
parameters:
|
||||||
scanFiles:
|
scanFiles:
|
||||||
- IntelliSenseHelper.php
|
- IntelliSenseHelper.php
|
||||||
- ../../oxid-esales/oxideshop-ce/source/bootstrap.php
|
- ../../../../Shops/CE/6.1.x/616_/vendor/oxid-esales/oxideshop-ce/source/bootstrap.php
|
||||||
- ../../oxid-esales/oxideshop-ce/source/oxfunctions.php
|
- ../../../../Shops/CE/6.1.x/616_/vendor/oxid-esales/oxideshop-ce/source/oxfunctions.php
|
||||||
- ../../oxid-esales/oxideshop-ce/source/overridablefunctions.php
|
- ../../../../Shops/CE/6.1.x/616_/vendor/oxid-esales/oxideshop-ce/source/overridablefunctions.php
|
||||||
scanDirectories:
|
scanDirectories:
|
||||||
- ../../oxid-esales
|
- ../../../../Shops/CE/6.1.x/616_/vendor/oxid-esales
|
||||||
ignoreErrors:
|
ignoreErrors:
|
||||||
- '#.*is not subtype of Throwable.*#'
|
- '#.*is not subtype of Throwable.*#'
|
||||||
|
- '#\$sValue of method OxidEsales\\EshopCommunity\\Core\\Controller\\BaseController::addTplParam\(\) expects string,[ a-zA-Z\.]+#'
|
||||||
paths:
|
paths:
|
||||||
- ./
|
- ./
|
||||||
level: 5
|
level: 5
|
||||||
phpVersion: 80100
|
phpVersion: 70200
|
||||||
checkMissingIterableValueType: false
|
checkMissingIterableValueType: false
|
||||||
|
Reference in New Issue
Block a user