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

Harald Weingaertner

Gut bekanntes Mitglied
2. Oktober 2006
243
9
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
 

vekoop

Sehr aktives Mitglied
19. Juli 2013
718
84
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

Gut bekanntes Mitglied
2. Oktober 2006
243
9
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
941
154
Halle (Saale)

Harald Weingaertner

Gut bekanntes Mitglied
2. Oktober 2006
243
9
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

Gut bekanntes Mitglied
2. Oktober 2006
243
9
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
941
154
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

Gut bekanntes Mitglied
2. Oktober 2006
243
9
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
941
154
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

Gut bekanntes Mitglied
2. Oktober 2006
243
9
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
941
154
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

Gut bekanntes Mitglied
2. Oktober 2006
243
9
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 Forum Antworten Erstelldatum des Themas
Neu Gibt es ein Versandklassen-Kombinationen Limit? Allgemeine Fragen zu JTL-Shop 2
Neu Gibt es eine genaue Variable zur Gesamtpreis-Anzeige? Betrieb / Pflege von JTL-Shop 0
Neu Preisvergleich deaktiviert - gibt es Plug Ins? User helfen Usern - Fragen zu JTL-Wawi 0
Neu Gambio Shop Abgleich gibt immer wieder Fehlermeldung Gambio-Connector 3
Verwiesen an Support DPD Webdienst gibt keine Versandlabel aus JTL-ShippingLabels - Fehler und Bugs 1
Neu Gibt es aktuell Probleme beim Bestandsabgleich Ebay? Einrichtung und Installation von JTL-eazyAuction 2
In Diskussion SQL Abfrag in Artikeln gibt falschen Wert aus. JTL-Workflows - Fehler und Bugs 6
Neu Kein Abgleich mehr bei ebay möglich da Doppelverkäufe JTL-Wawi - Fehler und Bugs 0
Neu Amazon Payment Plugin kein automatischer Zahlungseinzug User helfen Usern - Fragen zu JTL-Wawi 5
Gelöst Direkte Bonerstellung durch Artikeleingabe nicht möglich.... Kein gültiger Bon ausgewählt... Gelöste Themen in diesem Bereich 2
Neu Einige Angebote werden versucht automatisch einzustellen obwohl kein Bestand... eBay-Anbindung - Fehler und Bugs 0
nach Update auf 5 kein Wawi Abgleich mehr möglich Upgrade JTL-Shop4 auf JTL-Shop5 2
Neu Kundenkonto: Kein Zugriff des Kunden möglich, Fehlfunktionen, keine Anmeldung JTL-Shop - Fehler und Bugs 0
In Bearbeitung tse swissbit - kein Zugriff möglich JTL-POS - Fehler und Bugs 6
Offen Teillieferung über Packtisch+ - kein Auftragssplitting JTL-WMS / JTL-Packtisch+ - Fehler und Bugs 1
Neu Fehlermeldung : Für die aktuelle Transaktion kann kein Commit ausgeführt werden.... WooCommerce-Connector 8
Neu Drucken: Kein Speicherplatz mehr verfügbar JTL-Wawi - Fehler und Bugs 5
Neu Kein Admin Zugang nach Update auf Shop 5 Installation / Updates von JTL-Shop 10
Neu Kein Download des Gambio-Connectors im Kundencenter möglich Allgemeines zu den JTL-Connectoren 1
Neu Shopware Connector kein Abgleich mehr möglich Shopware-Connector 4
In Diskussion Bei VISA-Zahlung kein Kundenbeleg auf Bon JTL-POS - Fehler und Bugs 8
In Bearbeitung (wahrscheinlich kein Fehler) JTL-POS erkennt besonderen EAN/ISBN nicht als Artikel JTL-POS - Fehler und Bugs 2
Neu Kein automatischer Versand von E-Mails Betrieb / Pflege von JTL-Shop 2
Gelöst nach Update auf Shop 5.0.1: kein CSS nach Wechsel auf NOVA Template Upgrade JTL-Shop4 auf JTL-Shop5 2
Neu Kein Zugriff auf die Wawi User helfen Usern - Fragen zu JTL-Wawi 2
Neu kein richtiges IMAP? Servicedesk (Beta) 2
Neu kein frontend sichtbar fehlermeldung Installation von JTL-Wawi 1
Gelöst JTL Packtisch+ Komponenten Empfehlung (kein mobiler Packtisch) JTL-WMS / JTL-Packtisch+ - Ideen, Lob und Kritik 2
Neu Kein Artikel / Kategorie Abgleich in Richtung Prestashop PrestaShop-Connector 1
Neu Kein Onlineshop-Abgleich möglich - Kategorie-Senden Fehler Shopware-Connector 1
Neu Kein kompletter Online Shop Abgleich mit Woo Commerce möglich WooCommerce-Connector 0
Neu Kein Abgleich wegen Exception möglich WooCommerce-Connector 1
Gelöst DATEV-Buchungsstapel in Spalte DJ „Festschreibung“ steht eine 0 und Kein Datum Gelöste Themen in diesem Bereich 1
Neu Dual-WAN-Router, Telekom, kein WLAN User helfen Usern 0
In Bearbeitung iZettle Zahlung - und danach kein Abschluß des Bons Allgemeine Fragen zu JTL-POS 9
Neu Livestyler zeigt kein Inhalt und einen Fehler JTL-Shop - Fehler und Bugs 1
In Diskussion Kein Bug aber wichtig: Rate an Rechnungsmängeln zeigt falsche Mängel an Amazon-Anbindung - Fehler und Bugs 9
Neu Update Shop5 RC3 -> 5.0.0 kein Cookie Consent Manager mehr JTL-Shop - Fehler und Bugs 1
Neu Kein Lieferscheindruck für unbezahlte Aufträge möglich? JTL-Wawi - Fehler und Bugs 2
In Bearbeitung Kein Initialer Import von Amazon Bestellungen? Nur neue Bestellungen werden abgeholt Amazon-Anbindung - Fehler und Bugs 3
Neu Artikeldetailseite zerschossen - kein Ablegen der Artikel in warenkorb mehr möglich Shop5 / Nova template Allgemeine Fragen zu JTL-Shop 7
Neu Einrichten Selbstabholung + kein Paypal + JTL POS Einrichtung von JTL-Shop4 1
Neu Kein Export Rechnungen mehr ? https://issues.jtl-software.de/issues/WAWI-51214 JTL-Ameise - Ideen, Lob und Kritik 7
Neu auf Seite lässt sich kein Suchmaschinen-Name speichern Betrieb / Pflege von JTL-Shop 1
Neu Mobil kein Hauptmenü sichtbar Technische Fragen zu Plugins und Templates 8
Beantwortet Nach Shop 5 Upgrade - kein Artikelkauf mehr möglich: "Dieser Artikel hat Variationen. Wählen Sie bitte die gewünschte Variation aus." Allgemeine Fragen zu JTL-Shop 9
Neue Standard Schriftart dem JTL Shop 5 hinzufügen Einrichtung JTL-Shop5 1
Neu Durchgestrichene "Standard"-Preise neben Sonderpreisen im Shop anzeigen lassen User helfen Usern - Fragen zu JTL-Wawi 3
Neu Schließen sich Neukunden- und Standard-Kupon gegenseitig aus Betrieb / Pflege von JTL-Shop 0
Neu Suche in Rechnungsvorlagen (Standard) die Auftragsnummer User helfen Usern - Fragen zu JTL-Wawi 1
Ähnliche Themen