Shopware 6 Roadmap: https://www.shopware.com/de/roadmap/
Hierzu lege ich die Datei base.html.twig in meinem Theme an:
/custom/plugins/MyCustomTheme/src/Resources/views/storefront/base.html.twig
In dieser Datei leite ich nun die Datei aus dem Shopware-Template ab und überschreibe den Block base_body_script.
{% sw_extends '@Storefront/storefront/base.html.twig' %}
{% block base_body_script %}
{{ parent() }}
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-123456789-0"></script> <script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-123456789-2', { 'anonymize_ip': true });
</script>
{% endblock %}
Um auch Conversions tracken zu können klinke ich mich auch in die Checkout Finish Funktion ein:
/custom/plugins/MyCustomTheme/src/Resources/views/storefront/page/checkout/finish/index.html.twig
{% sw_extends '@Storefront/storefront/page/checkout/finish/index.html.twig' %}
{% block base_footer %}
{{ parent() }}
<script>
{% set analyticsItems = [] %}
{% for lineKey,lineItem in page.order.nestedLineItems %}
{% set analyticsItemLine = {
id: lineItem.payload.productNumber,
name: lineItem.label,
quantity: lineItem.quantity,
price: lineItem.totalPrice
} %}
{% set analyticsItems = analyticsItems|merge({(loop.index0):analyticsItemLine}) %}
{% endfor %}
document.addEventListener("DOMContentLoaded", function() {
gtag('event', 'purchase', {
"transaction_id": "{{ page.order.orderNumber }}",
"affiliation": "My Shop",
"value": {{ page.order.amountTotal }},
"currency": "{{ context.currency.isoCode }}",
"tax": {{ page.order.amountTotal - page.order.amountNet}},
"shipping": {{ page.order.shippingTotal }},
"items": {{ analyticsItems|json_encode|raw }}
});
});
</script>
{% endblock %}
Die Lösung ist sicherlich nicht perfekt, da die Google Integration aber in Shopware 6.2 nachgereicht wird ist sie für meine Anwendungsfälle temporär ausreichend.
Zu beachten ist hier auch, dass diese Lösung noch nicht DSGVO-konform ist. Auch wenn die Übertragung von personenbezogenen Daten in die USA ohnehin fragwürdig ist, sollte man die Google Analytics Skripte erst nach Zustimmung (consent) seitens des Besuchers einbinden.
Abschließend muss der Cache geleert werden, danach sollte das Tracking bereits funktionieren.
Bemerkungen :
Kann es sein, dass in Shopware 6 nur die Integration von alten UA Properties vorgesehen ist und dies nicht mit einer GA4 Property funktioniert?
`custom/plugins/MeinThemePackage/src/Resources/views/storefront/component/analytics.html.twig`
```
{% block component_head_analytics %}
{% if context.salesChannel.analytics and context.salesChannel.analytics.isActive() %}
{% set trackingId = context.salesChannel.analytics.getTrackingId() %}
<!-- Google tag (gtag.js) -->
<script async src="https://www.googletagmanager.com/gtag/js?id={{ trackingId }}"></script>
<script>
{% block component_head_analytics_tag_config %}
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', '{{ trackingId }}');
{% endblock %}
</script>
{% endif %}
{% endblock %}
```