Download the PHP package hotte512/hug-eu-label without Composer

On this page you can find all versions of the php package hotte512/hug-eu-label. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package hug-eu-label

HugEuLabel

Shopware-6.7-Plugin (GPL-3.0). Blendet das ab dem 27.09.2026 verpflichtende EU-Gewährleistungslabel in der Storefront ein, hängt es als PDF an die Bestellbestätigungs-Mail an und zeigt die seit dem 13.12.2024 verpflichtenden GPSR-Herstellerangaben (Verordnung (EU) 2023/988, Art. 19) auf der Produktdetailseite an — beide Funktionen sind unabhängig voneinander aktivierbar.

Kurz vorab: Dieses Plugin wurde überwiegend KI-gestützt entwickelt („Agentic Coding" / „Vibe Coding" mit Claude Code) und wird ohne Gewährleistung bereitgestellt (GPL-3.0) — es ist keine Rechtsberatung, die Verantwortung für die Rechtskonformität des Shops liegt beim Betreiber. Details: KI-gestützte Entwicklung und Haftungsausschluss.

Rechtsgrundlage (Kurzfassung)

GPSR (Produktsicherheitsverordnung)

Anforderungen

Installation

Per Composer (empfohlen)

Vom Shopware-Root aus; Abhängigkeiten wie bacon/bacon-qr-code werden automatisch mitinstalliert:

Update:

Manuell

Das Plugin-Verzeichnis nach custom/plugins/HugEuLabel kopieren (bzw. dort klonen), dann vom Shopware-Root aus:

(In Container-Umgebungen wie DDEV/Docker die Befehle entsprechend im Container ausführen, z. B. ddev exec bin/console ….)

assets:install kopiert die Label-Dateien nach public/bundles/hugeulabel/labels/.

Das Plugin enthält die offiziellen EU-Originale des Labels für de-DE und en-GB. Herkunft, Konvertierung und das Ergänzen weiterer Sprachen sind in ASSETS.md dokumentiert.

Konfiguration

Alle Optionen unter Einstellungen → System → Plugins → EU-Label bzw. HugEuLabel.config.*, pro Sales Channel überschreibbar.

Darstellungs-Modi und Kompakt-Darstellung

Jede Anzeigefläche hat ein Auswahlfeld Darstellung: hidden (Aus), full (volles Label) oder compact. Die Kompakt-Darstellung zeigt nur den Label-Kopf als Banner — ein reiner CSS-Zuschnitt des unveränderten EU-Original-SVGs — und öffnet das volle Label per Klick, je nach compactBehavior aufklappend (Bootstrap Collapse) oder im Modal.

Rechtshinweis: Auf Produktdetailseite und Bestellabschluss-Seite muss das Label ab dem 27.09.2026 vollständig, unmittelbar sichtbar und farbig dargestellt werden. Die Kompakt-Darstellung erfüllt das nach herrschender Lesart nicht und erfolgt dort auf eigenes Risiko. Auf den freiwilligen Flächen (Warenkorb-Seite, Offcanvas) ist sie unbedenklich.

Allgemein

Schlüssel Typ Standard Beschreibung
active bool true Plugin global aktiv/inaktiv
maxWidth int 300 Maximale Label-Breite in px (nur proportionale Skalierung); gilt für Warenkorb/Checkout und als Standard für die PDP
compactBehavior single-select collapse collapse (aufklappen) oder modal — gilt überall, wo Kompakt gewählt ist
compactWidth int 300 Breite des zugeklappten EU-Label-Kopf-Banners in px (Standard für alle Flächen)
slotLayout single-select stacked Anordnung mehrerer Blöcke am selben Anker: stacked / side_by_side (Reihenfolge: Gewährleistung, GARAN, GPSR)
pdfButtonsMode single-select off Dezente PDF-Links unter Gewährleistungs- und GARAN-Label: off, download, new_tab, both

