Neu Gibt es kein "Standard-Plugin" für Shop 5?

Harald Weingaertner

Sehr aktives Mitglied
2. Oktober 2006
358
48
Hallo zusammen,

wahrscheinlich eine etwas naive Frage, aber ich möchte gerne ein Javascript in den <head>...</head> Bereich meines Shop einbauen. Allerdings so, dass man diesen Code dann auch per Consent Manager ablehnen kann (ein Chat-Script).

Jetzt habe ich 10 Minuten durch die Dokumentation von "Plugin-Entwicklung" gesurft und war wieder kurz davor den Code einfach ins Template zu kopieren ;)

Gibt es denn nicht vielleicht so eine Art "Standard Plugin", das einen beliebigen Code in den Head Bereich schreibt? Eines, bei dem jemand mit nicht so viel Durchblick im Quelltext meinetwegen noch ein paar Namen und das einzufügende Javascript selber einfügt? Das soll ja nicht großartig zum Konfigurieren sein.

Ich will ja den Plugin-Entwicklern nicht die Arbeit klauen aber ich glaube, das ist sowas triviales, dass man da auch gar nicht anfragen muss, ob die einem sowas einzeln programmieren.

Beste Grüße, Harald
 

301Moved

Sehr aktives Mitglied
19. Juli 2013
930
187
Eigentlich keine schlechte Idee... eine Art Plug&Play-Plugin, mit dem man simple Sachen selbst einfügen kann und die dennoch im Consent auftauchen können bspw. 🤔
Was ja wiederum ausgereiften Plugins vom SP überhaupt auch nicht in die Quere käme...
 

Harald Weingaertner

Sehr aktives Mitglied
2. Oktober 2006
358
48
Einige templates haben so einen Funktion drin... aber im Gitlab gibt es ein testplugin, dass man dafür umbauen könnte...

https://gitlab.com/jtl-software/jtl-shop/plugins/jtl_test

Danke für den Tipp. Das habe ich mir jetzt mal angeguckt und das Teil kann wohl als Test-Plugin jetzt schon wesentlich mehr, als mir eigentlich reichen würde :) Da hat der Ersteller meiner Meinung nach einige Dinge eingebaut, die man damit machen kann. Ich traue mir das leider nicht zu, so zu ändern, dass nur ein Codeschnipsel in den <head>...</head> Bereich eingefügt wird :(
 

FMoche

Moderator
Mitarbeiter
15. Dezember 2014
1.359
340
Halle (Saale)

Harald Weingaertner

Sehr aktives Mitglied
2. Oktober 2006
358
48
Nix leichter als das.

https://gitlab.com/felix.jtl/jtl_append_something

Fügt einfach das JavaScript aus der header.tpl in den Header ein. In diesem Fall ein alert mit "Hello World".

https://gitlab.com/felix.jtl/jtl_append_consent

Fügt JavaScript ebenso ein, prüft aber, ob der Nutzer Consent für "myuniqueid" gegeben hat. In diesem Fall ein console.log();

Hammer! Vielen Dank dafür! :thumbsup:

Gibt es denn evtl. noch eine Möglichkeit dieses Plugin auch über den Consent-Manager zu steuern? Also, dass es nur ausgeführt wird, wenn man das im Consent Manager erlaubt?

Ich habe mich jetzt mal hier langgehangelt und habe schon wieder lauter Fragezeichen über dem Kopf. (https://jtl-devguide.readthedocs.io/projects/jtl-shop/de/latest/shop_privacy/consentmanager.html)

"Nichts leichter als das" ist übrigens geil 😅
 

Harald Weingaertner

Sehr aktives Mitglied
2. Oktober 2006
358
48
Puh, ein Normalsterblicher kriegt das nicht hin, dass der Code aus dem jtl_append_something Plugin nur ausgeführt wird, wenn man im Consent Manager zustimmt :(

Ich habe jetzt mal alles auf der Seite hier gelesen: https://jtl-devguide.readthedocs.io/projects/jtl-shop/de/latest/shop_privacy/consentmanager.html

Die Änderungen, die da beschrieben sind, müssen wohl in der Datei Bootstrap.php durchgeführt werden, wenn ich das richtig herausgefunden habe.

Dann wollte ich die Bootstrap.php des Plugins jtl_google_recaptcha als Basis nutzen und anpassen. In dessen Bootstrap.php gibt es die beschriebenen Textpassagen aber gar nicht, so dass ich die nicht verändern kann.
Dann wollte ich die Bootstrap.php aus dem Demo-Plugin ändern und alles, was nicht zur Anzeige des Codes benötigt wird rausschmeißen. Die ist aber so übervoll mit Kommandos, dass ich versagt habe.
Zuletzt hatte ich noch versucht das Google Analytics Plugin von @Qwartz und von @basteldehs umzubauen. Chancenlos ☹

Evtl. kann nochmal jemand einen Tipp geben?

Müssen alle die Änderungen denn überhaupt in der Bootstrap.php durchgeführt werden? Ja, oder?

Die aktuelle Bootstrap.php von @FMoche 's Mini-Plugin sieht ja so aus:

<?php declare(strict_types=1);
namespace Plugin\jtl_append_something;
use JTL\Events\Dispatcher;
use JTL\Plugin\Bootstrapper;
/**
* Class Bootstrap
* @package Plugin\jtl_append_something
*/
class Bootstrap extends Bootstrapper
{
/**
* @inheritdoc
*/
public function boot(Dispatcher $dispatcher)
{
parent::boot($dispatcher);
}
}



Da muss dann jetzt noch irgendwo das hier rein, oder?
$dispatcher->listen('shop.hook.' . \CONSENT_MANAGER_GET_ACTIVE_ITEMS, [$this, 'addConsentItem']);

Und das?
/**
* @param array $args
*/
public function addConsentItem(array $args): void
{
$lastID = $args['items']->reduce(static function ($result, Item $item) {
$value = $item->getID();

return $result === null || $value > $result ? $value : $result;
}) ?? 0;
$item = new Item();
$item->setName('JTL Example Consent');
$item->setID(++$lastID);
$item->setItemID('jtl_test_consent');
$item->setDescription('Dies ist nur ein Test aus dem Plugin JTL Test');
$item->setPurpose('Dieser Eintrag dient nur zu Testzwecken');
$item->setPrivacyPolicy('https://www.jtl-software.de/datenschutz');
$item->setCompany('JTL-Software-GmbH');
$args['items']->push($item);
}


Den letzten Teil traue ich mir alleine zu. Alles darüber leider überhaupt nicht. Dabei bin ich sicher, dass das eine Sache von 2 Minuten ist, wenn man das schonmal gemacht hat.

Falls jemand noch eine Idee hat, wie ich das Teil in den Consent Manager bekomme, dann wäre ich echt froh. So viele Error 500 wie heute hatte ich noch nie bis 11:30 Uhr gesehen ;)

Harald
 

FMoche

Moderator
Mitarbeiter
15. Dezember 2014
1.359
340
Halle (Saale)
Was genau willst du denn ausführen, sobald Consent gegeben wurde?
Das Plugin macht das doch schon, nämlich hier: https://gitlab.com/felix.jtl/jtl_ap...aster/frontend/template/layout/header.tpl#L12

Wenn du nur JavaScript ausführen willst, ist das alles so schon im Plugin. Und auch in der Bootstrap.php musst du nichts rumfummeln, die kann auch leer bleiben.
Alle Texte, die im ConsentManager angezeigt werden sollen, kannst du über die info.xml deklarieren, wie ich es auch getan habe: https://gitlab.com/felix.jtl/jtl_append_consent/-/blob/master/info.xml#L13
 
  • Gefällt mir
Reaktionen: Harald Weingaertner

Harald Weingaertner

Sehr aktives Mitglied
2. Oktober 2006
358
48
Oh mein Gott, ist das peinlich. Ich hatte nur Dein erstes Plugin ohne Consent gesehen und damit gearbeitet.

So ganz klappt das aber trotzdem noch nicht. Dieses Script soll nur ausgeführt werden, wenn der User Consent gibt:

<script type="text/javascript">
var _smartsupp = _smartsupp || {};
_smartsupp.key = 'xxx';
window.smartsupp||(function(d) {
var s,c,o=smartsupp=function(){ o._.push(arguments)};o._=[];
s=d.getElementsByTagName('script')[0];c=d.createElement('script');
c.type='text/javascript';c.charset='utf-8';c.async=true;
c.src='https://www.smartsuppchat.com/loader.js?';s.parentNode.insertBefore(c,s);
})(document);
</script>


Wenn ich jetzt Dein richtiges Plugin (das mit Consent) nutze, dann erscheint im Quelltext original der Block:
Code:
<script>
        document.addEventListener('consent.ready', function(e) {
            myConsentFunction(e.detail);
        });
        document.addEventListener('consent.updated', function(e) {
            myConsentFunction(e.detail);
        });
        function myConsentFunction(detail) {
            if (detail !== null && typeof detail.myuniqueid !== 'undefined') {
                if (detail.myuniqueid === true) {
                    console.log('myuniqueid has consent!');
                } else {
                    console.log('myuniqueid has NO consent.');
                }
            }
        }
    </script>

In der Console steht allerdings richtig "has consent" oder "has NO consent", je nachdem was ich wähle. Grundsätzlich klappt das also.

Wenn ich nun meinen Chat-Code bei console. log('myuniqueid has consent!'); einfüge, dann hagelt es Fehler. Wenn ich den Code von <script> bis </script> einfüge, dann wird ein "unbekanntes Token <" bemängelt.
Wenn ich vom Code nur den Teil zwischen <script type="text/javascript">...</script> einfüge, dann heißt es "Uncaught TypeError: Cannot convert undefined or null to object at Function.keys (<anonymous>) at loader.js:1 at Array.forEach (<anonymous>) at Object.e.mergeDeep (loader.js:1) at t.createWidget (loader.js:1) at loader.js:1"

Ich glaube, dass das Problem dann im Moment nur noch ist den Code richtig im header.tpl unterzubringen :(

Wüsstest Du oder jemand anderes für die Integration des Chat-Codes in die header.tpl evtl. auch noch eine Lösung?

Vielen Dank für Deine Hilfe!

Grüße, Harald
 

FMoche

Moderator
Mitarbeiter
15. Dezember 2014
1.359
340
Halle (Saale)
Die zweite Lösung mit "alles zwischen den Script-Tags" ist schon richtig.
Wahrscheinlich müsstest du nur noch das "xxx" durch eine korrekte ID ersetzen. Der Fehler mit "Uncaught TypeError: Cannot convert undefined or null " kommt ja aus der extra geladenen loader.js.

Sprich: das Plugin erfüllt seinen Zweck und funktioniert.
Dieses komische smartsuppchat kenne ich aber nicht.
 
  • Gefällt mir
Reaktionen: Harald Weingaertner

Harald Weingaertner

Sehr aktives Mitglied
2. Oktober 2006
358
48
Danke Dir nochmal. Ich werde weiter nach dem Fehler suchen. Nur noch kurz:

So erscheint der Live-Chat: (Logisch, ist auch ohne Consent Abfrage)
Code:
{block name='layout-header-head-resources' append}
    <script>
        document.addEventListener('consent.ready', function(e) {
            myConsentFunction(e.detail);
        });
        document.addEventListener('consent.updated', function(e) {
            myConsentFunction(e.detail);
        });
        function myConsentFunction(detail) {
            if (detail !== null && typeof detail.myuniqueid !== 'undefined') {
                if (detail.myuniqueid === true) {
                    console.log('myuniqueid has consent!');
                } else {
                    console.log('myuniqueid has NO consent.');
                }
            }
        }
    </script>
<!-- Smartsupp Live Chat script -->
<script type="text/javascript">
var _smartsupp = _smartsupp || {};
_smartsupp.key = 'xxx';
window.smartsupp||(function(d) {
  var s,c,o=smartsupp=function(){ o._.push(arguments)};o._=[];
  s=d.getElementsByTagName('script')[0];c=d.createElement('script');
  c.type='text/javascript';c.charset='utf-8';c.async=true;
  c.src='https://www.smartsuppchat.com/loader.js?';s.parentNode.insertBefore(c,s);
})(document);
</script>
{/block}

So erscheint der Live-Chat nicht:
Code:
{block name='layout-header-head-resources' append}
    <script>
        document.addEventListener('consent.ready', function(e) {
            myConsentFunction(e.detail);
        });
        document.addEventListener('consent.updated', function(e) {
            myConsentFunction(e.detail);
        });
        function myConsentFunction(detail) {
            if (detail !== null && typeof detail.myuniqueid !== 'undefined') {
                if (detail.myuniqueid === true) {
                    var _smartsupp = _smartsupp || {};
_smartsupp.key = 'xxx';
window.smartsupp||(function(d) {
  var s,c,o=smartsupp=function(){ o._.push(arguments)};o._=[];
  s=d.getElementsByTagName('script')[0];c=d.createElement('script');
  c.type='text/javascript';c.charset='utf-8';c.async=true;
  c.src='https://www.smartsuppchat.com/loader.js?';s.parentNode.insertBefore(c,s);
})(document);
                } else {
                    console.log('myuniqueid has NO consent.');
                }
            }
        }
    </script>
{/block}

Evtl. kommt ja nochmal einer hier vorbei und sieht einen Fehler :) (Die ID ist in der Tat egal. Im Quelltext ist die korrekte ID drin, nur hier im Beitrag sind die xxx.)

Beste Grüße, Harald
 

FMoche

Moderator
Mitarbeiter
15. Dezember 2014
1.359
340
Halle (Saale)
Probiers mal, indem du die Zeilen
Code:
var _smartsupp = _smartsupp || {};
_smartsupp.key = 'xxx';
an den Anfangs des Scripts schiebst, ungefähr so:

Code:
{block name='layout-header-head-resources' append}
    <script>
        var _smartsupp = _smartsupp || {};
        _smartsupp.key = 'xxx';
        document.addEventListener('consent.ready', function(e) {
            myConsentFunction(e.detail);
        });
        document.addEventListener('consent.updated', function(e) {
            myConsentFunction(e.detail);
        });
        function myConsentFunction(detail) {
            if (detail !== null && typeof detail.myuniqueid !== 'undefined') {
                if (detail.myuniqueid === true) {
                    window.smartsupp||(function(d) {
                        var s,c,o=smartsupp=function(){ o._.push(arguments)};o._=[];
                        s=d.getElementsByTagName('script')[0];c=d.createElement('script');
                        c.type='text/javascript';c.charset='utf-8';c.async=true;
                        c.src='https://www.smartsuppchat.com/loader.js?';s.parentNode.insertBefore(c,s);
                    })(document);
                } else {
                    console.log('myuniqueid has NO consent.');
                }
            }
        }
    </script>
{/block}
 
  • Gefällt mir
Reaktionen: Harald Weingaertner

Harald Weingaertner

Sehr aktives Mitglied
2. Oktober 2006
358
48
Oh! Phantastisch! Vielen, vielen Dank, dass Du Dir die Mühe gemacht hast! Sehr, sehr nett!

Jetzt funktioniert das und da wäre ich alleine nie drauf gekommen.

Danke!!
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu Suche Seite 2 gibt falsche URL aus JTL-Shop - Fehler und Bugs 4
gibt es eine Möglichkeit ausgewählte Aufträge als Liste zu drucken ? JTL-Wawi 1.8 2
Neu Amazon Prime - DHL Versandlabel kann nicht gedruckt werden "Ein Prime Versandlabel wurde nicht gekauft, da kein verfügbares gefunden wurde." JTL-ShippingLabels - Fehler und Bugs 0
Neue angelegte Artikel ausverkauft - kein Erscheinen auf Bestellvorschlägen JTL-Wawi 1.6 1
Kein Fehler von 1.6.39 zu 1.8.12 JTL-Wawi 1.8 4
Neu Schweiz: Die Gewichtsangabe ist kleiner als im CN23-Formular > kein Versand möglich JTL-ShippingLabels - Fehler und Bugs 13
Kein Zugriff auf Datenbankverwaltung JTL-Wawi 1.8 1
WMS Mobile App kein Benutzer wählbar JTL-Wawi App 1
Gelöst Zebra T21 Scanner mit Installierten JTL POS 1.0.9.3 beim Bon versuche Ich einfach zu Scannen er sucht aber kein Artikel JTL-POS - Fehler und Bugs 1
Kein Abgleich zum Shop, ich komme nicht in Plattformen/Verkaufskanäle rein JTL-Wawi 1.8 3
Bug? Worker 2.0 - Shop Abgleich "Quicksync" ist kein Quicksync mehr - Paketgröße wird ignoriert JTL-Wawi 1.8 10
Neu Nach Update auf 1.8.11 - teilweise kein "Amazon - Neue Produkteseite erstellen" möglich Amazon-Lister - Fehler und Bugs 1
Neu Kein Update vom Sendungsstatus JTL-Track&Trace - Ideen, Lob und Kritik 1
Sequenz enthält kein übereinstimmendes Element - nach Update von 1.5.55 auf 1.6.48 - Artikel lassen sich nicht mehr öffnen nach Speichern JTL-Wawi 1.6 6
Neu Kein h1-Tag JTL-Shop - Fehler und Bugs 2
Neu Kein Abgleich möglich-PW in den Online Einstellungen falsch WooCommerce-Connector 0
Neu Kein Abgleich mit Shopware 5.7.7 mehr Shopware-Connector 0
Neu Kein Zugriff auf Backend /admin Bereich Gelöste Themen in diesem Bereich 8
Packtisch plus druckt kein Lieferschein / Rechnung JTL-Wawi 1.8 0
Neu Kein Datenabgleich zu Shopware 5.5.4 Shopware-Connector 3
Neu Plötzlich kein Zugriff von Client auf Datenbank mehr User helfen Usern - Fragen zu JTL-Wawi 1
Neu Lizenz zu verkaufen für JTL-Shop Standard Edition Allgemeine Fragen zu JTL-Shop 4
Neu JTL-Shop Standard Edition Lizenz zu verkaufen Umstieg auf JTL-Shop 7
Neu Deinstallation WMS: WMS Lager zu Standard Lager funktioniert nicht Installation von JTL-WMS / JTL-Packtisch+ 0
Neu Vorlage hat im Standard die Variable SalesQuotationPositionConfiguration.Name die nicht funktioniert Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 0
Neu Bestandsführung aktiv als Standard User helfen Usern - Fragen zu JTL-Wawi 3
Neu $Xselling->Standard->XSellGruppen in Produktliste bzw. get_product_list ausgeben Technische Fragen zu Plugins und Templates 23
Neu Artikel mit VarKombiartikel, je nach Kategorie anderer VarKombi als Standard Allgemeine Fragen zu JTL-Shop 0

Ähnliche Themen