Die PDF-Links sind rein additiv — die Labels selbst bleiben unverändert und im Modus full unmittelbar sichtbar. Wo sie erscheinen, steuern die pdfButtons*-Schalter der jeweiligen Karte; sie greifen nur, wenn pdfButtonsMode nicht off ist. Das Gewährleistungs-PDF ist die lokalisierte Datei aus Resources/public/labels/, das GARAN-PDF wird über die Route frontend.hug_garan.label_pdf aus dem Label-SVG erzeugt.

Hinweis zum GARAN-PDF: Das Seitenformat folgt dem Label (bei der offiziellen Vorlage 200 × 211 mm bei 190 mm Label-Breite), nicht A4 — sonst bliebe ein Drittel der Seite leer. Ein Ausdruck in Originalgröße auf A4 passt trotzdem.

Die Umwandlung läuft über dompdf/php-svg-lib. Rahmen, GARAN-Schriftzug, EU-Flagge, QR-Code und die 24 Sprachzeilen liegen als Pfade vor und bleiben originalgetreu. Die drei befüllten Textfelder (Marke, Modell-Kennung, Garantiedauer) werden in Helvetica bzw. Helvetica-Bold gesetzt — php-svg-lib kann die Vorlagenschrift „Inter" nicht laden, ohne diese Substitution fiele es auf Times zurück. Maßgeblich bleibt die Storefront-Darstellung des unveränderten SVGs.

Produktdetailseite

Schlüssel Typ Standard Optionen
pdpMode single-select full hidden, full, compact
pdpPosition single-select below_buy_button above_buy_button, below_buy_button, below_description, tab_description_end, near_shipping_info, page_end, custom_selector
pdpCustomSelector text leer CSS-Selektor für custom_selector (z. B. .product-detail-price-container)
pdpCustomInsert single-select after before, after, append
pdfButtonsPdp bool true PDF-Links auf der PDP (Gewährleistung und GARAN)
pdpMaxWidth int leer Eigene Label-Breite in px auf der PDP (volles EU- und GARAN-Label); leer/0 ⇒ maxWidth
pdpCompactWidth int leer Eigene Kompakt-Banner-Breite in px auf der PDP; leer/0 ⇒ compactWidth

Breiten pro Fläche

Fläche EU-Label GARAN voll GARAN Nested
Produktdetailseite pdpMaxWidth → maxWidth → 300 pdpMaxWidth → maxWidth → 300 garanNestedWidthPdp → garanNestedWidth → 368
Listing — — garanNestedWidthListing → garanNestedWidth → 368
Warenkorb / Checkout maxWidth → 300 maxWidth → 300 garanNestedWidth → 368

Eine feste Mindest- oder Pixelgröße schreibt die DVO (EU) 2025/1960 nicht vor, auch nicht „im Checkout größer". Auf PDP und Bestellabschluss gilt dieselbe Anforderung: vollständig, unmittelbar sichtbar, farbig und lesbar. Die Breiten werden deshalb nicht nach unten begrenzt; wählen Sie sie so, dass der Label-Text gut lesbar bleibt.

Warenkorb & Checkout

Schlüssel Typ Standard Optionen
checkoutConfirmMode single-select full hidden, full, compact
checkoutConfirmPosition single-select above_terms above_terms, below_summary, below_line_items, above_submit, custom_selector
confirmCustomSelector text leer CSS-Selektor für custom_selector
confirmCustomInsert single-select after before, after, append
cartMode single-select hidden hidden, full, compact
offcanvasMode single-select hidden hidden, full, compact
pdfButtonsConfirm bool false PDF-Links auf der Bestellabschluss-Seite
pdfButtonsCart bool false PDF-Links im Warenkorb
pdfButtonsOffcanvas bool false PDF-Links im Offcanvas-Warenkorb

Bei custom_selector wird das Label unsichtbar gerendert und clientseitig an den konfigurierten Selektor verschoben. Wird das Ziel nicht gefunden (oder ist der Selektor leer), bleibt das Label unsichtbar und eine Warnung erscheint in der Browser-Konsole — die Seite bricht nie.

Bestellbestätigung (E-Mail)

Schlüssel Typ Standard Optionen
mailMode single-select pdf_attachment pdf_attachment, inline_image, disabled

GPSR-Herstellerangaben

Schlüssel Typ Standard Beschreibung
gpsrActive bool false GPSR-Anzeige aktiv — unabhängig vom EU-Label-Schalter active
gpsrDisplayMode single-select banner plain (schlichter Textblock) oder banner (dezente Box)
gpsrBannerTheme single-select neutral_grey neutral_grey, soft_blue, soft_green, outline, accent (Theme-Primärfarbe)
gpsrPosition single-select combined combined (am EU-Label), above_buy_button, below_buy_button, below_description, tab_description_end, near_shipping_info, page_end, custom_selector
gpsrCustomSelector text leer CSS-Selektor für custom_selector (eigenes Feld, unabhängig vom EU-Label)
gpsrCustomInsert single-select after before, after, append
gpsrMaxWidth int leer Maximale Breite der GPSR-Box in px; leer/0 = automatisch (nutzt den verfügbaren Platz) — z. B. um die Box auf die Breite der Labels zu begrenzen
gpsrFontSize int leer Schriftgröße der GPSR-Angaben in px; leer/0 = Standard (14 px). Überschriften und Text skalieren gemeinsam
gpsrFallbackText textarea leer Globaler Fallback, wenn der Hersteller keine GPSR-Daten hat (z. B. eigene Firmendaten als Quasi-Hersteller)
gpsrHeadline text leer Überschrift des Blocks; leer = Snippet-Standard „Herstellerinformationen gemäß Produktsicherheitsverordnung (GPSR)" (hugEuLabel.gpsr.headline)

Details zur Datenpflege und Anzeige-Logik im Abschnitt GPSR-Herstellerangaben pflegen.

Garantielabel GARAN (Phase 2)

Platzhalter-Card ohne Funktion. Das GARAN-Label für gewerbliche Haltbarkeitsgarantien wird in einer späteren Plugin-Version ergänzt.

GARAN-Garantielabel (gewerbliche Haltbarkeitsgarantien)

Das GARAN-Label (DVO (EU) 2025/1960, Anhang II) kennzeichnet gewerbliche Haltbarkeitsgarantien über 2 Jahre. Das Plugin befüllt die offiziellen EU-Vorlagen pro Produkt serverseitig: Marke (Herstellername), Modell-Kennung (Quelle konfigurierbar), Garantiedauer und QR-Code zu den Garantiebedingungen. Es gibt das volle Label und die offizielle Nested-Kompaktvariante (auf der PDP aufklappbar zum vollen Label).

Datenpflege

Am Hersteller (Zusatzfelder-Set „GARAN-Garantie (Hersteller-Standard)"): hug_garan_active, hug_garan_duration_years, hug_garan_conditions_url, hug_garan_conditions_media (PDF-Fallback zur URL). Am Produkt („GARAN-Garantie (Produkt-Abweichungen)"): hug_garan_disabled sowie hug_garan_product_duration_years / …_conditions_url / …_conditions_media als Overrides — damit kann ein Produkt abweichen oder auch ohne Hersteller-Garantie eigene Garantiedaten tragen.

Aktivierungsregel: Das Label erscheint nur, wenn garanEnabled an ist, das Produkt nicht deaktiviert wurde, die wirksame Dauer > 2 Jahre beträgt und Bedingungen (URL oder PDF) gepflegt sind. Unvollständige Daten unterdrücken das Label mit Warnung im Log-Channel hug_eu_label; Garantien bis 2 Jahre brauchen kein Label und bleiben still.

Konfiguration (Card „Garantielabel GARAN", pro Sales Channel)

Schlüssel Typ Standard Optionen
garanEnabled bool false —
garanPdpMode single-select full hidden, full, nested (aufklappbar)
garanPdpPosition single-select below_buy_button wie pdpPosition inkl. custom_selector
garanPdpCustomSelector / garanPdpCustomInsert text / select leer / after eigener Selektor, unabhängig vom EU-Label
garanNestedWidth int 368 Breite des Nested-Banners in px (Standard für alle Flächen)
garanNestedWidthPdp / garanNestedWidthListing int leer Eigene Nested-Breite auf PDP bzw. im Listing; leer/0 ⇒ garanNestedWidth
garanConfirmMode single-select nested hidden, nested (pro Bestellposition)
garanListingMode single-select hidden hidden, nested (in der Produktkachel)
garanModelIdSource single-select product_number product_number, manufacturer_number, ean (leer ⇒ Produktnummer)
garanMailMode single-select conditions_pdfs disabled, conditions_pdfs, summary_pdf, both
garanPdfButtonsListing bool false PDF-Links in der Produktkachel

Mail-Anhänge

conditions_pdfs hängt die als PDF gepflegten Garantiebedingungen der bestellten Produkte an (pro Datei dedupliziert; nur wo ein Media-PDF existiert). summary_pdf erzeugt die Übersicht Garantie-Uebersicht.pdf (je Position Artikel, Hersteller, Dauer, Bedingungs-Link; via dompdf). Fehler verhindern nie den Mailversand.

GPSR-Herstellerangaben pflegen

Die GPSR-Daten werden je Hersteller gepflegt: Admin → Kataloge → Hersteller → (Hersteller öffnen) → Zusatzfelder → Karte „GPSR (Produktsicherheitsverordnung)". Das Custom Field Set hug_gpsr legt das Plugin bei plugin:install/plugin:update automatisch an; bei der Deinstallation bleiben Set und Daten erhalten, außer „Alle App-Daten löschen" wird gewählt.

Zusatzfeld Inhalt
hug_gpsr_manufacturer_info Name/Handelsname, Postanschrift und elektronische Adresse des Herstellers — Zeilenumbrüche bleiben in der Storefront erhalten
hug_gpsr_responsible_person Nur bei Nicht-EU-Herstellern: verantwortliche Person in der EU (Art. 16 GPSR); erscheint mit eigener Zwischenüberschrift nur zusammen mit den Herstellerangaben

Die Felder sind übersetzbar (Sprachumschalter am Hersteller); die Storefront zeigt die Übersetzung der jeweiligen Sales-Channel-Sprache.

Anzeige-Logik (bei gpsrActive):

  1. Hersteller hat hug_gpsr_manufacturer_info → wird angezeigt, ggf. mit verantwortlicher Person darunter.
  2. Sonst (keine Daten oder Produkt ohne Hersteller) → gpsrFallbackText, sofern gefüllt.
  3. Sonst → es wird nichts angezeigt — bewusst auch ohne Log-Eintrag (ein Eintrag pro Seitenaufruf wäre Log-Spam).

Rechtsrisiko: Fall 3 bedeutet, dass ein Produkt ohne die nach Art. 19 GPSR verpflichtenden Angaben angeboten wird (abmahnfähig). Entweder alle Hersteller mit GPSR-Daten versorgen oder einen globalen Fallback-Text hinterlegen — und neu angelegte Hersteller in die Pflege-Routine aufnehmen.

Positionierung: Standard ist combined — die GPSR-Angaben erscheinen am EU-Gewährleistungslabel (untereinander oder nebeneinander), und zwar auch an dessen Sonderpositionen (page_end, custom_selector, near_shipping_info). Ist das EU-Label ausgeblendet (pdpMode: hidden), erscheinen die GPSR-Angaben allein an der als pdpPosition konfigurierten Stelle. Alternativ bekommt der Block über gpsrPosition eine eigene Position. Die GPSR-Angaben erscheinen nur auf der Produktdetailseite (nicht im Checkout, nicht in E-Mails) — das entspricht der Anforderung „im Produktangebot".

Darstellung: Die Banner-Farben laufen über CSS Custom Properties (--hug-gpsr-bg, --hug-gpsr-bar, --hug-gpsr-border, --hug-gpsr-color) und lassen sich im Theme überschreiben. Alle Varianten sind auf WCAG-AA-Kontrast ausgelegt (dunkler Fließtext auf sehr hellen Flächen).

Phase B (geplant): Warnhinweise je Produkt

Produktbezogene Warnhinweise und Sicherheitsinformationen (Art. 19 lit. d GPSR) folgen bei Bedarf in einer späteren Version — vorgesehen als Zusatzfelder am Produkt. Relevant, sobald das Sortiment Produkte mit Pflicht-Warnhinweisen enthält.

Mehrsprachigkeit der Label-Dateien

Das Plugin wählt die Label-Datei anhand des Locale-Codes der Sales-Channel-Sprache: src/Resources/public/labels/{locale}/. Existiert für eine Sprache kein Ordner bzw. keine Datei, wird auf de-DE zurückgefallen. Weitere Sprachen werden ohne Code-Änderung ergänzt, indem ein neuer Locale-Ordner (z. B. en-GB/) mit gewaehrleistungslabel.svg und gewaehrleistungslabel.pdf abgelegt wird — danach assets:install ausführen.

Manueller Testplan

  1. PDP: Produktdetailseite aufrufen → Label wird vollständig, farbig und ohne Interaktion sichtbar an der konfigurierten Position angezeigt (Standard: unter dem Kaufen-Button). Position in der Plugin-Config umstellen und erneut prüfen.
  2. Checkout: Artikel in den Warenkorb legen, bis zur Bestellabschluss- Seite gehen → Label erscheint an der konfigurierten Position (Standard: über den AGB). Optional showOnCartPage/showOnOffcanvasCart aktivieren und Warenkorb-Seite bzw. Offcanvas prüfen.
  3. Testbestellung: Bestellung abschließen → Bestellbestätigungs-Mail prüfen: Anhang EU-Gewaehrleistungslabel.pdf vorhanden und öffnet das Label. (In Dev-Umgebungen z. B. über einen Mail-Catcher wie Mailpit prüfbar.)
  4. Fehlerfall: PDF temporär umbenennen, Testbestellung → Mail kommt ohne Anhang an, Warnung im Log (Log-Channel hug_eu_label).
  5. Kompakt-Darstellung: pdpMode auf compact stellen → nur der blaue Label-Kopf erscheint als Banner plus Link „Gewährleistungslabel anzeigen". Klick klappt das volle Label auf (compactBehavior: collapse) bzw. öffnet es im Modal (compactBehavior: modal).
  6. Benutzerdefinierte Position: pdpPosition auf custom_selector stellen, gültigen Selektor eintragen → Label erscheint am Ziel-Element. Danach absichtlich falschen Selektor eintragen → Label erscheint nicht, Browser-Konsole zeigt eine [HugEuLabel]-Warnung, die Seite funktioniert normal weiter.
  7. GPSR — Daten & Fallback: gpsrActive einschalten. PDP eines Produkts, dessen Hersteller GPSR-Daten hat → Block mit Überschrift und Herstellerangaben erscheint (Zeilenumbrüche erhalten). Hersteller zusätzlich mit EU-verantwortlicher Person → zweiter Absatz mit Zwischenüberschrift „Verantwortliche Person in der EU". PDP eines Produkts, dessen Hersteller keine Daten hat → Fallback-Text erscheint; Fallback leeren → es erscheint nichts (und nichts im Log).
  8. GPSR — Darstellung: gpsrDisplayMode: plain → schlichter Textblock ohne Box. banner → dezente Box; alle 5 Farbvarianten (neutral_grey, soft_blue, soft_green, outline, accent) durchschalten und prüfen, dass Text lesbar bleibt und die Box nicht wie ein Warnhinweis oder Siegel wirkt (accent übernimmt die Theme-Primärfarbe als Balken).
  9. GPSR — Position combined: gpsrPosition: combined + slotLayout: stacked → GPSR-Block direkt unter dem EU-Label. side_by_side → Desktop: EU-Label links, GPSR rechts; Browserfenster unter 768 px verkleinern (oder Mobilgerät) → Blöcke stehen untereinander. pdpMode: hidden → GPSR-Block erscheint allein an der EU-Label-Position (kein leerer Rahmen daneben). Eigene Position (z. B. below_description) → Block erscheint dort unabhängig vom EU-Label.
  10. GPSR — Nur PDP: Warenkorb, Checkout und Bestellbestätigungs-Mail prüfen → dort erscheinen keine GPSR-Angaben.

  11. GARAN-Label: Beim Hersteller eines Testprodukts hug_garan_active, Dauer > 2 Jahre und eine Bedingungs-URL pflegen, garanEnabled aktivieren → volles Label auf der PDP (Marke, Modell-Kennung, Dauer, scanbarer QR-Code); garanPdpMode: nested → Kompakt-Banner, Klick klappt das volle Label auf/zu. garanListingMode: nested → Kompakt-Label in den Produktkacheln. Bestellabschluss zeigt das Kompakt-Label an der Position.
  12. GARAN-Mail: garanMailMode: both, Testbestellung → Mail enthält Garantie-Uebersicht.pdf (und Garantiebedingungen-<Hersteller>.pdf, wenn ein PDF gepflegt ist). Unvollständige Garantiedaten (z. B. Dauer ohne Bedingungen) unterdrücken das Label mit Warnung im Log-Channel hug_eu_label.

Theme-Hinweis: Die Position „Bei den Versandinformationen" greift an Shopwares Standard-Versandinfo-Komponente. Stark angepasste Themes (etwa solche, die den Buy-Widget-Bereich per JavaScript rendern) zeigen diese Komponente nicht — dort stattdessen custom_selector verwenden. Das Ziel eines Custom-Selektors muss im initialen HTML vorhanden sein; per JavaScript nachgeladene Bereiche werden nicht gefunden.

Entwicklung

PHP- und JS-Checks: PHPStan, ECS, Rector, PHPUnit, ESLint, Jest. Konfiguration: phpstan.neon, ecs.php, rector.php, phpunit.xml.dist, .eslintrc.json, jest.config.js (Composer-Scripts: composer ecs, composer phpstan, composer phpunit, composer rector).

Unit-Tests: tests/Unit/ (LabelProvider, MailAttachmentSubscriber, GpsrProvider, GpsrCustomFieldSetInstaller, GpsrInfoTemplate/Escaping).

Entstehung: KI-gestützte Entwicklung (Agentic Coding)

Dieses Plugin wurde überwiegend KI-gestützt entwickelt („Agentic Coding" bzw. „Vibe Coding" mit Claude Code): Ein KI-Agent hat Konzeption, Implementierung, Tests und Dokumentation unter menschlicher Anleitung und Review erstellt. Der Code wurde funktional getestet (Unit-Tests, manuelle Storefront-Tests), aber nicht Zeile für Zeile von Hand geschrieben.

Was das für dich bedeutet:

Haftungsausschluss

Lizenz

GNU General Public License v3.0 oder später (GPL-3.0-or-later) — Volltext in LICENSE. Copyright (C) 2026 Hotte512.

Die enthaltenen EU-Label-Dateien (Gewährleistungslabel, GARAN-Vorlagen) stammen unverändert von der Europäischen Kommission und unterliegen deren Vorgaben (insbesondere: keine inhaltliche Veränderung zulässig) — Herkunft und Details in ASSETS.md.


All versions of hug-eu-label with dependencies

PHP Build Version
Package Version
Requires php Version ^8.2
shopware/core Version ~6.7.0
shopware/administration Version ~6.7.0
shopware/storefront Version ~6.7.0
bacon/bacon-qr-code Version ^3.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package hotte512/hug-eu-label contains the following files

Loading the files please wait ...