[{"data":1,"prerenderedAt":1752},["ShallowReactive",2],{"navigation-de":3,"search_de":84,"docs:de:intro":1601},[4],{"title":5,"path":6,"stem":7,"children":8,"page":50},"Docs","\u002Fdocs","docs",[9,13,17,51,72],{"title":10,"path":11,"stem":12},"Einführung in ShopBite","\u002Fdocs\u002Fintro","docs\u002F1.intro",{"title":14,"path":15,"stem":16},"Architekturübersicht","\u002Fdocs\u002Farchitecture","docs\u002F2.architecture",{"title":18,"path":19,"stem":20,"children":21,"page":50},"Shopware","\u002Fdocs\u002Fshopware","docs\u002F7.shopware",[22,26,30,34,38,42,46],{"title":23,"path":24,"stem":25},"ShopBite Shopware Plugin","\u002Fdocs\u002Fshopware\u002Fintro","docs\u002F7.shopware\u002F0.intro",{"title":27,"path":28,"stem":29},"Shopware Installation","\u002Fdocs\u002Fshopware\u002Finstallation","docs\u002F7.shopware\u002F1.installation",{"title":31,"path":32,"stem":33},"ShopBite Plugin installieren","\u002Fdocs\u002Fshopware\u002Fplugin-installation","docs\u002F7.shopware\u002F2.plugin-installation",{"title":35,"path":36,"stem":37},"ShopBite Plugin Konfiguration","\u002Fdocs\u002Fshopware\u002Fplugin-configuration","docs\u002F7.shopware\u002F3.plugin-configuration",{"title":39,"path":40,"stem":41},"Geschäftszeiten Management","\u002Fdocs\u002Fshopware\u002Fbusiness-hours","docs\u002F7.shopware\u002F4.business-hours",{"title":43,"path":44,"stem":45},"Feiertagsmanagement","\u002Fdocs\u002Fshopware\u002Fholidays","docs\u002F7.shopware\u002F5.holidays",{"title":47,"path":48,"stem":49},"Checkout-Erweiterungen","\u002Fdocs\u002Fshopware\u002Fcheckout","docs\u002F7.shopware\u002F6.checkout",false,{"title":52,"path":53,"stem":54,"children":55,"page":50},"Storefront","\u002Fdocs\u002Fstorefront","docs\u002F8.storefront",[56,60,64,68],{"title":57,"path":58,"stem":59},"Erste Schritte mit der Storefront","\u002Fdocs\u002Fstorefront\u002Ffirst-steps","docs\u002F8.storefront\u002F1.first-steps",{"title":61,"path":62,"stem":63},"Konfiguration","\u002Fdocs\u002Fstorefront\u002Fconfiguration","docs\u002F8.storefront\u002F2.configuration",{"title":65,"path":66,"stem":67},"Content Management","\u002Fdocs\u002Fstorefront\u002Fcontent","docs\u002F8.storefront\u002F3.content",{"title":69,"path":70,"stem":71},"Storefront vs Headless Verakufskanal","\u002Fdocs\u002Fstorefront\u002Fstorefront-vs-headless","docs\u002F8.storefront\u002F4.storefront-vs-headless",{"title":73,"path":74,"stem":75,"children":76,"page":50},"Receipt Printer","\u002Fdocs\u002Freceipt-printer","docs\u002F9.receipt-printer",[77,81],{"title":78,"path":79,"stem":80},"Installation und Einrichtung","\u002Fdocs\u002Freceipt-printer\u002Finstallation","docs\u002F9.receipt-printer\u002F1.installation",{"title":61,"path":82,"stem":83},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration","docs\u002F9.receipt-printer\u002F2.configuration",[85,89,93,99,104,109,114,117,121,126,131,137,142,147,152,157,162,166,169,173,178,183,187,192,197,202,207,212,216,221,226,231,236,240,245,250,254,259,264,269,273,278,283,288,293,298,302,307,310,313,317,322,327,332,336,341,346,350,355,360,365,369,374,379,384,388,393,398,403,407,410,414,419,422,427,432,437,441,446,451,456,461,466,471,475,480,485,490,494,499,504,509,512,517,522,527,532,536,541,546,551,555,558,561,565,570,575,581,586,590,595,600,605,610,615,620,623,628,633,638,643,647,650,655,660,665,670,674,679,684,689,694,699,703,708,713,718,722,726,731,736,741,746,750,753,756,761,766,769,774,779,784,789,794,798,803,808,813,818,823,827,831,836,840,845,849,854,859,864,869,873,878,883,887,890,894,899,904,908,911,914,918,922,925,930,935,939,943,947,950,954,958,962,966,969,973,978,982,986,991,994,999,1004,1008,1012,1017,1020,1024,1028,1031,1034,1037,1042,1047,1051,1054,1057,1061,1065,1069,1073,1078,1082,1087,1092,1096,1101,1105,1110,1115,1120,1124,1128,1133,1137,1142,1147,1150,1155,1159,1163,1166,1171,1176,1181,1185,1188,1191,1196,1201,1206,1210,1213,1218,1223,1228,1233,1238,1243,1248,1253,1258,1262,1264,1268,1273,1278,1283,1288,1293,1298,1303,1308,1313,1315,1319,1324,1329,1334,1339,1344,1349,1354,1359,1364,1369,1372,1377,1380,1384,1389,1394,1399,1403,1408,1413,1418,1423,1427,1431,1436,1440,1445,1450,1454,1459,1464,1468,1473,1478,1482,1486,1489,1493,1498,1503,1508,1513,1517,1522,1527,1532,1536,1541,1546,1551,1554,1559,1564,1569,1573,1578,1583,1587,1592,1597],{"id":11,"title":10,"titles":86,"content":87,"level":88},[],"Eine umfassende Einführung in das ShopBite E-Commerce System für Gastronomiebetriebe",1,{"id":90,"title":10,"titles":91,"content":92,"level":88},"\u002Fdocs\u002Fintro#einführung-in-shopbite",[],"Willkommen bei ShopBite - der modernen E-Commerce Lösung speziell für Gastronomiebetriebe. ShopBite kombiniert die leistungsstarke Shopware 6 Plattform mit einer modernen Headless-Architektur und speziellen Erweiterungen für die Gastronomie.",{"id":94,"title":95,"titles":96,"content":97,"level":98},"\u002Fdocs\u002Fintro#was-ist-shopbite","Was ist ShopBite?",[10],"ShopBite ist ein modulares E-Commerce System, das aus verschiedenen Open-Source-Komponenten besteht und eine vollständige Webshop-Lösung für Gastronomiebetriebe bietet: Shopware 6 - Die Kern-E-Commerce-PlattformShopBite Storefront - Eine moderne Nuxt.js-basierte BenutzeroberflächeShopBite Plugin - Erweiterungen für Shopware 6Order Printer - Drucklösungen für Bestellungen",2,{"id":100,"title":101,"titles":102,"content":103,"level":98},"\u002Fdocs\u002Fintro#zielgruppe","Zielgruppe",[10],"ShopBite richtet sich an Gastronomiebetriebe aller Größen: Restaurants, Cafés und BarsFood-Trucks und Catering-DiensteBäckereien und KonditoreienAlle Gastronomiebetriebe, die Online-Bestellungen anbieten möchten",{"id":105,"title":106,"titles":107,"content":108,"level":98},"\u002Fdocs\u002Fintro#vorteile-von-shopbite","Vorteile von ShopBite",[10],"Moderne Technologie: Headless-Architektur für maximale FlexibilitätGastronomie-spezifisch: Funktionen, die speziell auf die Bedürfnisse der Gastronomie zugeschnitten sindOpen Source: Volle Kontrolle über Ihr SystemErweiterbar: Einfache Anpassung an individuelle AnforderungenKosteneffizient: Keine monatlichen Lizenzgebühren für die Kernsoftware",{"id":110,"title":111,"titles":112,"content":113,"level":98},"\u002Fdocs\u002Fintro#nächste-schritte","Nächste Schritte",[10],"Architekturübersicht - Technische Architektur und KomponentenShopware Plugin - Shopware-spezifische FunktionenStorefront - Benutzeroberfläche einrichtenOrder Printer - Drucklösungen konfigurieren",{"id":15,"title":14,"titles":115,"content":116,"level":88},[],"Die technische Architektur des ShopBite Systems",{"id":118,"title":14,"titles":119,"content":120,"level":88},"\u002Fdocs\u002Farchitecture#architekturübersicht",[],"ShopBite folgt einer modernen Headless-Architektur, die Flexibilität und Skalierbarkeit bietet. Diese Architektur trennt die Benutzeroberfläche (Frontend) von der Geschäftslogik (Backend) und ermöglicht so maximale Anpassungsfähigkeit.",{"id":122,"title":123,"titles":124,"content":125,"level":98},"\u002Fdocs\u002Farchitecture#systemkomponenten","Systemkomponenten",[14],"graph TD\n    A[ShopBite Storefront] -->|API Calls| B[Shopware 6]\n    B -->|Database| C[MySQL\u002FMariaDB]\n    B -->|Events| D[Order Printer]\n    D -->|Print Jobs| E[Thermal Printers]\n    A -->|Web Interface| F[Customers]",{"id":127,"title":128,"titles":129,"content":130,"level":98},"\u002Fdocs\u002Farchitecture#komponenten-im-detail","Komponenten im Detail",[14],"",{"id":132,"title":133,"titles":134,"content":135,"level":136},"\u002Fdocs\u002Farchitecture#_1-shopbite-storefront-nuxtjs","1. ShopBite Storefront (Nuxt.js)",[14,128],"Die Storefront ist eine moderne, responsive Benutzeroberfläche, die mit Nuxt.js entwickelt wurde. Sie kommuniziert über die Shopware Store API mit dem Backend. Technologien: Nuxt.js 3Vue.js 3TypeScriptTailwind CSS Verantwortlichkeiten: Benutzeroberfläche für KundenProduktkatalog-AnzeigeBestellprozess (Checkout)Echtzeit-Updates",3,{"id":138,"title":139,"titles":140,"content":141,"level":136},"\u002Fdocs\u002Farchitecture#_2-shopware-6","2. Shopware 6",[14,128],"Shopware 6 dient als Kern-E-Commerce-Plattform und bietet: ProduktmanagementBestellverwaltungKundenverwaltungZahlungsabwicklung Erweiterte Funktionen durch ShopBite: Gastronomie-spezifische DatenmodelleErweiterte API-EndpunkteEvent-basierte Integration",{"id":143,"title":144,"titles":145,"content":146,"level":136},"\u002Fdocs\u002Farchitecture#_3-shopbite-plugin","3. ShopBite Plugin",[14,128],"Das ShopBite Plugin erweitert Shopware 6 um gastronomie-spezifische Funktionen: GeschäftszeitenverwaltungFeiertagsmanagementSpezielle Checkout-FunktionenAPI-Erweiterungen für die Storefront Technische Details: PHP-basierte ErweiterungIntegration in Shopware Admin-OberflächeREST-API-Erweiterungen",{"id":148,"title":149,"titles":150,"content":151,"level":136},"\u002Fdocs\u002Farchitecture#_4-order-printer","4. Order Printer",[14,128],"Der Order Printer ist ein spezieller Dienst, der Bestellungen direkt an Küchen- oder Thekendrucker sendet. Unterstützte Drucker: ThermaldruckerESC\u002FPOS-DruckerCUPS-kompatible Drucker Funktionsweise: Abfrage neuer Bestellungen über APIFormatierung der DruckdatenDirekte Kommunikation mit Druckern",{"id":153,"title":154,"titles":155,"content":156,"level":98},"\u002Fdocs\u002Farchitecture#datenfluss","Datenfluss",[14],"Kunde platziert Bestellung → Storefront sendet Daten an Shopware APIShopware verarbeitet Bestellung → Speichert in DatenbankShopware sendet Event → Order Printer empfängt BestellinformationenOrder Printer druckt Bestellung → Direkt an KüchendruckerStatusaktualisierung → Storefront zeigt Bestellstatus an",{"id":158,"title":159,"titles":160,"content":161,"level":98},"\u002Fdocs\u002Farchitecture#technische-vorteile","Technische Vorteile",[14],"Skalierbarkeit: Komponenten können unabhängig skaliert werdenWartbarkeit: Klare Trennung der VerantwortlichkeitenFlexibilität: Einfache Anpassung einzelner KomponentenZukunftssicherheit: Moderne Technologien und Standards",{"id":163,"title":111,"titles":164,"content":165,"level":98},"\u002Fdocs\u002Farchitecture#nächste-schritte",[14],"Shopware Plugin Dokumentation - Detaillierte Informationen zum Shopware PluginStorefront Dokumentation - Einrichtung und Konfiguration der StorefrontOrder Printer Dokumentation - Drucklösungen und Integration html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"id":24,"title":23,"titles":167,"content":168,"level":88},[],"Willkommen bei der umfassenden Dokumentation für das ShopBite Shopware Plugin. Dieses Plugin ist ein zentraler Bestandteil des ShopBite-Ökosystems und ermöglicht die nahtlose Integration zwischen Shopware 6 und der ShopBite Nuxt Storefront.",{"id":170,"title":171,"titles":172,"content":168,"level":88},"\u002Fdocs\u002Fshopware\u002Fintro#shopbite-shopware-plugin-dokumentation","ShopBite Shopware Plugin - Dokumentation",[],{"id":174,"title":175,"titles":176,"content":177,"level":98},"\u002Fdocs\u002Fshopware\u002Fintro#überblick","Überblick",[171],"Das ShopBite Plugin erweitert Shopware 6 um spezielle Funktionen, die speziell für Gastronomie- und Einzelhandelsbetriebe entwickelt wurden. Es bietet erweiterte Konfigurationsmöglichkeiten, Geschäftszeitenverwaltung, Feiertagsmanagement und Checkout-Erweiterungen, die für eine hochperformante Headless-Storefront erforderlich sind.",{"id":179,"title":180,"titles":181,"content":182,"level":98},"\u002Fdocs\u002Fshopware\u002Fintro#plugin-architektur","Plugin-Architektur",[171],"graph TD\n    A[Shopware 6 Core] --> B[ShopBite Plugin]\n    B --> C[Business Hours Management]\n    B --> D[Holiday Management]\n    B --> E[Storefront Configuration]\n    B --> F[Checkout Enhancements]\n    B --> G[Store API Extensions]\n    G --> H[ShopBite Nuxt Storefront]\n    H --> I[Order Printer Service]",{"id":184,"title":185,"titles":186,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fintro#hauptfunktionen","Hauptfunktionen",[171],{"id":188,"title":189,"titles":190,"content":191,"level":136},"\u002Fdocs\u002Fshopware\u002Fintro#geschäftszeitenverwaltung","📅 Geschäftszeitenverwaltung",[171,185],"Flexible Öffnungszeiten: Konfigurieren Sie Öffnungszeiten für jeden WochentagSales Channel-spezifisch: Unterschiedliche Zeiten für verschiedene VertriebskanäleStore API-Integration: Abruf über \u002Fstore-api\u002Fshopbite\u002Fbusiness-hour",{"id":193,"title":194,"titles":195,"content":196,"level":136},"\u002Fdocs\u002Fshopware\u002Fintro#feiertagsmanagement","🎉 Feiertagsmanagement",[171,185],"Einmalige Feiertage: Konfigurieren Sie individuelle SchließtageWiederkehrende Feiertage: Jährlich wiederholende FeiertageZeitraum-basiert: Mehrtägige Schließungen (z.B. Weihnachten)Store API-Integration: Abruf über \u002Fstore-api\u002Fshopbite\u002Fholiday",{"id":198,"title":199,"titles":200,"content":201,"level":136},"\u002Fdocs\u002Fshopware\u002Fintro#checkout-erweiterungen","🛒 Checkout-Erweiterungen",[171,185],"Container-basierte Produkte: Spezielle Verarbeitung für ProduktgruppenBon-Drucktypen: Unterschiedliche Druckformate für verschiedene ProdukteCustom Fields: Erweiterte Produktattribute für Gastronomie",{"id":203,"title":204,"titles":205,"content":206,"level":136},"\u002Fdocs\u002Fshopware\u002Fintro#storefront-konfiguration","🔧 Storefront-Konfiguration",[171,185],"API-Endpunkte: Spezifische Konfigurationsendpunkte für die StorefrontCheckout-Aktivierung: Steuerung der Checkout-FunktionalitätLieferzeitvorgaben: Standard-Lieferzeiten und -faktoren",{"id":208,"title":209,"titles":210,"content":211,"level":136},"\u002Fdocs\u002Fshopware\u002Fintro#datenbankstruktur","🔄 Datenbankstruktur",[171,185],"Business Hours Tabelle: shopbite_business_hourHolidays Tabelle: shopbite_holidayCustom Fields: Erweiterte Produktattribute",{"id":213,"title":214,"titles":215,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fintro#dokumentationsstruktur","Dokumentationsstruktur",[171],{"id":217,"title":218,"titles":219,"content":220,"level":136},"\u002Fdocs\u002Fshopware\u002Fintro#einführung","📋 Einführung",[171,214],"Shopware Installation - Systemvoraussetzungen und Shopware-SetupPlugin Installation - Plugin-Installation und Aktivierung",{"id":222,"title":223,"titles":224,"content":225,"level":136},"\u002Fdocs\u002Fshopware\u002Fintro#️-konfiguration","⚙️ Konfiguration",[171,214],"Plugin Konfiguration - Detaillierte Einrichtung und VerwaltungGeschäftszeiten Management - Konfiguration von ÖffnungszeitenFeiertagsmanagement - Einrichtung von SchließtagenCheckout-Erweiterungen - Spezielle Checkout-Funktionen",{"id":227,"title":228,"titles":229,"content":230,"level":136},"\u002Fdocs\u002Fshopware\u002Fintro#administration","🔧 Administration",[171,214],"Administrationsoberfläche - Bedienung der Plugin-OberflächeAPI-Referenz - Technische API-DokumentationFehlerbehebung - Problembehandlung und Support",{"id":232,"title":233,"titles":234,"content":235,"level":136},"\u002Fdocs\u002Fshopware\u002Fintro#erweiterte-themen","🚀 Erweiterte Themen",[171,214],"Entwicklerdokumentation - Erweiterungen und AnpassungenPerformance-Optimierung - Skalierung und CachingSicherheit - Best Practices für sicheren Betrieb",{"id":237,"title":238,"titles":239,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fintro#schnellstart","Schnellstart",[171],{"id":241,"title":242,"titles":243,"content":244,"level":136},"\u002Fdocs\u002Fshopware\u002Fintro#systemanforderungen","Systemanforderungen",[171,238],"Shopware 6.7.0 oder höherPHP 8.4 oder höherMySQL 5.7+ oder MariaDB 10.3+Composer 2.0+",{"id":246,"title":247,"titles":248,"content":249,"level":136},"\u002Fdocs\u002Fshopware\u002Fintro#installation-in-3-schritten","Installation in 3 Schritten",[171,238],"Plugin installieren:composer require shopbite-de\u002Fshopware-plugin\nPlugin aktivieren:bin\u002Fconsole plugin:install --activate ShopBite\nCache leeren:bin\u002Fconsole cache:clear",{"id":251,"title":252,"titles":253,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fintro#support-und-ressourcen","Support und Ressourcen",[171],{"id":255,"title":256,"titles":257,"content":258,"level":136},"\u002Fdocs\u002Fshopware\u002Fintro#offizielle-ressourcen","Offizielle Ressourcen",[171,252],"GitHub Repository: github.com\u002Fshopbite-de\u002Fshopware-pluginShopBite Website: shopbite.deShopware Dokumentation: docs.shopware.com",{"id":260,"title":261,"titles":262,"content":263,"level":136},"\u002Fdocs\u002Fshopware\u002Fintro#community","Community",[171,252],"Forum: community.shopbite.deSlack-Kanal: shopbite.slack.comStack Overflow: stackoverflow.com\u002Ftags\u002Fshopbite",{"id":265,"title":266,"titles":267,"content":268,"level":136},"\u002Fdocs\u002Fshopware\u002Fintro#support","Support",[171,252],"E-Mail: support@shopbite.deTelefon: +49 123 456789Support-Zeiten: Mo-Fr 09:00-17:00 Uhr",{"id":270,"title":271,"titles":272,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fintro#häufige-fragen","Häufige Fragen",[171],{"id":274,"title":275,"titles":276,"content":277,"level":136},"\u002Fdocs\u002Fshopware\u002Fintro#welche-shopware-version-wird-unterstützt","Welche Shopware-Version wird unterstützt?",[171,271],"Das Plugin unterstützt Shopware 6.7.0 und höher. Für ältere Versionen kontaktieren Sie bitte unseren Support.",{"id":279,"title":280,"titles":281,"content":282,"level":136},"\u002Fdocs\u002Fshopware\u002Fintro#funktioniert-das-plugin-mit-anderen-plugins","Funktioniert das Plugin mit anderen Plugins?",[171,271],"Ja, das ShopBite Plugin ist kompatibel mit den meisten Shopware-Plugins. Bei Konflikten kontaktieren Sie unseren Support.",{"id":284,"title":285,"titles":286,"content":287,"level":136},"\u002Fdocs\u002Fshopware\u002Fintro#wie-werden-die-daten-in-der-storefront-angezeigt","Wie werden die Daten in der Storefront angezeigt?",[171,271],"Die Daten werden über die Shopware Store API bereitgestellt und von der ShopBite Nuxt Storefront abgerufen.",{"id":289,"title":290,"titles":291,"content":292,"level":136},"\u002Fdocs\u002Fshopware\u002Fintro#kann-ich-das-plugin-anpassen","Kann ich das Plugin anpassen?",[171,271],"Ja, das Plugin bietet Erweiterungsmöglichkeiten. Siehe Entwicklerdokumentation für Details.",{"id":294,"title":295,"titles":296,"content":297,"level":136},"\u002Fdocs\u002Fshopware\u002Fintro#wie-oft-werden-die-daten-aktualisiert","Wie oft werden die Daten aktualisiert?",[171,271],"Die Daten werden in Echtzeit über die Store API abgerufen. Die Storefront kann die Daten bei Bedarf neu laden.",{"id":299,"title":111,"titles":300,"content":301,"level":98},"\u002Fdocs\u002Fshopware\u002Fintro#nächste-schritte",[171],"📖 Shopware Installation - Shopware-System vorbereiten🛠️ Plugin Installation - Plugin einrichten⚙️ Plugin Konfiguration - Funktionen konfigurieren🎉 Feiertagsmanagement - Schließtage einrichten",{"id":303,"title":304,"titles":305,"content":306,"level":98},"\u002Fdocs\u002Fshopware\u002Fintro#feedback","Feedback",[171],"Haben Sie Fragen, Vorschläge oder Feedback zur Dokumentation? Wir freuen uns über Ihre Rückmeldung! Dokumentations-Issues: GitHub IssuesVerbesserungsvorschläge: Feedback-FormularBeiträge: Contributing Guide Vielen Dank, dass Sie das ShopBite Shopware Plugin verwenden! html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"id":28,"title":27,"titles":308,"content":309,"level":88},[],"Dieses Kapitel führt Sie durch die Installation von Shopware 6 mit den spezifischen Anforderungen für das ShopBite Plugin.",{"id":311,"title":27,"titles":312,"content":309,"level":88},"\u002Fdocs\u002Fshopware\u002Finstallation#shopware-installation",[],{"id":314,"title":315,"titles":316,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Finstallation#systemvoraussetzungen","Systemvoraussetzungen",[27],{"id":318,"title":319,"titles":320,"content":321,"level":136},"\u002Fdocs\u002Fshopware\u002Finstallation#server-anforderungen","Server-Anforderungen",[27,315],"Webserver: Apache 2.4+ oder Nginx 1.20+PHP: 8.4 oder höherDatenbank: MySQL 5.7+ oder MariaDB 10.3+Speicher: Mindestens 2GB RAM, 4GB empfohlenFestplattenplatz: Mindestens 10GB freier Speicher",{"id":323,"title":324,"titles":325,"content":326,"level":136},"\u002Fdocs\u002Fshopware\u002Finstallation#php-erweiterungen","PHP-Erweiterungen",[27,315],"# Erforderliche PHP-Erweiterungen\nphp -m | grep -E \"(ctype|curl|gd|intl|json|mbstring|openssl|pdo_mysql|tokenizer|xml|zip)\"\n\n# Fehlende Erweiterungen installieren (Ubuntu\u002FDebian)\nsudo apt-get install php8.4-{ctype,curl,gd,intl,json,mbstring,openssl,pdo_mysql,tokenizer,xml,zip}",{"id":328,"title":329,"titles":330,"content":331,"level":136},"\u002Fdocs\u002Fshopware\u002Finstallation#empfohlene-shopware-version","Empfohlene Shopware-Version",[27,315],"Das ShopBite Plugin unterstützt Shopware 6.7.0 und höher. Wir empfehlen die Verwendung der aktuellen stabilen Version.",{"id":333,"title":334,"titles":335,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Finstallation#installationsmethoden","Installationsmethoden",[27],{"id":337,"title":338,"titles":339,"content":340,"level":136},"\u002Fdocs\u002Fshopware\u002Finstallation#_1-offizielle-shopware-installation","1. Offizielle Shopware-Installation",[27,334],"Folgen Sie der offiziellen Shopware-Dokumentation: Installationsassistent: docs.shopware.com\u002FinstallationCLI-Installation:\n# Shopware herunterladen\nwget https:\u002F\u002Fwww.shopware.com\u002Fdownload -O shopware.zip\nunzip shopware.zip\ncd shopware\n\n# Installation starten\nphp bin\u002Fconsole system:install",{"id":342,"title":343,"titles":344,"content":345,"level":136},"\u002Fdocs\u002Fshopware\u002Finstallation#_2-shopbite-vorkonfiguriertes-repository","2. ShopBite-vorkonfiguriertes Repository",[27,334],"Für eine schnelle Einrichtung mit ShopBite-spezifischen Konfigurationen: # Repository klonen\ngit clone https:\u002F\u002Fgithub.com\u002Fshopbite-de\u002Fshopware.git\ncd shopware\n\n# Abhängigkeiten installieren\ncomposer install\n\n# Datenbank einrichten\nbin\u002Fconsole system:install \\\n  --db-host=localhost \\\n  --db-user=shopware \\\n  --db-password=securepassword \\\n  --db-name=shopware \\\n  --shop-name=\"Mein ShopBite Shop\" \\\n  --shop-locale=de-DE \\\n  --currency=EUR \\\n  --admin-username=admin \\\n  --admin-password=secureadminpassword \\\n  --admin-email=admin@mein-shop.de",{"id":347,"title":348,"titles":349,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Finstallation#shopware-konfiguration-für-shopbite","Shopware-Konfiguration für ShopBite",[27],{"id":351,"title":352,"titles":353,"content":354,"level":136},"\u002Fdocs\u002Fshopware\u002Finstallation#grundeinstellungen","Grundeinstellungen",[27,348],"Sprache und Währung:Sprache: Deutsch (de-DE)Währung: Euro (EUR)Zeitzone: Europe\u002FBerlinSales Channel einrichten:Navigieren Sie zu Einstellungen > VertriebskanäleErstellen Sie einen neuen Sales Channel für ShopBiteWählen Sie Storefront-Typ: \"Storefront\"API-Zugang konfigurieren:Navigieren Sie zu Einstellungen > System > IntegrationenErstellen Sie eine neue Integration für ShopBiteBerechtigungen setzen: order:read, order:write, product:read",{"id":356,"title":357,"titles":358,"content":359,"level":136},"\u002Fdocs\u002Fshopware\u002Finstallation#performance-optimierung","Performance-Optimierung",[27,348],"# Cache-Konfiguration\nbin\u002Fconsole cache:configure --env=prod\n\n# OPcache aktivieren\nphp -i | grep opcache\n\n# Shopware-Cache optimieren\nbin\u002Fconsole cache:pool:clear\nbin\u002Fconsole cache:warmup",{"id":361,"title":362,"titles":363,"content":364,"level":136},"\u002Fdocs\u002Fshopware\u002Finstallation#datenbank-optimierung","Datenbank-Optimierung",[27,348],"-- MySQL-Optimierung\nSET GLOBAL innodb_buffer_pool_size = 1024 * 1024 * 1024; -- 1GB\nSET GLOBAL innodb_log_file_size = 256 * 1024 * 1024; -- 256MB\nSET GLOBAL innodb_flush_log_at_trx_commit = 2;\n\n-- Indizes für ShopBite-Tabellen\nALTER TABLE `shopbite_business_hour` ADD INDEX `idx_sales_channel` (`sales_channel_id`);\nALTER TABLE `shopbite_holiday` ADD INDEX `idx_sales_channel` (`sales_channel_id`);",{"id":366,"title":367,"titles":368,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Finstallation#shopware-update","Shopware-Update",[27],{"id":370,"title":371,"titles":372,"content":373,"level":136},"\u002Fdocs\u002Fshopware\u002Finstallation#update-vorbereitung","Update-Vorbereitung",[27,367],"# Wartungsmodus aktivieren\nbin\u002Fconsole maintenance:enable\n\n# Backup erstellen\nmysqldump -u shopware -p shopware > shopware_backup_$(date +%Y-%m-%d).sql\ntar -czvf shopware_files_$(date +%Y-%m-%d).tar.gz public\u002F config\u002F",{"id":375,"title":376,"titles":377,"content":378,"level":136},"\u002Fdocs\u002Fshopware\u002Finstallation#update-durchführung","Update-Durchführung",[27,367],"# Shopware-Update\ncomposer update shopware\u002Fcore\nbin\u002Fconsole system:update:prepare\nbin\u002Fconsole system:update:finish\n\n# Datenbank-Migrationen ausführen\nbin\u002Fconsole database:migrate\n\n# Cache leeren\nbin\u002Fconsole cache:clear",{"id":380,"title":381,"titles":382,"content":383,"level":136},"\u002Fdocs\u002Fshopware\u002Finstallation#update-nachbereitung","Update-Nachbereitung",[27,367],"# Wartungsmodus deaktivieren\nbin\u002Fconsole maintenance:disable\n\n# Plugin-kompatibilität prüfen\nbin\u002Fconsole plugin:check-compatibility\n\n# ShopBite-spezifische Migrationen ausführen\nbin\u002Fconsole database:migrate --all ShopBite",{"id":385,"title":386,"titles":387,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Finstallation#häufige-installationsprobleme","Häufige Installationsprobleme",[27],{"id":389,"title":390,"titles":391,"content":392,"level":136},"\u002Fdocs\u002Fshopware\u002Finstallation#problem-php-version-nicht-kompatibel","Problem: PHP-Version nicht kompatibel",[27,386],"Symptome: Fehler: \"PHP version 8.4 required\"Shopware startet nicht Lösung: # PHP-Version prüfen\nphp -v\n\n# PHP 8.4 installieren (Ubuntu\u002FDebian)\nsudo add-apt-repository ppa:ondrej\u002Fphp\nsudo apt-get update\nsudo apt-get install php8.4\n\n# PHP-Version wechseln\nsudo update-alternatives --config php",{"id":394,"title":395,"titles":396,"content":397,"level":136},"\u002Fdocs\u002Fshopware\u002Finstallation#problem-datenbankverbindung-fehlgeschlagen","Problem: Datenbankverbindung fehlgeschlagen",[27,386],"Symptome: Fehler: \"SQLSTATEHY000 2002 Connection refused\"Shopware kann keine Datenbankverbindung herstellen Lösung: # Datenbankdienst prüfen\nsudo systemctl status mysql\n\n# Datenbank neu starten\nsudo systemctl restart mysql\n\n# Berechtigungen prüfen\nmysql -u root -p\nGRANT ALL PRIVILEGES ON shopware.* TO 'shopware'@'localhost' IDENTIFIED BY 'password';\nFLUSH PRIVILEGES;",{"id":399,"title":400,"titles":401,"content":402,"level":136},"\u002Fdocs\u002Fshopware\u002Finstallation#problem-cache-probleme","Problem: Cache-Probleme",[27,386],"Symptome: Änderungen werden nicht angezeigtFehler: \"Cache directory not writable\" Lösung: # Cache-Berechtigungen setzen\nsudo chmod -R 777 var\u002Fcache\nsudo chown -R www-data:www-data var\u002F\n\n# Cache leeren\nbin\u002Fconsole cache:clear --no-warmup\nbin\u002Fconsole cache:warmup",{"id":404,"title":111,"titles":405,"content":406,"level":98},"\u002Fdocs\u002Fshopware\u002Finstallation#nächste-schritte",[27],"Plugin Installation - ShopBite Plugin installierenPlugin Konfiguration - Plugin einrichtenShopware Dokumentation - Offizielle Shopware-Dokumentation html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"id":32,"title":31,"titles":408,"content":409,"level":88},[],"Dieses Kapitel führt Sie durch die Installation des ShopBite Plugins in Ihrem Shopware 6-System.",{"id":411,"title":412,"titles":413,"content":409,"level":88},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#shopbite-plugin-installation","ShopBite Plugin Installation",[],{"id":415,"title":416,"titles":417,"content":418,"level":98},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#voraussetzungen","Voraussetzungen",[412],"Shopware 6.7.0 oder höher (installiert und funktionierend)PHP 8.4 oder höherComposer 2.0 oder höherDatenbankzugriff mit ausreichenden Berechtigungen",{"id":420,"title":334,"titles":421,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#installationsmethoden",[412],{"id":423,"title":424,"titles":425,"content":426,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#_1-installation-über-composer-empfohlen","1. Installation über Composer (empfohlen)",[412,334],"# Plugin über Composer installieren\ncomposer require shopbite-de\u002Fshopware-plugin\n\n# Plugin aktivieren\nbin\u002Fconsole plugin:install --activate ShopBite\n\n# Cache leeren\nbin\u002Fconsole cache:clear",{"id":428,"title":429,"titles":430,"content":431,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#_2-installation-über-shopware-plugin-store","2. Installation über Shopware Plugin Store",[412,334],"Shopware Administration öffnenErweiterungen > Store navigierenNach \"ShopBite\" suchenInstallieren klickenAktivieren klicken",{"id":433,"title":434,"titles":435,"content":436,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#_3-manuelle-installation","3. Manuelle Installation",[412,334],"# Plugin herunterladen\nwget https:\u002F\u002Fgithub.com\u002Fshopbite-de\u002Fshopware-plugin\u002Freleases\u002Flatest\u002Fdownload\u002Fshopbite-plugin.zip\nunzip shopbite-plugin.zip -d custom\u002Fplugins\u002FShopBite\n\n# Plugin installieren und aktivieren\nbin\u002Fconsole plugin:refresh\nbin\u002Fconsole plugin:install --activate ShopBite\n\n# Datenbank-Migrationen ausführen\nbin\u002Fconsole database:migrate --all ShopBite\n\n# Cache leeren\nbin\u002Fconsole cache:clear",{"id":438,"title":439,"titles":440,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#installationsprozess-im-detail","Installationsprozess im Detail",[412],{"id":442,"title":443,"titles":444,"content":445,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#schritt-1-plugin-herunterladen","Schritt 1: Plugin herunterladen",[412,439],"# Composer-Methode (empfohlen)\ncomposer require shopbite-de\u002Fshopware-plugin\n\n# Manuelle Methode\nwget https:\u002F\u002Fgithub.com\u002Fshopbite-de\u002Fshopware-plugin\u002Freleases\u002Flatest\u002Fdownload\u002Fshopbite-plugin.zip\nunzip shopbite-plugin.zip -d custom\u002Fplugins\u002FShopBite",{"id":447,"title":448,"titles":449,"content":450,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#schritt-2-plugin-registrieren","Schritt 2: Plugin registrieren",[412,439],"# Plugin-List aktualisieren\nbin\u002Fconsole plugin:refresh\n\n# Plugin installieren\nbin\u002Fconsole plugin:install ShopBite",{"id":452,"title":453,"titles":454,"content":455,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#schritt-3-plugin-aktivieren","Schritt 3: Plugin aktivieren",[412,439],"# Plugin aktivieren\nbin\u002Fconsole plugin:activate ShopBite\n\n# Status prüfen\nbin\u002Fconsole plugin:list | grep ShopBite",{"id":457,"title":458,"titles":459,"content":460,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#schritt-4-datenbank-migrationen-ausführen","Schritt 4: Datenbank-Migrationen ausführen",[412,439],"# Migrationen ausführen\nbin\u002Fconsole database:migrate --all ShopBite\n\n# Migrationen prüfen\nbin\u002Fconsole database:migrate:status",{"id":462,"title":463,"titles":464,"content":465,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#schritt-5-cache-und-assets","Schritt 5: Cache und Assets",[412,439],"# Cache leeren\nbin\u002Fconsole cache:clear\n\n# Theme-Cache aktualisieren\nbin\u002Fconsole theme:compile\n\n# Administration-Cache aktualisieren\nbin\u002Fconsole administration:build",{"id":467,"title":468,"titles":469,"content":470,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#schritt-6-berechtigungen-prüfen","Schritt 6: Berechtigungen prüfen",[412,439],"# Verzeichnisberechtigungen setzen\nsudo chown -R www-data:www-data custom\u002Fplugins\u002FShopBite\nsudo chmod -R 755 custom\u002Fplugins\u002FShopBite\n\n# Cache-Berechtigungen\nsudo chmod -R 777 var\u002Fcache",{"id":472,"title":473,"titles":474,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#post-installation","Post-Installation",[412],{"id":476,"title":477,"titles":478,"content":479,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#administrationsoberfläche","Administrationsoberfläche",[412,473],"Shopware Administration öffnenErweiterungen > Meine Erweiterungen navigierenShopBite Plugin finden und auf Konfigurieren klickenGrundkonfiguration durchführen",{"id":481,"title":482,"titles":483,"content":484,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#api-zugang-einrichten","API-Zugang einrichten",[412,473],"# API-Integration erstellen\nbin\u002Fconsole integration:create:admin --name=\"ShopBite Storefront\" --description=\"API-Zugang für ShopBite Storefront\"\n\n# Berechtigungen setzen\nbin\u002Fconsole acl:role:create --name=\"ShopBite API Role\" --description=\"API-Rolle für ShopBite\"\nbin\u002Fconsole acl:role:assign --name=\"ShopBite API Role\" --resource=\"order:read,order:write,product:read\"",{"id":486,"title":487,"titles":488,"content":489,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#sales-channel-konfigurieren","Sales Channel konfigurieren",[412,473],"Einstellungen > Vertriebskanäle navigierenNeuen Sales Channel erstellenShopBite-spezifische Einstellungen konfigurierenAPI-Zugang zuweisen",{"id":491,"title":492,"titles":493,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#installationsprüfung","Installationsprüfung",[412],{"id":495,"title":496,"titles":497,"content":498,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#plugin-status-prüfen","Plugin-Status prüfen",[412,492],"# Plugin-Status anzeigen\nbin\u002Fconsole plugin:list | grep ShopBite\n\n# Plugin-Details anzeigen\nbin\u002Fconsole plugin:info ShopBite",{"id":500,"title":501,"titles":502,"content":503,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#datenbank-prüfen","Datenbank prüfen",[412,492],"# Tabellen prüfen\nmysql -u shopware -p shopware -e \"SHOW TABLES LIKE 'shopbite_%';\"\n\n# Daten prüfen\nmysql -u shopware -p shopware -e \"SELECT * FROM shopbite_business_hour LIMIT 5;\"",{"id":505,"title":506,"titles":507,"content":508,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#api-endpunkte-testen","API-Endpunkte testen",[412,492],"# API-Test (ersetzen Sie die URL und den Token)\ncurl -X GET \"https:\u002F\u002FIhre-Shopware-Domain.de\u002Fstore-api\u002Fshopbite\u002Fbusiness-hour\" \\\n  -H \"Authorization: Bearer IhrAPIToken\" \\\n  -H \"sw-access-key: IhrAccessKey\"",{"id":510,"title":386,"titles":511,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#häufige-installationsprobleme",[412],{"id":513,"title":514,"titles":515,"content":516,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#problem-plugin-wird-nicht-in-der-administration-angezeigt","Problem: Plugin wird nicht in der Administration angezeigt",[412,386],"Symptome: Plugin ist installiert, aber nicht sichtbarFehler: \"Plugin not found\" Lösungen: # Cache leeren\nbin\u002Fconsole cache:clear\n\n# Plugin-List aktualisieren\nbin\u002Fconsole plugin:refresh\n\n# Berechtigungen prüfen\nsudo chown -R www-data:www-data custom\u002Fplugins\u002FShopBite",{"id":518,"title":519,"titles":520,"content":521,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#problem-datenbank-migrationen-fehlgeschlagen","Problem: Datenbank-Migrationen fehlgeschlagen",[412,386],"Symptome: Fehler: \"Migration failed\"Tabellen werden nicht erstellt Lösungen: # Migrationen manuell ausführen\nbin\u002Fconsole database:migrate --all ShopBite --force\n\n# Datenbank-Berechtigungen prüfen\nmysql -u root -p\nGRANT ALL PRIVILEGES ON shopware.* TO 'shopware'@'localhost';\nFLUSH PRIVILEGES;",{"id":523,"title":524,"titles":525,"content":526,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#problem-api-endpunkte-nicht-erreichbar","Problem: API-Endpunkte nicht erreichbar",[412,386],"Symptome: 404 Fehler bei API-AufrufenEndpunkte nicht verfügbar Lösungen: # Routen-Cache leeren\nbin\u002Fconsole router:cache:warmup\n\n# Plugin neu aktivieren\nbin\u002Fconsole plugin:deactivate ShopBite\nbin\u002Fconsole plugin:activate ShopBite\n\n# API-Berechtigungen prüfen\nbin\u002Fconsole acl:role:list",{"id":528,"title":529,"titles":530,"content":531,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#problem-composer-installation-fehlgeschlagen","Problem: Composer-Installation fehlgeschlagen",[412,386],"Symptome: Fehler: \"Could not find package shopbite-de\u002Fshopware-plugin\"Composer-Installation bricht ab Lösungen: # Composer-Cache leeren\ncomposer clear-cache\n\n# Packagist aktualisieren\ncomposer update\n\n# Manuelle Installation\nwget https:\u002F\u002Fgithub.com\u002Fshopbite-de\u002Fshopware-plugin\u002Freleases\u002Flatest\u002Fdownload\u002Fshopbite-plugin.zip",{"id":533,"title":534,"titles":535,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#deinstallation","Deinstallation",[412],{"id":537,"title":538,"titles":539,"content":540,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#plugin-deaktivieren","Plugin deaktivieren",[412,534],"# Plugin deaktivieren\nbin\u002Fconsole plugin:deactivate ShopBite",{"id":542,"title":543,"titles":544,"content":545,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#plugin-deinstallieren","Plugin deinstallieren",[412,534],"# Plugin deinstallieren\nbin\u002Fconsole plugin:uninstall ShopBite\n\n# Daten bereinigen (optional)\nbin\u002Fconsole plugin:uninstall ShopBite --keep-user-data=false",{"id":547,"title":548,"titles":549,"content":550,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#manuelle-bereinigung","Manuelle Bereinigung",[412,534],"# Plugin-Verzeichnis entfernen\nrm -rf custom\u002Fplugins\u002FShopBite\n\n# Cache leeren\nbin\u002Fconsole cache:clear\n\n# Datenbank bereinigen (optional)\nmysql -u shopware -p shopware -e \"DROP TABLE IF EXISTS shopbite_business_hour, shopbite_holiday;\"",{"id":552,"title":111,"titles":553,"content":554,"level":98},"\u002Fdocs\u002Fshopware\u002Fplugin-installation#nächste-schritte",[412],"Plugin Konfiguration - Plugin einrichten und konfigurierenGeschäftszeiten Management - Öffnungszeiten konfigurierenFeiertagsmanagement - Schließtage einrichtenShopware Dokumentation - Offizielle Shopware-Dokumentation html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"id":36,"title":35,"titles":556,"content":557,"level":88},[],"Nach der Installation des ShopBite Plugins müssen Sie es konfigurieren, um die gastronomie-spezifischen Funktionen zu aktivieren und an Ihre Anforderungen anzupassen.",{"id":559,"title":35,"titles":560,"content":557,"level":88},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#shopbite-plugin-konfiguration",[],{"id":562,"title":563,"titles":564,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#grundkonfiguration","Grundkonfiguration",[35],{"id":566,"title":567,"titles":568,"content":569,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#_1-plugin-aktivieren","1. Plugin aktivieren",[35,563],"Shopware Administration öffnenErweiterungen > Meine Erweiterungen navigierenShopBite Plugin findenAktivieren klicken",{"id":571,"title":572,"titles":573,"content":574,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#_2-basis-einstellungen","2. Basis-Einstellungen",[35,563],"Navigieren Sie zu ShopBite > Einstellungen in der Administration:",{"id":576,"title":577,"titles":578,"content":579,"level":580},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#allgemeine-einstellungen","Allgemeine Einstellungen",[35,563,572],"Plugin aktivieren: Hauptschalter für alle ShopBite-FunktionenAPI-Zugang aktivieren: Ermöglicht der Storefront den Zugriff auf ShopBite-APIsDebug-Modus: Aktiviert detaillierte Protokollierung (nur für Entwicklung)Sales Channel-Auswahl: Wählen Sie die Vertriebskanäle, für die ShopBite aktiv sein soll",4,{"id":582,"title":583,"titles":584,"content":585,"level":580},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#storefront-einstellungen","Storefront-Einstellungen",[35,563,572],"Storefront-URL: Die URL Ihrer ShopBite Storefront (z.B. https:\u002F\u002FIhre-Storefront.de)API-Zugangsschlüssel: Der Schlüssel für die Storefront-API-KommunikationCORS-Origin: Die erlaubten Domains für CORS (z.B. https:\u002F\u002FIhre-Storefront.de)API-Timeout: Maximale Wartezeit für API-Anfragen (Standard: 30 Sekunden)",{"id":587,"title":588,"titles":589,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#geschäftszeitenverwaltung","Geschäftszeitenverwaltung",[35],{"id":591,"title":592,"titles":593,"content":594,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#_1-geschäftszeiten-einrichten","1. Geschäftszeiten einrichten",[35,588],"ShopBite > Geschäftszeiten navigierenNeue Geschäftszeit hinzufügen klickenFolgende Felder konfigurieren:",{"id":596,"title":597,"titles":598,"content":599,"level":580},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#geschäftszeiten-felder","Geschäftszeiten-Felder",[35,588,592],"FeldBeschreibungBeispielSales ChannelVertriebskanal auswählen\"Mein Restaurant\"WochentagTag der Woche (0=Sonntag, 1=Montag, etc.)1 (Montag)ÖffnungszeitÖffnungszeit im Format HH:MM11:00SchließzeitSchließzeit im Format HH:MM22:00GeschlossenTag als geschlossen markieren✓",{"id":601,"title":602,"titles":603,"content":604,"level":580},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#beispielkonfiguration","Beispielkonfiguration",[35,588,592],"Montag: 11:00 - 22:00\nDienstag: 11:00 - 22:00\nMittwoch: Geschlossen\nDonnerstag: 11:00 - 23:00\nFreitag: 11:00 - 00:00\nSamstag: 12:00 - 00:00\nSonntag: 12:00 - 22:00",{"id":606,"title":607,"titles":608,"content":609,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#_2-sonderöffnungszeiten","2. Sonderöffnungszeiten",[35,588],"Für besondere Anlässe oder saisonale Änderungen: ShopBite > Geschäftszeiten > Sonderöffnungszeiten navigierenNeue Sonderöffnungszeit hinzufügen klickenFolgende Felder konfigurieren:",{"id":611,"title":612,"titles":613,"content":614,"level":580},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#sonderöffnungszeiten-felder","Sonderöffnungszeiten-Felder",[35,588,607],"FeldBeschreibungBeispielSales ChannelVertriebskanal auswählen\"Mein Restaurant\"DatumDatum der Sonderöffnung24.12.2024ÖffnungszeitSpezielle Öffnungszeit10:00SchließzeitSpezielle Schließzeit14:00BeschreibungOptional Beschreibung\"Heiligabend - verkürzte Öffnungszeiten\"",{"id":616,"title":617,"titles":618,"content":619,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#_3-api-abfrage","3. API-Abfrage",[35,588],"Die Geschäftszeiten können über die Store API abgerufen werden: # API-Endpunkt\nGET \u002Fstore-api\u002Fshopbite\u002Fbusiness-hour\n\n# Beispielantwort\n{\n  \"data\": [\n    {\n      \"dayOfWeek\": 1,\n      \"openingTime\": \"11:00\",\n      \"closingTime\": \"22:00\",\n      \"salesChannelId\": \"019a36f224b0704fb6835914050392f4\"\n    },\n    {\n      \"dayOfWeek\": 2,\n      \"openingTime\": \"11:00\",\n      \"closingTime\": \"22:00\",\n      \"salesChannelId\": \"019a36f224b0704fb6835914050392f4\"\n    }\n  ]\n}",{"id":621,"title":43,"titles":622,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#feiertagsmanagement",[35],{"id":624,"title":625,"titles":626,"content":627,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#_1-feiertage-einrichten","1. Feiertage einrichten",[35,43],"ShopBite > Feiertage navigierenNeuen Feiertag hinzufügen klickenFolgende Felder konfigurieren:",{"id":629,"title":630,"titles":631,"content":632,"level":580},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#feiertags-felder","Feiertags-Felder",[35,43,625],"FeldBeschreibungBeispielNameName des Feiertags\"Weihnachten\"StartdatumBeginn der Schließung24.12.2024 18:00EnddatumEnde der Schließung26.12.2024 23:59Sales ChannelVertriebskanal auswählen\"Mein Restaurant\"Jährlich wiederholenFeiertag jährlich wiederholen✓BeschreibungOptional Beschreibung\"Weihnachtsferien\"",{"id":634,"title":635,"titles":636,"content":637,"level":580},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#beispiel-feiertage","Beispiel Feiertage",[35,43,625],"Neujahr: 01.01.2024 00:00 - 01.01.2024 23:59\nKarfreitag: 29.03.2024 00:00 - 29.03.2024 23:59\nOstermontag: 01.04.2024 00:00 - 01.04.2024 23:59\nTag der Arbeit: 01.05.2024 00:00 - 01.05.2024 23:59\nWeihnachten: 24.12.2024 18:00 - 26.12.2024 23:59",{"id":639,"title":640,"titles":641,"content":642,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#_2-wiederkehrende-feiertage","2. Wiederkehrende Feiertage",[35,43],"Für jährlich wiederkehrende Feiertage: Jährlich wiederholen aktivierenMonat und Tag auswählenName eingeben (z.B. \"Weihnachten\")Zeitraum definieren (z.B. 24.12. - 26.12.)",{"id":644,"title":617,"titles":645,"content":646,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#_3-api-abfrage-1",[35,43],"Feiertage können über die Store API abgerufen werden: # API-Endpunkt\nGET \u002Fstore-api\u002Fshopbite\u002Fholiday\n\n# Beispielantwort\n{\n  \"data\": [\n    {\n      \"id\": \"019a36f224b0704fb6835914050392f4\",\n      \"start\": \"2024-12-24T18:00:00+01:00\",\n      \"end\": \"2024-12-26T23:59:00+01:00\",\n      \"salesChannelId\": \"019a36f224b0704fb6835914050392f4\",\n      \"name\": \"Weihnachten\",\n      \"description\": \"Weihnachtsferien\"\n    }\n  ]\n}",{"id":648,"title":47,"titles":649,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#checkout-erweiterungen",[35],{"id":651,"title":652,"titles":653,"content":654,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#_1-bestelltypen","1. Bestelltypen",[35,47],"ShopBite unterstützt verschiedene Bestelltypen: Abholung: Kunden holen die Bestellung selbst abLieferung: Bestellung wird geliefertVor Ort: Bestellung für den sofortigen Verzehr vor Ort Konfigurieren Sie die verfügbaren Bestelltypen unter ShopBite > Checkout > Bestelltypen",{"id":656,"title":657,"titles":658,"content":659,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#_2-zeitfenster-für-bestellungen","2. Zeitfenster für Bestellungen",[35,47],"Legen Sie fest, wie weit im Voraus Bestellungen aufgegeben werden können: Mindestvorlaufzeit: 15 Minuten (Standard)Maximale Vorlaufzeit: 7 Tage (Standard)Zeitfenster-Intervall: 15 Minuten (Standard)",{"id":661,"title":662,"titles":663,"content":664,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#_3-bon-drucktypen","3. Bon-Drucktypen",[35,47],"Das Plugin unterstützt verschiedene Bon-Drucktypen für Produkte: Custom Fields konfigurieren:Navigieren Sie zu Einstellungen > Custom FieldsWählen Sie ShopBite Produkt SetKonfigurieren Sie Bon-Drucktyp für ProdukteDrucktypen:Standard: Normaler Bon-DruckKüche: Küchenbon für ZubereitungBar: Barbon für GetränkeKein Druck: Kein Bon-Druck erforderlich",{"id":666,"title":667,"titles":668,"content":669,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#_4-lieferzeitfaktoren","4. Lieferzeitfaktoren",[35,47],"Konfigurieren Sie Lieferzeitfaktoren für Produkte: Standard-Lieferzeit: 30 Minuten (konfigurierbar)Produktspezifische Faktoren: Multiplikator für die StandardzeitBeispiel: Pizza (Faktor 2) = 60 Minuten Lieferzeit",{"id":671,"title":672,"titles":673,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#api-konfiguration","API-Konfiguration",[35],{"id":675,"title":676,"titles":677,"content":678,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#_1-api-zugang-einrichten","1. API-Zugang einrichten",[35,672],"Einstellungen > System > Integrationen navigierenIntegration hinzufügen klickenFolgende Einstellungen konfigurieren:",{"id":680,"title":681,"titles":682,"content":683,"level":580},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#api-integrationseinstellungen","API-Integrationseinstellungen",[35,672,676],"FeldWertBeschreibungNameShopBite StorefrontName der IntegrationBeschreibungAPI-Zugang für ShopBiteBeschreibungBerechtigungenorder:read, order:write, product:readErforderliche API-BerechtigungenZugangstypAdmin-IntegrationVollständiger API-Zugriff",{"id":685,"title":686,"titles":687,"content":688,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#_2-webhooks-einrichten","2. Webhooks einrichten",[35,672],"Für Echtzeit-Updates: Einstellungen > System > Webhooks navigierenWebhook hinzufügen klickenFolgende Webhooks konfigurieren:",{"id":690,"title":691,"titles":692,"content":693,"level":580},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#empfohlene-webhooks","Empfohlene Webhooks",[35,672,686],"EreignisURLBeschreibungorder.state.changedhttps:\u002F\u002FIhre-Storefront.de\u002Fapi\u002Fwebhooks\u002Forder-statusBestellstatus-Änderungenorder.createdhttps:\u002F\u002FIhre-Storefront.de\u002Fapi\u002Fwebhooks\u002Forder-createdNeue Bestellungenproduct.changedhttps:\u002F\u002FIhre-Storefront.de\u002Fapi\u002Fwebhooks\u002Fproduct-changedProduktänderungen",{"id":695,"title":696,"titles":697,"content":698,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#_3-cors-konfiguration","3. CORS-Konfiguration",[35,672],"Konfigurieren Sie CORS für die Storefront: # In .env oder Konfiguration\nSHOPWARE_CORS_ALLOW_ORIGIN=\"https:\u002F\u002FIhre-Storefront.de\"\nSHOPWARE_CORS_ALLOW_METHODS=\"GET, POST, PUT, DELETE, OPTIONS\"\nSHOPWARE_CORS_ALLOW_HEADERS=\"Authorization, Content-Type, sw-access-key\"",{"id":700,"title":701,"titles":702,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#erweiterte-einstellungen","Erweiterte Einstellungen",[35],{"id":704,"title":705,"titles":706,"content":707,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#_1-leistungsoptimierung","1. Leistungsoptimierung",[35,701],"Cache-TTL: 3600 Sekunden (Standard)API-Rate-Limiting: 100 Anfragen pro Minute (Standard)Datenbank-Index-Optimierung: Aktiviert (empfohlen)",{"id":709,"title":710,"titles":711,"content":712,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#_2-protokollierung","2. Protokollierung",[35,701],"Protokollstufe: Info (Standard), Debug (für Entwicklung)Protokollrotation: Täglich (Standard)Maximale Protokollgröße: 100MB (Standard)",{"id":714,"title":715,"titles":716,"content":717,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#_3-datenbank-optimierung","3. Datenbank-Optimierung",[35,701],"-- Indizes für ShopBite-Tabellen\nALTER TABLE `shopbite_business_hour` ADD INDEX `idx_sales_channel` (`sales_channel_id`);\nALTER TABLE `shopbite_holiday` ADD INDEX `idx_sales_channel` (`sales_channel_id`);\n\n-- Optimierung für häufige Abfragen\nALTER TABLE `shopbite_business_hour` ADD INDEX `idx_day_of_week` (`day_of_week`);\nALTER TABLE `shopbite_holiday` ADD INDEX `idx_date_range` (`start`, `end`);",{"id":719,"title":720,"titles":721,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#problembehandlung","Problembehandlung",[35],{"id":723,"title":724,"titles":725,"content":130,"level":136},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#häufige-probleme","Häufige Probleme",[35,720],{"id":727,"title":728,"titles":729,"content":730,"level":580},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#problem-api-verbindung-fehlgeschlagen","Problem: API-Verbindung fehlgeschlagen",[35,720,724],"Symptome: \"Connection refused\" FehlerAPI-Endpunkte nicht erreichbar Lösungen: # API-Zugangsdaten prüfen\nbin\u002Fconsole integration:list\n\n# CORS-Einstellungen prüfen\nbin\u002Fconsole config:get Shopware.Core.SystemConfig.corsAllowOrigin\n\n# Firewall-Einstellungen prüfen\nsudo ufw status",{"id":732,"title":733,"titles":734,"content":735,"level":580},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#problem-geschäftszeiten-werden-nicht-angezeigt","Problem: Geschäftszeiten werden nicht angezeigt",[35,720,724],"Symptome: API liefert leere ErgebnisseGeschäftszeiten nicht sichtbar Lösungen: # Cache leeren\nbin\u002Fconsole cache:clear\n\n# Datenbank prüfen\nmysql -u shopware -p shopware -e \"SELECT * FROM shopbite_business_hour;\"\n\n# Sales Channel-ID prüfen\nbin\u002Fconsole sales-channel:list",{"id":737,"title":738,"titles":739,"content":740,"level":580},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#problem-feiertage-werden-nicht-berücksichtigt","Problem: Feiertage werden nicht berücksichtigt",[35,720,724],"Symptome: Bestellungen an Feiertagen möglichFeiertage nicht in API sichtbar Lösungen: # Feiertagsdaten prüfen\nmysql -u shopware -p shopware -e \"SELECT * FROM shopbite_holiday;\"\n\n# Zeitformat prüfen\nbin\u002Fconsole database:check-timezone\n\n# API-Abfrage testen\ncurl -X GET \"https:\u002F\u002FIhre-Domain.de\u002Fstore-api\u002Fshopbite\u002Fholiday\" -H \"Authorization: Bearer IhrToken\"",{"id":742,"title":743,"titles":744,"content":745,"level":580},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#problem-checkout-erweiterungen-funktionieren-nicht","Problem: Checkout-Erweiterungen funktionieren nicht",[35,720,724],"Symptome: Bon-Drucktypen werden ignoriertLieferzeitberechnung falsch Lösungen: # Custom Fields prüfen\nbin\u002Fconsole custom-field:set:list\n\n# Plugin-Cache leeren\nbin\u002Fconsole plugin:refresh ShopBite\n\n# Checkout-Prozessor prüfen\nbin\u002Fconsole debug:container --tag=shopware.checkout.cart.processor",{"id":747,"title":111,"titles":748,"content":749,"level":98},"\u002Fdocs\u002Fshopware\u002Fplugin-configuration#nächste-schritte",[35],"Geschäftszeiten Management - Detaillierte Geschäftszeiten-KonfigurationFeiertagsmanagement - Erweiterte FeiertagsverwaltungAdministrationsoberfläche - Bedienung der Plugin-OberflächeAPI-Referenz - Technische API-Dokumentation html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"id":40,"title":39,"titles":751,"content":752,"level":88},[],"Das ShopBite Plugin bietet ein leistungsstarkes Geschäftszeiten-Management-System, das speziell für Gastronomie- und Einzelhandelsbetriebe entwickelt wurde. Dieses Kapitel erklärt die detaillierte Konfiguration und Verwaltung von Geschäftszeiten.",{"id":754,"title":39,"titles":755,"content":752,"level":88},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#geschäftszeiten-management",[],{"id":757,"title":758,"titles":759,"content":760,"level":98},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#übersicht","Übersicht",[39],"Das Geschäftszeiten-System ermöglicht: Flexible Öffnungszeiten für jeden WochentagSales Channel-spezifische KonfigurationSonderöffnungszeiten für besondere AnlässeAPI-Integration für die StorefrontEchtzeit-Abfrage über die Shopware Store API",{"id":762,"title":763,"titles":764,"content":765,"level":98},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#datenbankstruktur","Datenbankstruktur",[39],"CREATE TABLE `shopbite_business_hour` (\n    `id` BINARY(16) NOT NULL,\n    `day_of_week` INT(11) NOT NULL,  -- 0=Sonntag, 1=Montag, ..., 6=Samstag\n    `opening_time` VARCHAR(5) NOT NULL,  -- Format: HH:MM\n    `closing_time` VARCHAR(5) NOT NULL, -- Format: HH:MM\n    `sales_channel_id` BINARY(16) NOT NULL,\n    `created_at` DATETIME(3) NOT NULL,\n    `updated_at` DATETIME(3) NULL,\n    PRIMARY KEY (`id`),\n    CONSTRAINT `fk.shopbite_business_hour.sales_channel_id` \n        FOREIGN KEY (`sales_channel_id`) \n        REFERENCES `sales_channel` (`id`) \n        ON DELETE CASCADE ON UPDATE CASCADE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;",{"id":767,"title":477,"titles":768,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#administrationsoberfläche",[39],{"id":770,"title":771,"titles":772,"content":773,"level":136},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#geschäftszeiten-liste","Geschäftszeiten-Liste",[39,477],"ShopBite > Geschäftszeiten navigierenÜbersicht aller konfigurierten GeschäftszeitenFilterung nach Sales ChannelMassenaktionen (Export, Import)",{"id":775,"title":776,"titles":777,"content":778,"level":136},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#neue-geschäftszeit-hinzufügen","Neue Geschäftszeit hinzufügen",[39,477],"Neue Geschäftszeit hinzufügen klickenFormular ausfüllen:",{"id":780,"title":781,"titles":782,"content":783,"level":580},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#formularfelder","Formularfelder",[39,477,776],"FeldTypBeschreibungBeispielSales ChannelDropdownVertriebskanal auswählen\"Mein Restaurant\"WochentagDropdownTag der Woche (0-6)1 (Montag)ÖffnungszeitZeitauswahlÖffnungszeit11:00SchließzeitZeitauswahlSchließzeit22:00GeschlossenCheckboxTag als geschlossen markieren✓",{"id":785,"title":786,"titles":787,"content":788,"level":136},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#geschäftszeiten-bearbeiten","Geschäftszeiten bearbeiten",[39,477],"Bearbeiten-Button klickenFelder anpassenSpeichern klicken",{"id":790,"title":791,"titles":792,"content":793,"level":136},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#geschäftszeiten-löschen","Geschäftszeiten löschen",[39,477],"Löschen-Button klickenBestätigung dialogBestätigen klicken",{"id":795,"title":796,"titles":797,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#api-integration","API-Integration",[39],{"id":799,"title":800,"titles":801,"content":802,"level":136},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#api-endpunkt","API-Endpunkt",[39,796],"GET \u002Fstore-api\u002Fshopbite\u002Fbusiness-hour",{"id":804,"title":805,"titles":806,"content":807,"level":136},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#anfrageparameter","Anfrageparameter",[39,796],"ParameterTypBeschreibungBeispielsales-channel-idUUIDFilter nach Sales Channel019a36f224b0704fb6835914050392f4include-closedBooleanGeschlossene Tage einbeziehentrue",{"id":809,"title":810,"titles":811,"content":812,"level":136},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#beispielanfrage","Beispielanfrage",[39,796],"curl -X GET \"https:\u002F\u002FIhre-Shopware-Domain.de\u002Fstore-api\u002Fshopbite\u002Fbusiness-hour\" \\\n  -H \"Authorization: Bearer IhrAPIToken\" \\\n  -H \"sw-access-key: IhrAccessKey\" \\\n  -H \"Accept: application\u002Fjson\"",{"id":814,"title":815,"titles":816,"content":817,"level":136},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#beispielantwort","Beispielantwort",[39,796],"{\n  \"apiAlias\": \"shopbite_business_hour\",\n  \"data\": [\n    {\n      \"id\": \"019a36f224b0704fb6835914050392f4\",\n      \"dayOfWeek\": 1,\n      \"openingTime\": \"11:00\",\n      \"closingTime\": \"22:00\",\n      \"salesChannelId\": \"019a36f224b0704fb6835914050392f4\",\n      \"createdAt\": \"2024-01-11T14:30:00+01:00\",\n      \"updatedAt\": \"2024-01-11T14:30:00+01:00\",\n      \"salesChannel\": {\n        \"id\": \"019a36f224b0704fb6835914050392f4\",\n        \"name\": \"Mein Restaurant\",\n        \"typeId\": \"019a36f224b0704fb6835914050392f4\"\n      }\n    },\n    {\n      \"id\": \"019a36f224b0704fb6835914050392f5\",\n      \"dayOfWeek\": 2,\n      \"openingTime\": \"11:00\",\n      \"closingTime\": \"22:00\",\n      \"salesChannelId\": \"019a36f224b0704fb6835914050392f4\",\n      \"createdAt\": \"2024-01-11T14:30:00+01:00\",\n      \"updatedAt\": \"2024-01-11T14:30:00+01:00\",\n      \"salesChannel\": {\n        \"id\": \"019a36f224b0704fb6835914050392f4\",\n        \"name\": \"Mein Restaurant\",\n        \"typeId\": \"019a36f224b0704fb6835914050392f4\"\n      }\n    }\n  ],\n  \"total\": 7\n}",{"id":819,"title":820,"titles":821,"content":822,"level":136},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#fehlerbehandlung","Fehlerbehandlung",[39,796],"StatuscodeBedeutungLösung200ErfolgDaten erfolgreich abgerufen401UnauthorizedAPI-Zugangsdaten prüfen403ForbiddenBerechtigungen prüfen404Not FoundEndpunkt oder Sales Channel nicht gefunden500Internal Server ErrorServer-Logs prüfen",{"id":824,"title":825,"titles":826,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#sonderöffnungszeiten","Sonderöffnungszeiten",[39],{"id":828,"title":763,"titles":829,"content":830,"level":136},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#datenbankstruktur-1",[39,825],"Sonderöffnungszeiten werden in der gleichen Tabelle gespeichert, aber mit einem speziellen Flag: -- Sonderöffnungszeiten werden als separate Einträge gespeichert\n-- mit einem speziellen Datum statt Wochentag\nALTER TABLE `shopbite_business_hour` \nADD COLUMN `special_date` DATE NULL AFTER `day_of_week`;",{"id":832,"title":833,"titles":834,"content":835,"level":136},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#verwaltung","Verwaltung",[39,825],"ShopBite > Geschäftszeiten > Sonderöffnungszeiten navigierenNeue Sonderöffnungszeit hinzufügen klickenFormular ausfüllen:",{"id":837,"title":781,"titles":838,"content":839,"level":580},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#formularfelder-1",[39,825,833],"FeldTypBeschreibungBeispielSales ChannelDropdownVertriebskanal auswählen\"Mein Restaurant\"DatumDatumauswahlDatum der Sonderöffnung24.12.2024ÖffnungszeitZeitauswahlSpezielle Öffnungszeit10:00SchließzeitZeitauswahlSpezielle Schließzeit14:00BeschreibungTextOptional Beschreibung\"Heiligabend - verkürzte Öffnungszeiten\"",{"id":841,"title":842,"titles":843,"content":844,"level":136},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#api-abfrage-für-sonderöffnungszeiten","API-Abfrage für Sonderöffnungszeiten",[39,825],"curl -X GET \"https:\u002F\u002FIhre-Shopware-Domain.de\u002Fstore-api\u002Fshopbite\u002Fbusiness-hour?special=true\" \\\n  -H \"Authorization: Bearer IhrAPIToken\" \\\n  -H \"sw-access-key: IhrAccessKey\"",{"id":846,"title":847,"titles":848,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#best-practices","Best Practices",[39],{"id":850,"title":851,"titles":852,"content":853,"level":136},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#_1-konsistente-zeiteinstellungen","1. Konsistente Zeiteinstellungen",[39,847],"Verwenden Sie immer das 24-Stunden-Format (HH:MM)Stellen Sie sicher, dass Öffnungszeit \u003C SchließzeitFür Übernacht-Öffnung: Öffnungszeit = 18:00, Schließzeit = 02:00 (nächster Tag)",{"id":855,"title":856,"titles":857,"content":858,"level":136},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#_2-sales-channel-spezifische-konfiguration","2. Sales Channel-spezifische Konfiguration",[39,847],"Jeder Vertriebskanal kann eigene Geschäftszeiten habenIdeal für mehrere Standorte oder DienstleistungenBeispiel: Restaurant vs. Catering-Service",{"id":860,"title":861,"titles":862,"content":863,"level":136},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#_3-performance-optimierung","3. Performance-Optimierung",[39,847],"-- Indizes für bessere Performance\nCREATE INDEX `idx_sales_channel` ON `shopbite_business_hour` (`sales_channel_id`);\nCREATE INDEX `idx_day_of_week` ON `shopbite_business_hour` (`day_of_week`);\n\n-- Für Sonderöffnungszeiten\nCREATE INDEX `idx_special_date` ON `shopbite_business_hour` (`special_date`);",{"id":865,"title":866,"titles":867,"content":868,"level":136},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#_4-caching-strategie","4. Caching-Strategie",[39,847],"# In config\u002Fpackages\u002Fcache.yaml\nframework:\n    cache:\n        pools:\n            shopbite.business_hours:\n                adapter: cache.adapter.redis\n                default_lifetime: 3600  # 1 Stunde Cache",{"id":870,"title":871,"titles":872,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#integration-mit-der-storefront","Integration mit der Storefront",[39],{"id":874,"title":875,"titles":876,"content":877,"level":136},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#javascript-beispiel","JavaScript-Beispiel",[39,871],"\u002F\u002F Geschäftszeiten abrufen\nasync function fetchBusinessHours(salesChannelId) {\n  const response = await fetch(\n    `\u002Fstore-api\u002Fshopbite\u002Fbusiness-hour?sales-channel-id=${salesChannelId}`,\n    {\n      headers: {\n        'Authorization': `Bearer ${apiToken}`,\n        'sw-access-key': accessKey\n      }\n    }\n  );\n  \n  if (!response.ok) {\n    throw new Error('Failed to fetch business hours');\n  }\n  \n  return await response.json();\n}\n\n\u002F\u002F Geschäftszeiten anzeigen\nfunction displayBusinessHours(hours) {\n  const days = ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'];\n  \n  hours.data.forEach(hour => {\n    const dayName = days[hour.dayOfWeek];\n    console.log(`${dayName}: ${hour.openingTime} - ${hour.closingTime}`);\n  });\n}\n\n\u002F\u002F Beispielaufruf\nfetchBusinessHours('019a36f224b0704fb6835914050392f4')\n  .then(displayBusinessHours)\n  .catch(console.error);",{"id":879,"title":880,"titles":881,"content":882,"level":136},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#vuejs-komponente","Vue.js-Komponente",[39,871],"\u003Ctemplate>\n  \u003Cdiv class=\"business-hours\">\n    \u003Ch3>Öffnungszeiten\u003C\u002Fh3>\n    \u003Cdiv v-for=\"hour in businessHours\" :key=\"hour.id\" class=\"hour-item\">\n      \u003Cspan class=\"day\">{{ getDayName(hour.dayOfWeek) }}\u003C\u002Fspan>\n      \u003Cspan class=\"time\">{{ hour.openingTime }} - {{ hour.closingTime }}\u003C\u002Fspan>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n\n\u003Cscript>\nexport default {\n  data() {\n    return {\n      businessHours: [],\n      days: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag']\n    };\n  },\n  \n  async mounted() {\n    await this.fetchBusinessHours();\n  },\n  \n  methods: {\n    getDayName(dayOfWeek) {\n      return this.days[dayOfWeek];\n    },\n    \n    async fetchBusinessHours() {\n      try {\n        const response = await this.$axios.get('\u002Fstore-api\u002Fshopbite\u002Fbusiness-hour');\n        this.businessHours = response.data.data;\n      } catch (error) {\n        console.error('Failed to fetch business hours:', error);\n      }\n    }\n  }\n};\n\u003C\u002Fscript>\n\n\u003Cstyle scoped>\n.business-hours {\n  margin: 20px 0;\n  padding: 15px;\n  background: #f5f5f5;\n  border-radius: 8px;\n}\n\n.hour-item {\n  display: flex;\n  justify-content: space-between;\n  padding: 8px 0;\n  border-bottom: 1px solid #ddd;\n}\n\n.day {\n  font-weight: bold;\n}\n\n.time {\n  color: #666;\n}\n\u003C\u002Fstyle>",{"id":884,"title":885,"titles":886,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#fehlerbehandlung-und-debugging","Fehlerbehandlung und Debugging",[39],{"id":888,"title":724,"titles":889,"content":130,"level":136},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#häufige-probleme",[39,885],{"id":891,"title":733,"titles":892,"content":893,"level":580},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#problem-geschäftszeiten-werden-nicht-angezeigt",[39,885,724],"Ursachen: Cache-ProblemeFalsche Sales Channel-IDDatenbankverbindungsfehler Lösungen: # Cache leeren\nbin\u002Fconsole cache:clear\n\n# Datenbank prüfen\nmysql -u shopware -p shopware -e \"SELECT * FROM shopbite_business_hour;\"\n\n# Sales Channel-ID prüfen\nbin\u002Fconsole sales-channel:list",{"id":895,"title":896,"titles":897,"content":898,"level":580},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#problem-api-liefert-leere-ergebnisse","Problem: API liefert leere Ergebnisse",[39,885,724],"Ursachen: Keine Daten in der DatenbankFalsche BerechtigungenFilterparameter falsch Lösungen: # Datenbank prüfen\nmysql -u shopware -p shopware -e \"SELECT COUNT(*) FROM shopbite_business_hour;\"\n\n# API-Berechtigungen prüfen\nbin\u002Fconsole integration:list\n\n# API-Test\ncurl -X GET \"https:\u002F\u002FIhre-Domain.de\u002Fstore-api\u002Fshopbite\u002Fbusiness-hour\" -H \"Authorization: Bearer IhrToken\"",{"id":900,"title":901,"titles":902,"content":903,"level":580},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#problem-zeitformat-falsch","Problem: Zeitformat falsch",[39,885,724],"Ursachen: Falsches Zeitformat in der DatenbankZeitzonenprobleme Lösungen: # Zeitformat prüfen\nmysql -u shopware -p shopware -e \"SELECT opening_time, closing_time FROM shopbite_business_hour LIMIT 5;\"\n\n# Zeitzone prüfen\nbin\u002Fconsole config:get Shopware.Core.SystemConfig.timezone",{"id":905,"title":111,"titles":906,"content":907,"level":98},"\u002Fdocs\u002Fshopware\u002Fbusiness-hours#nächste-schritte",[39],"Feiertagsmanagement - Schließtage und Feiertage konfigurierenAdministrationsoberfläche - Bedienung der Plugin-OberflächeAPI-Referenz - Technische API-DokumentationFehlerbehebung - Problembehandlung und Support html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sqsOY, html code.shiki .sqsOY{--shiki-light:#8796B0;--shiki-default:#B2CCD6;--shiki-dark:#B2CCD6}",{"id":44,"title":43,"titles":909,"content":910,"level":88},[],"Das ShopBite Plugin bietet ein umfassendes Feiertagsmanagement-System, das speziell für Gastronomie- und Einzelhandelsbetriebe entwickelt wurde. Dieses Kapitel erklärt die detaillierte Konfiguration und Verwaltung von Feiertagen und Schließtagen.",{"id":912,"title":43,"titles":913,"content":910,"level":88},"\u002Fdocs\u002Fshopware\u002Fholidays#feiertagsmanagement",[],{"id":915,"title":758,"titles":916,"content":917,"level":98},"\u002Fdocs\u002Fshopware\u002Fholidays#übersicht",[43],"Das Feiertagsmanagement-System ermöglicht: Einmalige Feiertage: Konfiguration individueller SchließtageWiederkehrende Feiertage: Jährlich wiederholende FeiertageZeitraum-basierte Schließungen: Mehrtägige Schließungen (z.B. Weihnachten)Sales Channel-spezifisch: Unterschiedliche Feiertage für verschiedene VertriebskanäleAPI-Integration: Abruf über die Shopware Store API",{"id":919,"title":763,"titles":920,"content":921,"level":98},"\u002Fdocs\u002Fshopware\u002Fholidays#datenbankstruktur",[43],"CREATE TABLE `shopbite_holiday` (\n    `id` BINARY(16) NOT NULL,\n    `start` DATETIME(3) NOT NULL,  -- Beginn der Schließung\n    `end` DATETIME(3) NOT NULL,    -- Ende der Schließung\n    `sales_channel_id` BINARY(16) NOT NULL,\n    `name` VARCHAR(255) NULL,     -- Name des Feiertags\n    `description` TEXT NULL,      -- Beschreibung\n    `recurring` TINYINT(1) DEFAULT 0,  -- Jährlich wiederholend\n    `created_at` DATETIME(3) NOT NULL,\n    `updated_at` DATETIME(3) NULL,\n    PRIMARY KEY (`id`),\n    KEY `fk.shopbite_holiday.sales_channel_id` (`sales_channel_id`),\n    CONSTRAINT `fk.shopbite_holiday.sales_channel_id` \n        FOREIGN KEY (`sales_channel_id`) \n        REFERENCES `sales_channel` (`id`) \n        ON DELETE CASCADE ON UPDATE CASCADE\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;",{"id":923,"title":477,"titles":924,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fholidays#administrationsoberfläche",[43],{"id":926,"title":927,"titles":928,"content":929,"level":136},"\u002Fdocs\u002Fshopware\u002Fholidays#feiertags-liste","Feiertags-Liste",[43,477],"ShopBite > Feiertage navigierenÜbersicht aller konfigurierten FeiertageFilterung nach Sales Channel und DatumMassenaktionen (Export, Import)",{"id":931,"title":932,"titles":933,"content":934,"level":136},"\u002Fdocs\u002Fshopware\u002Fholidays#neuen-feiertag-hinzufügen","Neuen Feiertag hinzufügen",[43,477],"Neuen Feiertag hinzufügen klickenFormular ausfüllen:",{"id":936,"title":781,"titles":937,"content":938,"level":580},"\u002Fdocs\u002Fshopware\u002Fholidays#formularfelder",[43,477,932],"FeldTypBeschreibungBeispielNameTextName des Feiertags\"Weihnachten\"StartdatumDatum\u002FZeitBeginn der Schließung24.12.2024 18:00EnddatumDatum\u002FZeitEnde der Schließung26.12.2024 23:59Sales ChannelDropdownVertriebskanal auswählen\"Mein Restaurant\"Jährlich wiederholenCheckboxFeiertag jährlich wiederholen✓BeschreibungTextareaOptional Beschreibung\"Weihnachtsferien - geschlossen\"",{"id":940,"title":941,"titles":942,"content":788,"level":136},"\u002Fdocs\u002Fshopware\u002Fholidays#feiertage-bearbeiten","Feiertage bearbeiten",[43,477],{"id":944,"title":945,"titles":946,"content":793,"level":136},"\u002Fdocs\u002Fshopware\u002Fholidays#feiertage-löschen","Feiertage löschen",[43,477],{"id":948,"title":796,"titles":949,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fholidays#api-integration",[43],{"id":951,"title":800,"titles":952,"content":953,"level":136},"\u002Fdocs\u002Fshopware\u002Fholidays#api-endpunkt",[43,796],"GET \u002Fstore-api\u002Fshopbite\u002Fholiday",{"id":955,"title":805,"titles":956,"content":957,"level":136},"\u002Fdocs\u002Fshopware\u002Fholidays#anfrageparameter",[43,796],"ParameterTypBeschreibungBeispielsales-channel-idUUIDFilter nach Sales Channel019a36f224b0704fb6835914050392f4from-dateDatumFilter nach Startdatum2024-01-01to-dateDatumFilter nach Enddatum2024-12-31include-recurringBooleanWiederkehrende Feiertage einbeziehentrue",{"id":959,"title":810,"titles":960,"content":961,"level":136},"\u002Fdocs\u002Fshopware\u002Fholidays#beispielanfrage",[43,796],"curl -X GET \"https:\u002F\u002FIhre-Shopware-Domain.de\u002Fstore-api\u002Fshopbite\u002Fholiday\" \\\n  -H \"Authorization: Bearer IhrAPIToken\" \\\n  -H \"sw-access-key: IhrAccessKey\" \\\n  -H \"Accept: application\u002Fjson\"",{"id":963,"title":815,"titles":964,"content":965,"level":136},"\u002Fdocs\u002Fshopware\u002Fholidays#beispielantwort",[43,796],"{\n  \"apiAlias\": \"shopbite_holiday\",\n  \"data\": [\n    {\n      \"id\": \"019a36f224b0704fb6835914050392f4\",\n      \"start\": \"2024-12-24T18:00:00+01:00\",\n      \"end\": \"2024-12-26T23:59:00+01:00\",\n      \"salesChannelId\": \"019a36f224b0704fb6835914050392f4\",\n      \"name\": \"Weihnachten\",\n      \"description\": \"Weihnachtsferien - geschlossen\",\n      \"recurring\": false,\n      \"createdAt\": \"2024-01-11T14:30:00+01:00\",\n      \"updatedAt\": \"2024-01-11T14:30:00+01:00\",\n      \"salesChannel\": {\n        \"id\": \"019a36f224b0704fb6835914050392f4\",\n        \"name\": \"Mein Restaurant\",\n        \"typeId\": \"019a36f224b0704fb6835914050392f4\"\n      }\n    },\n    {\n      \"id\": \"019a36f224b0704fb6835914050392f5\",\n      \"start\": \"2024-01-01T00:00:00+01:00\",\n      \"end\": \"2024-01-01T23:59:00+01:00\",\n      \"salesChannelId\": \"019a36f224b0704fb6835914050392f4\",\n      \"name\": \"Neujahr\",\n      \"description\": \"Geschlossen\",\n      \"recurring\": true,\n      \"createdAt\": \"2024-01-11T14:30:00+01:00\",\n      \"updatedAt\": \"2024-01-11T14:30:00+01:00\",\n      \"salesChannel\": {\n        \"id\": \"019a36f224b0704fb6835914050392f4\",\n        \"name\": \"Mein Restaurant\",\n        \"typeId\": \"019a36f224b0704fb6835914050392f4\"\n      }\n    }\n  ],\n  \"total\": 10\n}",{"id":967,"title":820,"titles":968,"content":822,"level":136},"\u002Fdocs\u002Fshopware\u002Fholidays#fehlerbehandlung",[43,796],{"id":970,"title":971,"titles":972,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fholidays#wiederkehrende-feiertage","Wiederkehrende Feiertage",[43],{"id":974,"title":975,"titles":976,"content":977,"level":136},"\u002Fdocs\u002Fshopware\u002Fholidays#funktionsweise","Funktionsweise",[43,971],"Wiederkehrende Feiertage werden automatisch für jedes Jahr neu erstellt: Jährliche Erstellung: Am 1. Januar jedes JahresZeitraum: Basierend auf dem ursprünglichen DatumBenachrichtigung: Admin-Benachrichtigung bei Erstellung",{"id":979,"title":833,"titles":980,"content":981,"level":136},"\u002Fdocs\u002Fshopware\u002Fholidays#verwaltung",[43,971],"ShopBite > Feiertage > Wiederkehrende Feiertage navigierenNeuen wiederkehrenden Feiertag hinzufügen klickenFormular ausfüllen:",{"id":983,"title":781,"titles":984,"content":985,"level":580},"\u002Fdocs\u002Fshopware\u002Fholidays#formularfelder-1",[43,971,833],"FeldTypBeschreibungBeispielNameTextName des Feiertags\"Weihnachten\"MonatDropdownMonat auswählenDezemberTagZahlTag im Monat25StartzeitZeitBeginn der Schließung18:00EndzeitZeitEnde der Schließung23:59Sales ChannelDropdownVertriebskanal auswählen\"Mein Restaurant\"BeschreibungTextareaOptional Beschreibung\"Weihnachtsferien\"",{"id":987,"title":988,"titles":989,"content":990,"level":136},"\u002Fdocs\u002Fshopware\u002Fholidays#api-abfrage-für-wiederkehrende-feiertage","API-Abfrage für wiederkehrende Feiertage",[43,971],"curl -X GET \"https:\u002F\u002FIhre-Shopware-Domain.de\u002Fstore-api\u002Fshopbite\u002Fholiday?include-recurring=true\" \\\n  -H \"Authorization: Bearer IhrAPIToken\" \\\n  -H \"sw-access-key: IhrAccessKey\"",{"id":992,"title":847,"titles":993,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fholidays#best-practices",[43],{"id":995,"title":996,"titles":997,"content":998,"level":136},"\u002Fdocs\u002Fshopware\u002Fholidays#_1-konsistente-datumsformate","1. Konsistente Datumsformate",[43,847],"Verwenden Sie immer das ISO-8601-Format (YYYY-MM-DD)Zeitangaben im 24-Stunden-Format (HH:MM:SS)Berücksichtigen Sie Zeitzonen (Standard: Europe\u002FBerlin)",{"id":1000,"title":1001,"titles":1002,"content":1003,"level":136},"\u002Fdocs\u002Fshopware\u002Fholidays#_2-überlappende-feiertage-vermeiden","2. Überlappende Feiertage vermeiden",[43,847],"Prüfen Sie auf Überlappungen mit anderen FeiertagenVerwenden Sie den Kalender in der AdministrationNutzen Sie die Validierung beim Speichern",{"id":1005,"title":861,"titles":1006,"content":1007,"level":136},"\u002Fdocs\u002Fshopware\u002Fholidays#_3-performance-optimierung",[43,847],"-- Indizes für bessere Performance\nCREATE INDEX `idx_sales_channel` ON `shopbite_holiday` (`sales_channel_id`);\nCREATE INDEX `idx_date_range` ON `shopbite_holiday` (`start`, `end`);\nCREATE INDEX `idx_recurring` ON `shopbite_holiday` (`recurring`);",{"id":1009,"title":866,"titles":1010,"content":1011,"level":136},"\u002Fdocs\u002Fshopware\u002Fholidays#_4-caching-strategie",[43,847],"# In config\u002Fpackages\u002Fcache.yaml\nframework:\n    cache:\n        pools:\n            shopbite.holidays:\n                adapter: cache.adapter.redis\n                default_lifetime: 86400  # 24 Stunden Cache",{"id":1013,"title":1014,"titles":1015,"content":1016,"level":136},"\u002Fdocs\u002Fshopware\u002Fholidays#_5-automatische-benachrichtigungen","5. Automatische Benachrichtigungen",[43,847],"Richten Sie Benachrichtigungen für anstehende Feiertage ein: \u002F\u002F In einem Cron-Job oder Event-Listener\n$upcomingHolidays = $holidayRepository->getUpcomingHolidays(7); \u002F\u002F Nächste 7 Tage\n\nforeach ($upcomingHolidays as $holiday) {\n    $mailer->sendHolidayReminder($holiday);\n}",{"id":1018,"title":871,"titles":1019,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fholidays#integration-mit-der-storefront",[43],{"id":1021,"title":875,"titles":1022,"content":1023,"level":136},"\u002Fdocs\u002Fshopware\u002Fholidays#javascript-beispiel",[43,871],"\u002F\u002F Feiertage abrufen\nasync function fetchHolidays(salesChannelId, fromDate, toDate) {\n  const params = new URLSearchParams({\n    'sales-channel-id': salesChannelId,\n    'from-date': fromDate,\n    'to-date': toDate\n  });\n  \n  const response = await fetch(\n    `\u002Fstore-api\u002Fshopbite\u002Fholiday?${params.toString()}`,\n    {\n      headers: {\n        'Authorization': `Bearer ${apiToken}`,\n        'sw-access-key': accessKey\n      }\n    }\n  );\n  \n  if (!response.ok) {\n    throw new Error('Failed to fetch holidays');\n  }\n  \n  return await response.json();\n}\n\n\u002F\u002F Feiertage anzeigen\nfunction displayHolidays(holidays) {\n  holidays.data.forEach(holiday => {\n    const start = new Date(holiday.start);\n    const end = new Date(holiday.end);\n    \n    console.log(`${holiday.name}: ${start.toLocaleDateString()} - ${end.toLocaleDateString()}`);\n    console.log(`Beschreibung: ${holiday.description || 'Keine Beschreibung'}`);\n  });\n}\n\n\u002F\u002F Beispielaufruf\nconst today = new Date().toISOString().split('T')[0];\nconst nextYear = new Date();\nnextYear.setFullYear(nextYear.getFullYear() + 1);\nconst nextYearEnd = nextYear.toISOString().split('T')[0];\n\nfetchHolidays('019a36f224b0704fb6835914050392f4', today, nextYearEnd)\n  .then(displayHolidays)\n  .catch(console.error);",{"id":1025,"title":880,"titles":1026,"content":1027,"level":136},"\u002Fdocs\u002Fshopware\u002Fholidays#vuejs-komponente",[43,871],"\u003Ctemplate>\n  \u003Cdiv class=\"holidays\">\n    \u003Ch3>Feiertage und Schließtage\u003C\u002Fh3>\n    \u003Cdiv v-for=\"holiday in holidays\" :key=\"holiday.id\" class=\"holiday-item\">\n      \u003Cdiv class=\"holiday-header\">\n        \u003Cspan class=\"holiday-name\">{{ holiday.name }}\u003C\u002Fspan>\n        \u003Cspan v-if=\"holiday.recurring\" class=\"badge recurring\">Jährlich\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv class=\"holiday-dates\">\n        {{ formatDate(holiday.start) }} - {{ formatDate(holiday.end) }}\n      \u003C\u002Fdiv>\n      \u003Cdiv v-if=\"holiday.description\" class=\"holiday-description\">\n        {{ holiday.description }}\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n\n\u003Cscript>\nexport default {\n  data() {\n    return {\n      holidays: [],\n      loading: false,\n      error: null\n    };\n  },\n  \n  async mounted() {\n    await this.fetchHolidays();\n  },\n  \n  methods: {\n    formatDate(dateString) {\n      const date = new Date(dateString);\n      return date.toLocaleDateString('de-DE', {\n        weekday: 'short',\n        day: 'numeric',\n        month: 'short',\n        year: 'numeric',\n        hour: '2-digit',\n        minute: '2-digit'\n      });\n    },\n    \n    async fetchHolidays() {\n      this.loading = true;\n      this.error = null;\n      \n      try {\n        const response = await this.$axios.get('\u002Fstore-api\u002Fshopbite\u002Fholiday');\n        this.holidays = response.data.data;\n      } catch (error) {\n        console.error('Failed to fetch holidays:', error);\n        this.error = 'Feiertage konnten nicht geladen werden.';\n      } finally {\n        this.loading = false;\n      }\n    }\n  }\n};\n\u003C\u002Fscript>\n\n\u003Cstyle scoped>\n.holidays {\n  margin: 20px 0;\n  padding: 15px;\n  background: #fff5f5;\n  border-radius: 8px;\n  border: 1px solid #ffebee;\n}\n\n.holiday-item {\n  padding: 12px 0;\n  border-bottom: 1px solid #ffcdcd;\n}\n\n.holiday-item:last-child {\n  border-bottom: none;\n}\n\n.holiday-header {\n  display: flex;\n  align-items: center;\n  gap: 8px;\n  margin-bottom: 4px;\n}\n\n.holiday-name {\n  font-weight: bold;\n  color: #d32f2f;\n}\n\n.badge {\n  padding: 2px 6px;\n  border-radius: 4px;\n  font-size: 12px;\n  font-weight: bold;\n}\n\n.badge.recurring {\n  background: #ffeb3b;\n  color: #000;\n}\n\n.holiday-dates {\n  color: #b71c1c;\n  font-size: 14px;\n  margin-bottom: 4px;\n}\n\n.holiday-description {\n  color: #666;\n  font-size: 13px;\n  font-style: italic;\n}\n\u003C\u002Fstyle>",{"id":1029,"title":885,"titles":1030,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fholidays#fehlerbehandlung-und-debugging",[43],{"id":1032,"title":724,"titles":1033,"content":130,"level":136},"\u002Fdocs\u002Fshopware\u002Fholidays#häufige-probleme",[43,885],{"id":1035,"title":738,"titles":1036,"content":740,"level":580},"\u002Fdocs\u002Fshopware\u002Fholidays#problem-feiertage-werden-nicht-berücksichtigt",[43,885,724],{"id":1038,"title":1039,"titles":1040,"content":1041,"level":580},"\u002Fdocs\u002Fshopware\u002Fholidays#problem-wiederkehrende-feiertage-werden-nicht-erstellt","Problem: Wiederkehrende Feiertage werden nicht erstellt",[43,885,724],"Symptome: Wiederkehrende Feiertage fehlenKeine automatische Erstellung Lösungen: # Cron-Job prüfen\ncrontab -l\n\n# Manuell ausführen\nbin\u002Fconsole shopbite:holidays:generate-recurring\n\n# Logs prüfen\ntail -n 50 \u002Fvar\u002Flog\u002Fshopware\u002Fprod.log | grep holiday",{"id":1043,"title":1044,"titles":1045,"content":1046,"level":580},"\u002Fdocs\u002Fshopware\u002Fholidays#problem-zeitüberschneidungen","Problem: Zeitüberschneidungen",[43,885,724],"Symptome: Feiertage überlappen sichFalsche Schließzeiten Lösungen: # Überlappungen prüfen\nmysql -u shopware -p shopware -e \"\n  SELECT * FROM shopbite_holiday \n  WHERE start \u003C (SELECT end FROM shopbite_holiday WHERE id != shopbite_holiday.id)\n  AND end > (SELECT start FROM shopbite_holiday WHERE id != shopbite_holiday.id);\"\n\n# Validierung aktivieren\nbin\u002Fconsole config:set ShopBitePlugin.config.validateHolidayOverlaps true",{"id":1048,"title":111,"titles":1049,"content":1050,"level":98},"\u002Fdocs\u002Fshopware\u002Fholidays#nächste-schritte",[43],"Checkout-Erweiterungen - Spezielle Checkout-Funktionen konfigurierenAdministrationsoberfläche - Bedienung der Plugin-OberflächeAPI-Referenz - Technische API-DokumentationFehlerbehebung - Problembehandlung und Support html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sqsOY, html code.shiki .sqsOY{--shiki-light:#8796B0;--shiki-default:#B2CCD6;--shiki-dark:#B2CCD6}",{"id":48,"title":47,"titles":1052,"content":1053,"level":88},[],"Das ShopBite Plugin bietet erweiterte Checkout-Funktionen, die speziell für Gastronomie- und Einzelhandelsbetriebe entwickelt wurden. Dieses Kapitel erklärt die Konfiguration und Nutzung dieser Funktionen.",{"id":1055,"title":47,"titles":1056,"content":1053,"level":88},"\u002Fdocs\u002Fshopware\u002Fcheckout#checkout-erweiterungen",[],{"id":1058,"title":758,"titles":1059,"content":1060,"level":98},"\u002Fdocs\u002Fshopware\u002Fcheckout#übersicht",[47],"Die Checkout-Erweiterungen umfassen: Container-basierte Produkte: Spezielle Verarbeitung für ProduktgruppenBon-Drucktypen: Unterschiedliche Druckformate für verschiedene ProdukteCustom Fields: Erweiterte Produktattribute für GastronomieLieferzeitberechnung: Dynamische Berechnung basierend auf ProduktattributenBestelltypen: Abholung, Lieferung, Vor Ort",{"id":1062,"title":1063,"titles":1064,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fcheckout#container-basierte-produkte","Container-basierte Produkte",[47],{"id":1066,"title":975,"titles":1067,"content":1068,"level":136},"\u002Fdocs\u002Fshopware\u002Fcheckout#funktionsweise",[47,1063],"Container-basierte Produkte ermöglichen die Gruppierung von Artikeln: Beispiel: Menü mit Hauptgericht, Beilage und GetränkVorteile: Einfache Bestellung komplexer ProduktkombinationenVerarbeitung: Spezielle Logik im Checkout-Prozess",{"id":1070,"title":61,"titles":1071,"content":1072,"level":136},"\u002Fdocs\u002Fshopware\u002Fcheckout#konfiguration",[47,1063],"Produkt erstellen:Navigieren Sie zu Katalog > ProdukteNeues Produkt erstellenProdukttyp: \"Container\" auswählenContainer-Inhalte definieren:Container-Elemente hinzufügenPflichtfelder markierenAuswahloptionen konfigurierenPreisgestaltung:Fester Preis: Gesamtpreis für den ContainerDynamischer Preis: Summe der enthaltenen ArtikelRabatte: Container-spezifische Rabatte",{"id":1074,"title":1075,"titles":1076,"content":1077,"level":136},"\u002Fdocs\u002Fshopware\u002Fcheckout#beispiel-pizza-menü","Beispiel: Pizza-Menü",[47,1063],"Container: Pizza-Menü\n- Hauptgericht: Pizza (Pflichtfeld)\n  - Optionen: Margherita, Salami, Hawaii\n- Beilage: Salat oder Pommes (Pflichtfeld)\n  - Optionen: Caesar Salat, Gemischter Salat, Pommes\n- Getränk: Optional\n  - Optionen: Cola, Fanta, Wasser, Bier",{"id":1079,"title":1080,"titles":1081,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fcheckout#bon-drucktypen","Bon-Drucktypen",[47],{"id":1083,"title":1084,"titles":1085,"content":1086,"level":136},"\u002Fdocs\u002Fshopware\u002Fcheckout#custom-fields-konfiguration","Custom Fields Konfiguration",[47,1080],"Custom Fields einrichten:Navigieren Sie zu Einstellungen > Custom FieldsShopBite Produkt Set auswählenBon-Drucktyp Feld:Feldname: shopbite_receipt_print_typeTyp: AuswahlfeldOptionen:\nstandard: Normaler Bon-Druckkitchen: Küchenbon für Zubereitungbar: Barbon für Getränkeno_print: Kein Bon-Druck erforderlich",{"id":1088,"title":1089,"titles":1090,"content":1091,"level":136},"\u002Fdocs\u002Fshopware\u002Fcheckout#produktkonfiguration","Produktkonfiguration",[47,1080],"Produkt bearbeiten:Navigieren Sie zu Katalog > ProdukteProdukt auswählenCustom Fields setzen:Bon-Drucktyp auswählenSpeichern",{"id":1093,"title":602,"titles":1094,"content":1095,"level":136},"\u002Fdocs\u002Fshopware\u002Fcheckout#beispielkonfiguration",[47,1080],"ProduktBon-DrucktypBeschreibungPizza MargheritakitchenWird in der Küche zubereitetCola 0,33lbarWird an der Bar ausgegebenDessertstandardNormaler Bon-DruckGutscheinno_printKein physischer Bon nötig",{"id":1097,"title":1098,"titles":1099,"content":1100,"level":136},"\u002Fdocs\u002Fshopware\u002Fcheckout#technische-implementierung","Technische Implementierung",[47,1080],"Der ReceiptPrintTypeProcessor verarbeitet die Bon-Drucktypen: \u002F\u002F src\u002FCheckout\u002FCart\u002FReceiptPrintTypeProcessor.php\n\npublic function process(CartDataCollection $data, Cart $original, Cart $toCalculate, SalesChannelContext $context, CartBehavior $behavior): void\n{\n    foreach ($toCalculate->getLineItems()->filterFlatByType(LineItem::PRODUCT_LINE_ITEM_TYPE) as $lineItem) {\n        $productId = $lineItem->getReferencedId();\n        if ($productId === null) {\n            continue;\n        }\n        \n        $product = $data->get(self::DATA_KEY . $productId);\n        if ($product === null) {\n            continue;\n        }\n        \n        $customFields = $product->getCustomFields() ?? [];\n        if (!isset($customFields[CustomFieldsInstaller::SHOPBITE_RECEIPT_PRINT_TYPE])) {\n            continue;\n        }\n        \n        $lineItem->setPayloadValue(\n            CustomFieldsInstaller::SHOPBITE_RECEIPT_PRINT_TYPE,\n            $customFields[CustomFieldsInstaller::SHOPBITE_RECEIPT_PRINT_TYPE]\n        );\n    }\n}",{"id":1102,"title":1103,"titles":1104,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fcheckout#lieferzeitberechnung","Lieferzeitberechnung",[47],{"id":1106,"title":1107,"titles":1108,"content":1109,"level":136},"\u002Fdocs\u002Fshopware\u002Fcheckout#custom-fields-für-lieferzeiten","Custom Fields für Lieferzeiten",[47,1103],"Lieferzeitfaktor Feld:Feldname: shopbite_delivery_time_factorTyp: GanzzahlStandardwert: 1Produktkonfiguration:Faktor 1: Standard-LieferzeitFaktor 2: Doppelte LieferzeitFaktor 3: Dreifache Lieferzeit",{"id":1111,"title":1112,"titles":1113,"content":1114,"level":136},"\u002Fdocs\u002Fshopware\u002Fcheckout#berechnungslogik","Berechnungslogik",[47,1103],"\u002F\u002F Beispielberechnung in der Storefront\nfunction calculateDeliveryTime(product) {\n    const baseTime = 30; \u002F\u002F Basis-Lieferzeit in Minuten\n    const factor = product.customFields?.shopbite_delivery_time_factor || 1;\n    \n    return baseTime * factor; \u002F\u002F Ergebnis in Minuten\n}\n\n\u002F\u002F Beispiel\nconst pizza = { customFields: { shopbite_delivery_time_factor: 2 } };\nconst deliveryTime = calculateDeliveryTime(pizza); \u002F\u002F 60 Minuten",{"id":1116,"title":1117,"titles":1118,"content":1119,"level":136},"\u002Fdocs\u002Fshopware\u002Fcheckout#beispielprodukte","Beispielprodukte",[47,1103],"ProduktFaktorBerechnete LieferzeitPizza260 MinutenSalat130 MinutenGetränk0.515 MinutenDessert130 Minuten",{"id":1121,"title":1122,"titles":1123,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fcheckout#bestelltypen","Bestelltypen",[47],{"id":1125,"title":61,"titles":1126,"content":1127,"level":136},"\u002Fdocs\u002Fshopware\u002Fcheckout#konfiguration-1",[47,1122],"Bestelltypen aktivieren:Navigieren Sie zu ShopBite > Checkout > BestelltypenGewünschte Typen aktivierenBestelltypen:Abholung: Kunden holen die Bestellung selbst abLieferung: Bestellung wird geliefertVor Ort: Bestellung für den sofortigen Verzehr",{"id":1129,"title":1130,"titles":1131,"content":1132,"level":136},"\u002Fdocs\u002Fshopware\u002Fcheckout#checkout-integration","Checkout-Integration",[47,1122],"\u002F\u002F Bestelltypen in der Storefront\nconst orderTypes = [\n    { id: 'pickup', name: 'Abholung', description: 'Selbst abholen' },\n    { id: 'delivery', name: 'Lieferung', description: 'Zustellung' },\n    { id: 'on_site', name: 'Vor Ort', description: 'Hier verzehren' }\n];\n\n\u002F\u002F Bestelltyp auswählen\nfunction selectOrderType(typeId) {\n    \u002F\u002F Logik zur Auswahl des Bestelltyps\n    console.log(`Bestelltyp ausgewählt: ${typeId}`);\n}",{"id":1134,"title":1135,"titles":1136,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fcheckout#custom-fields-installation","Custom Fields Installation",[47],{"id":1138,"title":1139,"titles":1140,"content":1141,"level":136},"\u002Fdocs\u002Fshopware\u002Fcheckout#automatische-installation","Automatische Installation",[47,1135],"Das Plugin installiert die Custom Fields automatisch: \u002F\u002F src\u002FService\u002FCustomFieldsInstaller.php\n\npublic function install(Context $context): void\n{\n    $customFieldSetId = Uuid::fromHexToBytes(self::CUSTOM_FIELDSET_ID);\n    \n    $customFieldSetData = [\n        'id' => self::CUSTOM_FIELDSET_ID,\n        'name' => self::CUSTOM_FIELDSET_NAME,\n        'config' => [\n            'label' => [\n                'en-GB' => 'ShopBite',\n                'de-DE' => 'ShopBite',\n            ],\n        ],\n        'customFields' => [\n            [\n                'id' => '0198be8b24a0722cac46b07e3a9686ec',\n                'name' => 'shopbite_delivery_time_factor',\n                'type' => CustomFieldTypes::INT,\n                'config' => [\n                    'label' => [\n                        'en-GB' => 'Delivery Time Factor',\n                        'de-DE' => 'Lieferzeitfaktor',\n                    ],\n                ],\n            ],\n            [\n                'id' => '01944f2b1875706596395b8d23966952',\n                'name' => self::SHOPBITE_RECEIPT_PRINT_TYPE,\n                'type' => CustomFieldTypes::SELECT,\n                'config' => [\n                    'label' => [\n                        'en-GB' => 'Receipt Print Type',\n                        'de-DE' => 'Bon-Drucktyp',\n                    ],\n                    'options' => [\n                        ['value' => 'standard', 'label' => ['en-GB' => 'Standard', 'de-DE' => 'Standard']],\n                        ['value' => 'kitchen', 'label' => ['en-GB' => 'Kitchen', 'de-DE' => 'Küche']],\n                        ['value' => 'bar', 'label' => ['en-GB' => 'Bar', 'de-DE' => 'Bar']],\n                        ['value' => 'no_print', 'label' => ['en-GB' => 'No Print', 'de-DE' => 'Kein Druck']],\n                    ],\n                ],\n            ],\n        ],\n    ];\n    \n    $this->customFieldSetRepository->upsert([$customFieldSetData], $context);\n}",{"id":1143,"title":1144,"titles":1145,"content":1146,"level":136},"\u002Fdocs\u002Fshopware\u002Fcheckout#manuelle-installation","Manuelle Installation",[47,1135],"Falls die automatische Installation fehlschlägt: # Custom Fields manuell installieren\nbin\u002Fconsole shopbite:custom-fields:install\n\n# Custom Fields prüfen\nbin\u002Fconsole custom-field:set:list | grep shopbite",{"id":1148,"title":796,"titles":1149,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fcheckout#api-integration",[47],{"id":1151,"title":1152,"titles":1153,"content":1154,"level":136},"\u002Fdocs\u002Fshopware\u002Fcheckout#checkout-api-endpunkte","Checkout-API-Endpunkte",[47,796],"POST \u002Fstore-api\u002Fcheckout\u002Fcart\u002Fline-item",{"id":1156,"title":810,"titles":1157,"content":1158,"level":136},"\u002Fdocs\u002Fshopware\u002Fcheckout#beispielanfrage",[47,796],"curl -X POST \"https:\u002F\u002FIhre-Shopware-Domain.de\u002Fstore-api\u002Fcheckout\u002Fcart\u002Fline-item\" \\\n  -H \"Authorization: Bearer IhrAPIToken\" \\\n  -H \"sw-access-key: IhrAccessKey\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"items\": [\n      {\n        \"id\": \"019a36f224b0704fb6835914050392f4\",\n        \"type\": \"product\",\n        \"referencedId\": \"019a36f224b0704fb6835914050392f4\",\n        \"quantity\": 1,\n        \"payload\": {\n          \"shopbite_receipt_print_type\": \"kitchen\",\n          \"shopbite_delivery_time_factor\": 2\n        }\n      }\n    ]\n  }'",{"id":1160,"title":815,"titles":1161,"content":1162,"level":136},"\u002Fdocs\u002Fshopware\u002Fcheckout#beispielantwort",[47,796],"{\n  \"data\": {\n    \"lineItems\": [\n      {\n        \"id\": \"019a36f224b0704fb6835914050392f4\",\n        \"type\": \"product\",\n        \"referencedId\": \"019a36f224b0704fb6835914050392f4\",\n        \"quantity\": 1,\n        \"payload\": {\n          \"shopbite_receipt_print_type\": \"kitchen\",\n          \"shopbite_delivery_time_factor\": 2\n        }\n      }\n    ],\n    \"deliveryTime\": 60\n  }\n}",{"id":1164,"title":847,"titles":1165,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fcheckout#best-practices",[47],{"id":1167,"title":1168,"titles":1169,"content":1170,"level":136},"\u002Fdocs\u002Fshopware\u002Fcheckout#_1-konsistente-produktkonfiguration","1. Konsistente Produktkonfiguration",[47,847],"Verwenden Sie einheitliche Custom Fields für alle ProdukteDokumentieren Sie die Bedeutung der FelderSchulen Sie Ihr Team in der korrekten Nutzung",{"id":1172,"title":1173,"titles":1174,"content":1175,"level":136},"\u002Fdocs\u002Fshopware\u002Fcheckout#_2-performance-optimierung","2. Performance-Optimierung",[47,847],"-- Indizes für Custom Fields\nCREATE INDEX `idx_custom_fields` ON `product` (`custom_fields`);\n\n-- Optimierung für häufige Abfragen\nCREATE INDEX `idx_receipt_print_type` ON `product` \n  ((CAST(custom_fields->>'$.shopbite_receipt_print_type' AS CHAR(50))));",{"id":1177,"title":1178,"titles":1179,"content":1180,"level":136},"\u002Fdocs\u002Fshopware\u002Fcheckout#_3-validierung","3. Validierung",[47,847],"\u002F\u002F Validierung im Checkout-Prozess\npublic function validateCheckout(Cart $cart): array\n{\n    $errors = [];\n    \n    foreach ($cart->getLineItems() as $lineItem) {\n        $payload = $lineItem->getPayload();\n        \n        if (!isset($payload['shopbite_receipt_print_type'])) {\n            $errors[] = sprintf(\n                'Produkt %s hat keinen Bon-Drucktyp',\n                $lineItem->getLabel()\n            );\n        }\n        \n        if (!isset($payload['shopbite_delivery_time_factor'])) {\n            $errors[] = sprintf(\n                'Produkt %s hat keinen Lieferzeitfaktor',\n                $lineItem->getLabel()\n            );\n        }\n    }\n    \n    return $errors;\n}",{"id":1182,"title":866,"titles":1183,"content":1184,"level":136},"\u002Fdocs\u002Fshopware\u002Fcheckout#_4-caching-strategie",[47,847],"# In config\u002Fpackages\u002Fcache.yaml\nframework:\n    cache:\n        pools:\n            shopbite.checkout:\n                adapter: cache.adapter.redis\n                default_lifetime: 300  # 5 Minuten Cache",{"id":1186,"title":820,"titles":1187,"content":130,"level":98},"\u002Fdocs\u002Fshopware\u002Fcheckout#fehlerbehandlung",[47],{"id":1189,"title":724,"titles":1190,"content":130,"level":136},"\u002Fdocs\u002Fshopware\u002Fcheckout#häufige-probleme",[47,820],{"id":1192,"title":1193,"titles":1194,"content":1195,"level":580},"\u002Fdocs\u002Fshopware\u002Fcheckout#problem-custom-fields-werden-nicht-angezeigt","Problem: Custom Fields werden nicht angezeigt",[47,820,724],"Symptome: Custom Fields fehlen in der AdministrationFelder werden nicht gespeichert Lösungen: # Custom Fields neu installieren\nbin\u002Fconsole shopbite:custom-fields:install --force\n\n# Cache leeren\nbin\u002Fconsole cache:clear\n\n# Datenbank prüfen\nmysql -u shopware -p shopware -e \"SELECT * FROM custom_field_set WHERE name = 'shopbite_product_set';\"",{"id":1197,"title":1198,"titles":1199,"content":1200,"level":580},"\u002Fdocs\u002Fshopware\u002Fcheckout#problem-bon-drucktyp-wird-ignoriert","Problem: Bon-Drucktyp wird ignoriert",[47,820,724],"Symptome: Alle Bons werden mit Standardtyp gedrucktCustom Field-Werte werden nicht übernommen Lösungen: # Checkout-Prozessor prüfen\nbin\u002Fconsole debug:container --tag=shopware.checkout.cart.processor\n\n# Plugin-Cache leeren\nbin\u002Fconsole plugin:refresh ShopBite\n\n# Custom Fields prüfen\nbin\u002Fconsole custom-field:set:list",{"id":1202,"title":1203,"titles":1204,"content":1205,"level":580},"\u002Fdocs\u002Fshopware\u002Fcheckout#problem-lieferzeitberechnung-falsch","Problem: Lieferzeitberechnung falsch",[47,820,724],"Symptome: Falsche LieferzeitenBerechnung stimmt nicht mit Erwartungen überein Lösungen: # Custom Field-Werte prüfen\nmysql -u shopware -p shopware -e \"\n  SELECT id, custom_fields FROM product \n  WHERE custom_fields LIKE '%shopbite_delivery_time_factor%' LIMIT 5;\n\"\n\n# Berechnungslogik prüfen\nbin\u002Fconsole config:get ShopBitePlugin.config.baseDeliveryTime\n\n# Debug-Modus aktivieren\nbin\u002Fconsole config:set ShopBitePlugin.config.debug true",{"id":1207,"title":111,"titles":1208,"content":1209,"level":98},"\u002Fdocs\u002Fshopware\u002Fcheckout#nächste-schritte",[47],"Administrationsoberfläche - Bedienung der Plugin-OberflächeAPI-Referenz - Technische API-DokumentationFehlerbehebung - Problembehandlung und SupportPerformance-Optimierung - Skalierung und Caching html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}",{"id":58,"title":57,"titles":1211,"content":1212,"level":88},[],"Eine Einführung in die Nutzung der ShopBite Storefront",{"id":1214,"title":1215,"titles":1216,"content":1217,"level":88},"\u002Fdocs\u002Fstorefront\u002Ffirst-steps#erste-schritte-mit-der-shopbite-storefront","Erste Schritte mit der ShopBite Storefront",[],"Herzlichen Glückwunsch zur Installation Ihrer ShopBite Storefront! Diese Anleitung führt Sie durch die ersten Schritte.",{"id":1219,"title":1220,"titles":1221,"content":1222,"level":98},"\u002Fdocs\u002Fstorefront\u002Ffirst-steps#vorbereitende-schritte","Vorbereitende Schritte",[1215],"Stellen Sie sicher, dass folgende Voraussetzungen erfüllt sind: Shopware 6 ist installiert und funktionsfähigSie verfügen über eine Domain für Ihre Storefront",{"id":1224,"title":1225,"titles":1226,"content":1227,"level":98},"\u002Fdocs\u002Fstorefront\u002Ffirst-steps#shopware-vorbereiten","Shopware Vorbereiten",[1215],"Verkaufskanal erstellen:Erstellen Sie einen Storefront Verkaufskanal in ShopwareAlternativ können Sie einen vorhandenen Verkaufskanal verwendenWeitere Informationen: Storefront vs. HeadlessDomain-Konfiguration:Binden Sie Ihre Domain an den VerkaufskanalStellen Sie sicher, dass alle Konfigurationen abgeschlossen sind",{"id":1229,"title":1230,"titles":1231,"content":1232,"level":98},"\u002Fdocs\u002Fstorefront\u002Ffirst-steps#nuxt-installieren","Nuxt installieren",[1215],"Eine detaillierte Anleitung zur Nuxt-Installation finden Sie in der offiziellen Nuxt Dokumentation.",{"id":1234,"title":1235,"titles":1236,"content":1237,"level":136},"\u002Fdocs\u002Fstorefront\u002Ffirst-steps#schritt-1-nuxt-projekt-erstellen","Schritt 1: Nuxt-Projekt erstellen",[1215,1230],"Führen Sie den folgenden Befehl aus und navigieren Sie durch die Fragen. Wählen Sie die Standard-Einstellungen, um eine neue Nuxt-Anwendung zu erstellen: pnpm create nuxt@latest",{"id":1239,"title":1240,"titles":1241,"content":1242,"level":136},"\u002Fdocs\u002Fstorefront\u002Ffirst-steps#schritt-2-shopbite-storefront-modul-installieren","Schritt 2: ShopBite Storefront-Modul installieren",[1215,1230],"Installieren Sie das ShopBite Storefront-Modul: pnpm add @shopbite-de\u002Fstorefront\npnpm add -D @nuxt\u002Ftest-utils @nuxt\u002Feslint @nuxt\u002Fhints",{"id":1244,"title":1245,"titles":1246,"content":1247,"level":136},"\u002Fdocs\u002Fstorefront\u002Ffirst-steps#schritt-3-konfigurationsdateien-erstellen","Schritt 3: Konfigurationsdateien erstellen",[1215,1230],"Erstellen Sie die folgenden Dateien mit den entsprechenden Inhalten: .env Datei: # .env\nNUXT_PUBLIC_APP_ENV=\"development\"\nNUXT_PUBLIC_STORE_URL=\"http:\u002F\u002Flocalhost:3000\"\n\nNUXT_PUBLIC_SHOPWARE_ENDPOINT=\"https:\u002F\u002Fmy-shopware-instance.de\u002Fstore-api\u002F\"\nNUXT_PUBLIC_SHOPWARE_ACCESS_TOKEN=\"SALES-CHANNEL-ACCESS-TOKEN\"\nNUXT_PUBLIC_SITE_COUNTRY_ID=\"YOUR-DEFAULT-COUNTRY-ID\" nuxt.config.ts Datei: \u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n   extends: ['@shopbite-de\u002Fstorefront'],\n   compatibilityDate: '2025-07-15',\n   devtools: { enabled: true }\n}) app\u002Fassets\u002Fcss\u002Fmain.css Datei: \u002F* app\u002Fassets\u002Fcss\u002Fmain.css *\u002F\n@import \"@shopbite-de\u002Fstorefront\u002Fapp\u002Fassets\u002Fcss\u002Fmain.css\"; Nuxt content Datei \u002F\u002F content.config.ts\nimport contentConfig from \"@shopbite-de\u002Fstorefront\u002Fcontent.config\";\nexport default contentConfig;",{"id":1249,"title":1250,"titles":1251,"content":1252,"level":136},"\u002Fdocs\u002Fstorefront\u002Ffirst-steps#schritt-4-packagejson-aktualisieren","Schritt 4: package.json aktualisieren",[1215,1230],"Ihre package.json sollte ungefähr so aussehen: {\n  \"name\": \"storefront\",\n  \"type\": \"module\",\n  \"private\": true,\n  \"scripts\": {\n    \"build\": \"nuxt build\",\n    \"dev\": \"nuxt dev\",\n    \"generate\": \"nuxt generate\",\n    \"preview\": \"nuxt preview\",\n    \"postinstall\": \"nuxt prepare\"\n  },\n  \"dependencies\": {\n    \"@shopbite-de\u002Fstorefront\": \"^1.6.0\",\n    \"nuxt\": \"^4.2.2\"\n  },\n  \"devDependencies\": {\n    \"@nuxt\u002Feslint\": \"^1.15.2\",\n    \"@nuxt\u002Fhints\": \"^1.0.3\",\n    \"@nuxt\u002Ftest-utils\": \"^4.0.0\"\n  }\n}",{"id":1254,"title":1255,"titles":1256,"content":1257,"level":136},"\u002Fdocs\u002Fstorefront\u002Ffirst-steps#schritt-5-storefront-starten","Schritt 5: Storefront starten",[1215,1230],"Das sollte ausreichen, um den Standard-ShopBite Storefront zu starten: pnpm run build\nnode .output\u002Fserver\u002Findex.mjs Danach können Sie den Entwicklungsserver starten: pnpm run dev",{"id":1259,"title":111,"titles":1260,"content":1261,"level":98},"\u002Fdocs\u002Fstorefront\u002Ffirst-steps#nächste-schritte",[1215],"Erweiterte Storefront-Konfiguration - Detaillierte KonfigurationsoptionenInhaltsverwaltung - Produkte und Inhalte verwaltenStorefront vs. Headless - Architekturvergleich html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"id":62,"title":61,"titles":1263,"content":130,"level":88},[],{"id":1265,"title":1266,"titles":1267,"content":130,"level":88},"\u002Fdocs\u002Fstorefront\u002Fconfiguration#storefront-konfiguration","Storefront Konfiguration",[],{"id":1269,"title":1270,"titles":1271,"content":1272,"level":98},"\u002Fdocs\u002Fstorefront\u002Fconfiguration#feature-flags","Feature Flags",[1266],"Feature Flags werden über Umgebungsvariablen gesetzt und steuern optionale Funktionen der Storefront. VariableTypStandardBeschreibungNUXT_PUBLIC_SHOP_BITE_FEATURE_MULTI_CHANNELbooleanfalseAktiviert den Verkaufskanal-Wechsler im Header. Verwenden Sie dies, wenn Sie mehrere Standorte unter einer Storefront betreiben.NUXT_PUBLIC_SHOP_BITE_FEATURE_SECURE_KEYstring(leer)Wenn gesetzt, wird die gesamte Storefront hinter diesem Schlüssel gesperrt. Besucher müssen einmalig ?secureKey=\u003CWert> in der URL angeben; der Schlüssel wird dann für 30 Tage in einem Cookie gespeichert. Ohne gültigen Cookie werden alle Seiten auf \u002Fmaintenance weitergeleitet. Leer lassen zum Deaktivieren.NUXT_PUBLIC_SHOP_BITE_FEATURE_CONTACT_FORMbooleanfalseAktiviert die \u002Fkontakt-Seite. Bei false gibt die Seite einen 404-Fehler zurück.NUXT_PUBLIC_SHOP_BITE_MENU_CATEGORY_IDstring\"main-navigation\"Die Shopware-Kategorie-ID, die als Wurzel des Navigationsmenüs verwendet wird. Beispiel .env: NUXT_PUBLIC_SHOP_BITE_FEATURE_MULTI_CHANNEL=false\nNUXT_PUBLIC_SHOP_BITE_FEATURE_SECURE_KEY=\nNUXT_PUBLIC_SHOP_BITE_FEATURE_CONTACT_FORM=false\nNUXT_PUBLIC_SHOP_BITE_MENU_CATEGORY_ID=main-navigation",{"id":1274,"title":1275,"titles":1276,"content":1277,"level":98},"\u002Fdocs\u002Fstorefront\u002Fconfiguration#seo","SEO",[1266],"Die Storefront gibt Sitemap, Canonical-URLs, Vorschaubilder für geteilte Links und Seitentitel automatisch aus. Gesteuert wird das über Umgebungsvariablen. VariableStandardBeschreibungNUXT_PUBLIC_STORE_URL(leer)Öffentliche URL des Shops, z. B. https:\u002F\u002Fwww.mein-shop.de. Basis für Canonical-URLs, og:url, og:image, die Sitemap und den Sitemap-Eintrag in robots.txt. Ohne Wert wird die Request-URL verwendet, die hinter einem Reverse-Proxy falsch sein kann.NUXT_PUBLIC_SITE_NAMENUXT_STORE_NAME beim BuildShopname in Seitentiteln und og:site_name.NUXT_PUBLIC_SITE_TITLE_TEMPLATEsiehe untenVorlage für Seitentitel. %s steht für den Seitentitel, %siteName für den Shopname. Leer lassen, um nur den Seitentitel auszugeben.NUXT_PUBLIC_SITE_OG_IMAGE\u002Fcard.pngVorschaubild beim Teilen per WhatsApp oder Facebook für Seiten ohne eigenes Bild. Pfad relativ zu public\u002F oder absolute URL, ausgegeben wird immer eine absolute URL.NUXT_PUBLIC_SITE_ADDRESS_CITY(leer)Ort, z. B. Obertshausen. Fließt in Titel und Beschreibung der Startseite und in den Footer.NUXT_PUBLIC_SITE_CUISINE(leer)Küche, z. B. Italienisch-deutsche Küche. Fließt in die Beschreibung der Startseite. Beispiel .env: NUXT_PUBLIC_STORE_URL=\"https:\u002F\u002Fwww.mein-shop.de\"\nNUXT_PUBLIC_SITE_NAME=\"Pizzeria Mustermann\"\nNUXT_PUBLIC_SITE_TITLE_TEMPLATE=\"%s | %siteName – Online bestellen\"\nNUXT_PUBLIC_SITE_OG_IMAGE=\"\u002Fcard.png\"\nNUXT_PUBLIC_SITE_ADDRESS_CITY=\"Obertshausen\"\nNUXT_PUBLIC_SITE_CUISINE=\"Italienisch-deutsche Küche\"",{"id":1279,"title":1280,"titles":1281,"content":1282,"level":136},"\u002Fdocs\u002Fstorefront\u002Fconfiguration#seitentitel-und-beschreibung","Seitentitel und Beschreibung",[1266,1275],"Unterseiten und Kategorien erhalten die Titelvorlage, z. B. Pizza | Pizzeria Mustermann – Online bestellen. Kategorien verwenden Meta-Titel und Meta-Beschreibung aus Shopware, sonst Name und Beschreibung der Kategorie.Die Startseite verwendet keine Vorlage. Standardtitel ist \u003CShopname> \u003COrt> | Online bestellen & liefern lassen, die Beschreibung wird aus Küche, Ort und Shopname gebildet.Eigene Werte für die Startseite setzen Sie in content\u002Findex.yml unter seo. Sie haben Vorrang vor den Standardwerten, aber nur, wenn sie sich von title und description der Seite unterscheiden: Nuxt Content füllt seo sonst automatisch mit diesen Werten. seo:\n  title: Pizzeria Mustermann Obertshausen | Pizza online bestellen\n  description: Pizza, Pasta und Salate in Obertshausen online bestellen, liefern lassen oder abholen.\n  image: \u002Fcard.png",{"id":1284,"title":1285,"titles":1286,"content":1287,"level":136},"\u002Fdocs\u002Fstorefront\u002Fconfiguration#vorschaubild-ogimage","Vorschaubild (og:image)",[1266,1275],"Kategorieseiten verwenden das Kategoriebild aus Shopware, die Startseite seo.image aus content\u002Findex.yml. Alle anderen Seiten fallen auf NUXT_PUBLIC_SITE_OG_IMAGE zurück. twitter:card ist summary_large_image. Das Standardbild \u002Fcard.png zeigt die ShopBite-Demo. Legen Sie im Shop-Projekt eine eigene public\u002Fcard.png ab (empfohlen 1200 × 630 px), sie ersetzt das Standardbild. Die Vorschau prüfen Sie mit dem Facebook Sharing Debugger. WhatsApp speichert Vorschauen eine Weile zwischen.",{"id":1289,"title":1290,"titles":1291,"content":1292,"level":136},"\u002Fdocs\u002Fstorefront\u002Fconfiguration#sitemap","Sitemap",[1266,1275],"Unter \u002Fsitemap.xml stehen: die StartseiteContent-Seiten aus content\u002F (z. B. Zahlung und Versand)alle Kategorien der Hauptnavigation und des Speisekarten-Baums (NUXT_PUBLIC_SHOP_BITE_MENU_CATEGORY_ID) mit ihrer SEO-URL, Änderungsdatum und Kategoriebild\u002Fkontakt, wenn das Kontaktformular aktiv ist robots.txt verweist automatisch auf die Sitemap. Pfade, die per robots.disallow gesperrt sind, erscheinen nicht in der Sitemap. Eine einzelne Content-Seite schließen Sie mit sitemap: false im Frontmatter aus. Die Sitemap wird zehn Minuten zwischengespeichert. Die Kategorie-URLs kommen aus den SEO-URL-Templates in Shopware. Ein abschließender Schrägstrich (z. B. \u002Fc\u002FPizza\u002F) bleibt in Sitemap und Canonical-URL erhalten.",{"id":1294,"title":1295,"titles":1296,"content":1297,"level":98},"\u002Fdocs\u002Fstorefront\u002Fconfiguration#kontaktdaten-und-öffnungszeiten-im-footer","Kontaktdaten und Öffnungszeiten im Footer",[1266],"Der Footer zeigt Adresse, Telefon, einen Link zum Google Business Profil und die Öffnungszeiten auf jeder Seite als Text im HTML. Suchmaschinen lesen so Name, Adresse und Telefon (NAP) direkt aus dem Shop, das stärkt das lokale Ranking. Die Angaben sollten exakt mit dem Google Business Profil und dem Impressum übereinstimmen. VariableStandardBeschreibungNUXT_PUBLIC_SITE_ADDRESS_STREET(leer)Straße und Hausnummer, z. B. Kantstr. 6.NUXT_PUBLIC_SITE_ADDRESS_POSTAL_CODE(leer)Postleitzahl, z. B. 63179.NUXT_PUBLIC_SITE_ADDRESS_CITY(leer)Ort, siehe SEO.NUXT_PUBLIC_SITE_TELEPHONE(leer)Telefonnummer, wie sie angezeigt werden soll, z. B. +49 6104 71427. Der tel:-Link wird daraus automatisch erzeugt.NUXT_PUBLIC_SITE_GOOGLE_BUSINESS_PROFILE_URL(leer)Link zum Google Business Profil, z. B. aus Google Maps über „Teilen“. Der Shopname kommt aus NUXT_PUBLIC_SITE_NAME. Leere Werte blendet der Footer aus. Ohne Kontaktdaten und ohne Öffnungszeiten bleibt der Footer wie bisher. Die Öffnungszeiten stammen aus den Geschäftszeiten des ShopBite-Plugins in Shopware. Aufeinanderfolgende Tage mit gleichen Zeiten werden zusammengefasst (z. B. Mi–Fr), Tage ohne Zeiten erscheinen als „Ruhetag“. Beispiel .env: NUXT_PUBLIC_SITE_ADDRESS_STREET=\"Kantstr. 6\"\nNUXT_PUBLIC_SITE_ADDRESS_POSTAL_CODE=\"63179\"\nNUXT_PUBLIC_SITE_ADDRESS_CITY=\"Obertshausen\"\nNUXT_PUBLIC_SITE_TELEPHONE=\"+49 6104 71427\"\nNUXT_PUBLIC_SITE_GOOGLE_BUSINESS_PROFILE_URL=\"https:\u002F\u002Fmaps.app.goo.gl\u002F...\" Pflegen Sie Adresse und Telefon nicht zusätzlich als Link-Kategorien in der Shopware-Footer-Navigation, sonst erscheinen sie doppelt.",{"id":1299,"title":1300,"titles":1301,"content":1302,"level":98},"\u002Fdocs\u002Fstorefront\u002Fconfiguration#markenfarbe-und-kontrast","Markenfarbe und Kontrast",[1266],"Die Markenfarbe wird in app\u002Fassets\u002Fcss\u002Fmain.css als Farbskala --color-brand-50 bis --color-brand-950 gesetzt, entweder auf eine Tailwind-Skala gemappt oder als eigene Hex-Werte. Die Storefront leitet daraus die Primärfarbe ab: im hellen Modus brand-600, im dunklen Modus brand-400 (die Konvention von Nuxt UI). @import \"@shopbite-de\u002Fstorefront\u002Fapp\u002Fassets\u002Fcss\u002Fmain.css\";\n\n@theme {\n    --color-brand-50:  var(--color-rose-50);\n    \u002F* ... *\u002F\n    --color-brand-400: var(--color-rose-400);\n    --color-brand-500: var(--color-rose-500);\n    --color-brand-600: var(--color-rose-600);\n    \u002F* ... *\u002F\n    --color-brand-950: var(--color-rose-950);\n} Text in der Primärfarbe (Überschriften, Links, Produktnummern) und Text auf Buttons in der Primärfarbe brauchen ein Kontrastverhältnis von mindestens 4,5:1 (WCAG AA), sonst meldet Lighthouse unter „Accessibility“ einen Kontrastfehler. Dezente Buttons und Badges (variant: subtle) legen die Farbe auf einen hellen Farbton ihrer selbst, deshalb sollte die helle Stufe 5:1 auf Weiß erreichen. Prüfen Sie daher zwei Werte, z. B. mit dem Contrast Checker: StufeHintergrundMindestkontrastbrand-600Weiß #ffffff5:1brand-400Dunkel #1717174,5:1 Erreicht die Farbe des Kunden das nicht, wählen Sie für die Stufen 600 und 400 dunklere bzw. hellere Werte; die Stufe 500 bleibt frei für Akzente ohne Text.",{"id":1304,"title":1305,"titles":1306,"content":1307,"level":98},"\u002Fdocs\u002Fstorefront\u002Fconfiguration#nuxt-config","Nuxt Config",[1266],"Some examples how to configure the storefront. Checkout the\nNuxt Config for more information. export default defineNuxtConfig({\n    app: {\n        head: {\n            title: \"My Store\",\n            htmlAttrs: {\n                lang: \"de\",\n            },\n            meta: [\n                {charset: \"utf-8\"},\n                {name: \"viewport\", content: \"width=device-width, initial-scale=1\"},\n                {name: \"description\", content: \"My Store description\"},\n                {property: \"og:title\", content: \"My Store\"},\n                {property: \"og:description\", content: \"My Store description\",},\n            ],\n            link: [{rel: \"icon\", href: \"\u002Ffavicon.ico\"}],\n        },\n    },\n    runtimeConfig: {\n        public: {\n            site: {\n                name: \"My Store\",\n                description: \"My Store description\",\n                countryId: \"\",\n                titleTemplate: \"%s | %siteName – Online bestellen\",\n                ogImage: \"\u002Fcard.png\",\n                cuisine: \"Italienische Küche\",\n                address: {\n                    street: \"Kantstr. 6\",\n                    postalCode: \"63179\",\n                    city: \"Obertshausen\",\n                },\n                telephone: \"+49 6104 71427\",\n                googleBusinessProfileUrl: \"https:\u002F\u002Fmaps.app.goo.gl\u002F...\",\n            },\n        },\n    },\n    colorMode: {\n        preference: \"light\",\n    },\n    pwa: {\n        manifest: {\n            name: \"My Store\",\n            short_name: \"mystore\",\n            theme_color: \"#4d7c0f\",\n            icons: [\n                {\n                    src: \"log192x192.png\",\n                    sizes: \"192x192\",\n                    type: \"image\u002Fpng\",\n                    purpose: \"any maskable\",\n                }\n            ],\n        },\n    },\n})",{"id":1309,"title":1310,"titles":1311,"content":1312,"level":98},"\u002Fdocs\u002Fstorefront\u002Fconfiguration#strukturierte-daten-schemaorg","Strukturierte Daten (schema.org)",[1266],"Die Storefront gibt JSON-LD aus, damit Google den Shop als Restaurant mit Öffnungszeiten und Speisekarte versteht: Startseite: Restaurant (ein LocalBusiness) mit Name, Adresse, Telefon, Küche, Preisklasse, Bild, Link zum Google Business Profil, den wöchentlichen Öffnungszeiten (openingHoursSpecification) und Schließtagen (specialOpeningHoursSpecification) aus dem ShopBite-Plugin sowie hasMenu mit einer MenuSection je Kategorie der Speisekarte.Kategorieseiten: MenuSection mit den Produkten der Kategorie als MenuItem inklusive Preis (offers), dazu wie bisher CollectionPage und BreadcrumbList. Die Werte kommen aus denselben Variablen wie der Footer (NUXT_PUBLIC_SITE_NAME, NUXT_PUBLIC_SITE_ADDRESS_*, NUXT_PUBLIC_SITE_TELEPHONE, NUXT_PUBLIC_SITE_CUISINE, NUXT_PUBLIC_SITE_GOOGLE_BUSINESS_PROFILE_URL, NUXT_PUBLIC_SITE_OG_IMAGE). Zwei Variablen gibt es nur für das Schema: VariableStandardBeschreibungNUXT_PUBLIC_SITE_ADDRESS_COUNTRYDELand der Adresse als ISO-Code.NUXT_PUBLIC_SITE_PRICE_RANGE(leer)Preisklasse, z. B. €€. Leere Werte werden weggelassen. Prüfen Sie das Ergebnis mit dem Rich Results Test oder dem Schema Markup Validator: Beide sollten auf der Startseite ein Restaurant mit Öffnungszeiten erkennen. html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"id":66,"title":65,"titles":1314,"content":130,"level":88},[],{"id":1316,"title":1317,"titles":1318,"content":130,"level":88},"\u002Fdocs\u002Fstorefront\u002Fcontent#inhalte-anpassen","Inhalte anpassen",[],{"id":1320,"title":1321,"titles":1322,"content":1323,"level":98},"\u002Fdocs\u002Fstorefront\u002Fcontent#backend-inhalte","Backend Inhalte",[1317],"ProdukteKategorienMedien",{"id":1325,"title":1326,"titles":1327,"content":1328,"level":98},"\u002Fdocs\u002Fstorefront\u002Fcontent#frontend-inhale","Frontend Inhale",[1317],"TextUI Komponenten",{"id":1330,"title":1331,"titles":1332,"content":1333,"level":136},"\u002Fdocs\u002Fstorefront\u002Fcontent#nuxt-content","Nuxt Content",[1317,1326],"Um Texte und UI Komponenten zu verwalten verwenden wir Nuxt Content. Offizielle Nuxt Content Dokumentation",{"id":1335,"title":1336,"titles":1337,"content":1338,"level":580},"\u002Fdocs\u002Fstorefront\u002Fcontent#strucute","Strucute",[1317,1326,1331],"Das sind die Standard CMS seiten die bereits vorhanden sind: content\u002F\n├── index.yaml\n├── navigation.yaml\n├── impressum.md\n└── unternehmen\u002F\n    ├── agb.md\n    ├── datenschutz.md\n    └── zahlung-und-versand.md Du kannst natürlich weitere erstellen und\u002Foder diese überschreiben. Du willst bestimmt den Inhalt deiner Startseite\nüberschreiben. Dafür gehst du wie folgt for: Erstelle die obligatoische content.config.ts Datei mit dem Inhalt: export { default } from '@shopbite-de\u002Fstorefront\u002Fcontent.config'\nexport * from '@shopbite-de\u002Fstorefront\u002Fcontent.config' Erstelle eine neue Datei in deinem Content Ordner. Zum Beispiel \u002Fcontent\u002Findex.ymlSchau dir die orginial Datei an.Kopiere den Inhalt in deine neue Datei und überschreibe die Inhalte Du kannst natürlich auch die komplette content Konfiguration mit samt der Datenobjekten überschreiben und ganz eigene\nInhalte und Strukturen erstellen, falls du deine Startseite von grundauf neu designend möchtest. Möchtest du weitrere landingpages erstellen, kannst du auch tun. Indem du eine Markdown Datei in deinem content Ordner\nerstellst. Die Datei kann sich irgendwo im Ordner befinden. Die Dateistrukutr wird auch im URL Pfard widergespiegelt. Zum Beispiel: content\u002Fmeine-landing-page.md --> https:\u002F\u002Fshop.de\u002Fmeine-landing-pagecontent\u002Funterseite\u002Flanding-page-2.md --> https:\u002F\u002Fshop.de\u002Funterseite\u002Funterseiten-landing-page-2",{"id":1340,"title":1341,"titles":1342,"content":1343,"level":580},"\u002Fdocs\u002Fstorefront\u002Fcontent#ui-komponenten-nuxt-ui","UI Komponenten (Nuxt UI)",[1317,1326,1331],"Du kannst in den Markdown Dateien auch UI Komponenten verwenden. Du kannst grundsätzlich alle UI Komponent von\nNuxt UI verwenden. Weitere Informationen, auch bezüglich von Styling, findest du in der Offiziellen Doku",{"id":1345,"title":1346,"titles":1347,"content":1348,"level":98},"\u002Fdocs\u002Fstorefront\u002Fcontent#medien-und-performance","Medien und Performance",[1317],"Die Startseite lädt als erstes das Hero-Video und die Bilder aus content\u002Findex.yml. Zu große Dateien machen den größten Unterschied bei Lighthouse (Kategorie „Performance“, Kennzahl LCP), besonders auf dem Handy.",{"id":1350,"title":1351,"titles":1352,"content":1353,"level":136},"\u002Fdocs\u002Fstorefront\u002Fcontent#hero-video-und-poster","Hero-Video und Poster",[1317,1346],"Legen Sie zum Video ein Poster ab (hero.poster): das erste Bild des Videos als WebP, 1280 px breit, bereits weichgezeichnet (boxblur, das Video wird per CSS ebenso weichgezeichnet), etwa 20 bis 30 KB. Die Storefront rendert das Poster als erstes Bild der Seite und lädt es vorab. Auf Handys (unter 768 px) wird das Video gar nicht geladen, nur das Poster.Das Video selbst: 720p, ohne Ton, 5 bis 10 Sekunden, unter 1 MB. Ein 1080p-Video mit 3 MB verdoppelt die Ladezeit der Startseite. Beides erzeugen Sie mit ffmpeg: ffmpeg -ss 1 -i hero.mp4 -frames:v 1 -vf \"scale=1280:-2,boxblur=4:2\" -c:v libwebp -quality 70 hero-poster.webp\nffmpeg -i hero.mp4 -vf \"scale=1280:-2\" -r 25 -c:v libx264 -crf 28 -preset medium -an -movflags +faststart hero-720p.mp4 hero:\n  backgroundVideo: https:\u002F\u002Fshop.example.com\u002Fmedia\u002F...\u002Fhero-720p.mp4\n  poster: \u002Fhero-poster.webp Das Poster kann im public\u002F-Ordner des Shop-Projekts liegen, das Video gehört in die Shopware-Medien.",{"id":1355,"title":1356,"titles":1357,"content":1358,"level":136},"\u002Fdocs\u002Fstorefront\u002Fcontent#bilder","Bilder",[1317,1346],"Kategorie- und Produktbilder aus Shopware brauchen keine Nacharbeit: Shopware erzeugt Thumbnails (400, 800 und 1920 px), die Storefront liefert sie als srcset aus, der Browser lädt die passende Größe.Bilder aus content\u002Findex.yml (CTA-Hintergrund, Galerie, Kundenbilder) werden unverändert geladen. Verwenden Sie WebP mit höchstens 1920 px Breite, unter 200 KB. Liegt das Bild in den Shopware-Medien, nehmen Sie die Thumbnail-URL (\u002Fthumbnail\u002F...\u002Fname_1920x545.webp) statt des Originals.Die Galerie zeigt Bilder im Format 4:3 und lädt sie erst beim Scrollen.",{"id":1360,"title":1361,"titles":1362,"content":1363,"level":136},"\u002Fdocs\u002Fstorefront\u002Fcontent#cache-header-auf-dem-object-storage","Cache-Header auf dem Object Storage",[1317,1346],"Liegen die Shopware-Medien auf einem S3-Speicher (z. B. Hetzner Object Storage), sendet der Speicher standardmäßig keinen Cache-Control-Header. Jeder Besuch lädt alle Bilder und das Video neu. Die Medien-URLs von Shopware enthalten einen Zeitstempel, deshalb dürfen sie lange gecacht werden: # alle vorhandenen Objekte nachträglich (AWS CLI mit Hetzner-Endpoint)\naws --endpoint-url https:\u002F\u002Fnbg1.your-objectstorage.com s3 cp s3:\u002F\u002Fmein-bucket\u002F s3:\u002F\u002Fmein-bucket\u002F \\\n  --recursive --metadata-directive REPLACE --cache-control \"public, max-age=31536000, immutable\" Für neue Uploads setzen Sie den Header in Shopware: shopware.filesystem.public.config.options.CacheControl: \"public, max-age=31536000, immutable\" in config\u002Fpackages\u002Fshopware.yaml. Prüfen Sie das Ergebnis mit curl -I \u003CMedien-URL>: Die Antwort muss eine cache-control-Zeile enthalten.",{"id":1365,"title":1366,"titles":1367,"content":1368,"level":136},"\u002Fdocs\u002Fstorefront\u002Fcontent#prüfen","Prüfen",[1317,1346],"npx lighthouse@12 https:\u002F\u002Fwww.mein-shop.de\u002F --only-categories=performance --view Ziel: Performance über 90 und LCP unter 2,5 Sekunden auf dem Handy. html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}",{"id":70,"title":69,"titles":1370,"content":1371,"level":88},[],"Der Hauptgrund ist dass eine wichtige Funktion nicht für Headless Verakufskanäle verfügbar ist: SEO-URL's.",{"id":1373,"title":1374,"titles":1375,"content":1376,"level":88},"\u002Fdocs\u002Fstorefront\u002Fstorefront-vs-headless#warum-solltest-du-ein-storefront-verkaufskanal-benutzten","Warum solltest du ein Storefront Verkaufskanal benutzten?",[],"Der Hauptgrund ist dass eine wichtige Funktion nicht für Headless Verakufskanäle verfügbar ist: SEO-URL's. SEO-URL's für Kategorien und Produkte werden nur dann automatisch von Shopware generiert, wenn der Verkaufskanal ein\nStorefront ist. ShopBite benötigt diese Funktion, um SEO-Optimierung zu ermöglichen. Mehr Information zu Shopware's SEO-URLs findest du hier.",{"id":79,"title":78,"titles":1378,"content":1379,"level":88},[],"Diese Anleitung führt Sie durch die Installation und Einrichtung des ShopBite Order Printers.",{"id":1381,"title":1382,"titles":1383,"content":1379,"level":88},"\u002Fdocs\u002Freceipt-printer\u002Finstallation#installation-des-order-printers","Installation des Order Printers",[],{"id":1385,"title":1386,"titles":1387,"content":1388,"level":98},"\u002Fdocs\u002Freceipt-printer\u002Finstallation#voraussetzungen-prüfen","Voraussetzungen prüfen",[1382],"Bevor Sie mit der Installation beginnen, stellen Sie sicher, dass alle Voraussetzungen erfüllt sind:",{"id":1390,"title":1391,"titles":1392,"content":1393,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Finstallation#server-voraussetzungen","Server-Voraussetzungen",[1382,1386],"# PHP-Version prüfen\nphp -v\n# Sollte PHP 8.2 oder höher anzeigen\n\n# Composer installieren (falls nicht vorhanden)\nphp -r \"copy('https:\u002F\u002Fgetcomposer.org\u002Finstaller', 'composer-setup.php');\"\nphp composer-setup.php\nphp -r \"unlink('composer-setup.php');\"\n\n# SQLite-Erweiterung prüfen\nphp -m | grep sqlite",{"id":1395,"title":1396,"titles":1397,"content":1398,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Finstallation#drucker-voraussetzungen","Drucker-Voraussetzungen",[1382,1386],"CUPS installieren (für lokale Drucker):# Auf Ubuntu\u002FDebian\nsudo apt-get update\nsudo apt-get install cups\n\n# CUPS-Dienst starten\nsudo systemctl start cups\nsudo systemctl enable cups\nDrucker einrichten:# Drucker hinzufügen (Beispiel für Epson TM-T20)\nlpadmin -p TM-T20 -E -v usb:\u002F\u002FEpson\u002FTM-T20 -m drv:\u002F\u002F\u002Fsample.drv\u002Fgeneric.ppd\n\n# Standarddrucker setzen\nlpoptions -d TM-T20",{"id":1400,"title":1401,"titles":1402,"content":130,"level":98},"\u002Fdocs\u002Freceipt-printer\u002Finstallation#installation","Installation",[1382],{"id":1404,"title":1405,"titles":1406,"content":1407,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Finstallation#_1-repository-klonen","1. Repository klonen",[1382,1401],"git clone https:\u002F\u002Fgithub.com\u002Fshopbite\u002Forder-printer.git\ncd order-printer",{"id":1409,"title":1410,"titles":1411,"content":1412,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Finstallation#_2-abhängigkeiten-installieren","2. Abhängigkeiten installieren",[1382,1401],"composer install --no-dev --optimize-autoloader Für Entwicklungszwecke: composer install",{"id":1414,"title":1415,"titles":1416,"content":1417,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Finstallation#_3-umgebung-konfigurieren","3. Umgebung konfigurieren",[1382,1401],"Kopieren Sie die Beispiel-Umgebungsdatei: cp .env .env.local",{"id":1419,"title":1420,"titles":1421,"content":1422,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Finstallation#_4-datenbank-einrichten","4. Datenbank einrichten",[1382,1401],"# Datenbank erstellen\nbin\u002Fconsole doctrine:database:create\n\n# Schema aktualisieren\nbin\u002Fconsole doctrine:schema:update --force",{"id":1424,"title":1425,"titles":1426,"content":130,"level":98},"\u002Fdocs\u002Freceipt-printer\u002Finstallation#shopware-6-integration","Shopware 6 Integration",[1382],{"id":1428,"title":482,"titles":1429,"content":1430,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Finstallation#api-zugang-einrichten",[1382,1425],"Shopware Administration öffnenEinstellungen > System > IntegrationenNeue Integration hinzufügenBerechtigungen setzen:\norder:read - Bestellungen lesenorder:update - Bestellstatus aktualisierencustomer:read - Kundendaten lesen",{"id":1432,"title":1433,"titles":1434,"content":1435,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Finstallation#integration-konfigurieren","Integration konfigurieren",[1382,1425],"Bearbeiten Sie die .env.local-Datei: # Shopware API-Zugang\nSHOPWARE_HOST=https:\u002F\u002Fihre-shopware-domain.de\nSHOPWARE_CLIENT_ID=ihre_client_id\nSHOPWARE_CLIENT_SECRET=ihre_client_secret\n\n# Druckereinstellungen\nPRINTER_NAME=TM-T20\n\n# Datenverzeichnis\nDATA_DIR=\"\u002Fdata\u002Freceipts\u002F\"",{"id":1437,"title":1438,"titles":1439,"content":130,"level":98},"\u002Fdocs\u002Freceipt-printer\u002Finstallation#drucker-einrichten","Drucker einrichten",[1382],{"id":1441,"title":1442,"titles":1443,"content":1444,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Finstallation#cups-konfiguration","CUPS-Konfiguration",[1382,1438],"Drucker hinzufügen:sudo lpadmin -p IhrDruckerName -E -v usb:\u002F\u002FHersteller\u002FModel -m drv:\u002F\u002F\u002Fsample.drv\u002Fgeneric.ppd\nStandarddrucker setzen:lpoptions -d IhrDruckerName\nTestseite drucken:lp -d IhrDruckerName \u002Fetc\u002Fcups\u002Fppd\u002FIhrDruckerName.ppd",{"id":1446,"title":1447,"titles":1448,"content":1449,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Finstallation#netzwerkdrucker-einrichten","Netzwerkdrucker einrichten",[1382,1438],"Für Netzwerkdrucker verwenden Sie die IP-Adresse: sudo lpadmin -p NetzwerkDrucker -E -v socket:\u002F\u002F192.168.1.100:9100 -m drv:\u002F\u002F\u002Fsample.drv\u002Fgeneric.ppd",{"id":1451,"title":1452,"titles":1453,"content":130,"level":98},"\u002Fdocs\u002Freceipt-printer\u002Finstallation#dienst-starten","Dienst starten",[1382],{"id":1455,"title":1456,"titles":1457,"content":1458,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Finstallation#entwicklungsmodus","Entwicklungsmodus",[1382,1452],"# Scheduler starten (prüft alle 10 Sekunden auf neue Bestellungen)\nbun run scheduler\n\n# Worker starten (verarbeitet Druckaufträge)\nbun run worker",{"id":1460,"title":1461,"titles":1462,"content":1463,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Finstallation#produktionsmodus","Produktionsmodus",[1382,1452],"Für den Produktionsbetrieb empfehlen wir die Verwendung von Supervisor: Supervisor-Konfiguration erstellen (\u002Fetc\u002Fsupervisor\u002Fconf.d\u002Forder-printer.conf): [program:order-printer-scheduler]\ncommand=\u002Fpfad\u002Fzum\u002Fproject\u002Fbin\u002Fconsole messenger:consume scheduler_default\nuser=www-data\nautostart=true\nautorestart=true\nstderr_logfile=\u002Fvar\u002Flog\u002Forder-printer-scheduler.err.log\nstdout_logfile=\u002Fvar\u002Flog\u002Forder-printer-scheduler.out.log\n\n[program:order-printer-worker]\ncommand=\u002Fpfad\u002Fzum\u002Fproject\u002Fbin\u002Fconsole messenger:consume async\nuser=www-data\nautostart=true\nautorestart=true\nstderr_logfile=\u002Fvar\u002Flog\u002Forder-printer-worker.err.log\nstdout_logfile=\u002Fvar\u002Flog\u002Forder-printer-worker.out.log Supervisor aktualisieren: sudo supervisorctl reread\nsudo supervisorctl update\nsudo supervisorctl start all",{"id":1465,"title":1466,"titles":1467,"content":130,"level":98},"\u002Fdocs\u002Freceipt-printer\u002Finstallation#erste-schritte","Erste Schritte",[1382],{"id":1469,"title":1470,"titles":1471,"content":1472,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Finstallation#testbestellung-erstellen","Testbestellung erstellen",[1382,1466],"In Shopware eine Testbestellung erstellenBestellstatus auf \"Offen\" setzenDrucker beobachten - Der Bon sollte automatisch gedruckt werden",{"id":1474,"title":1475,"titles":1476,"content":1477,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Finstallation#logs-überprüfen","Logs überprüfen",[1382,1466],"# Scheduler-Logs\ntail -f \u002Fvar\u002Flog\u002Forder-printer-scheduler.out.log\n\n# Worker-Logs\ntail -f \u002Fvar\u002Flog\u002Forder-printer-worker.out.log",{"id":1479,"title":386,"titles":1480,"content":1481,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Finstallation#häufige-installationsprobleme",[1382,1466],"Problem: Drucker wird nicht erkannt Lösung: CUPS neu starten: sudo systemctl restart cupsLösung: Druckerberechtigungen prüfen: lpstat -t Problem: Verbindung zur Shopware API fehlgeschlagen Lösung: API-Zugangsdaten in .env.local prüfenLösung: Firewall-Einstellungen überprüfenLösung: Shopware-Logs auf API-Fehler prüfen Problem: Datenbankfehler Lösung: SQLite-Berechtigungen prüfen: chmod 666 data\u002Fqueue_*.dbLösung: Datenbank neu erstellen: rm data\u002Fqueue_*.db && bin\u002Fconsole doctrine:database:create",{"id":1483,"title":111,"titles":1484,"content":1485,"level":98},"\u002Fdocs\u002Freceipt-printer\u002Finstallation#nächste-schritte",[1382],"KonfigurationBetrieb und WartungFehlerbehebung html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}",{"id":82,"title":61,"titles":1487,"content":1488,"level":88},[],"Der Order Printer bietet umfangreiche Konfigurationsmöglichkeiten, um das System an Ihre spezifischen Anforderungen anzupassen.",{"id":1490,"title":1491,"titles":1492,"content":1488,"level":88},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration#konfiguration-des-order-printers","Konfiguration des Order Printers",[],{"id":1494,"title":1495,"titles":1496,"content":1497,"level":98},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration#umgebungskonfiguration","Umgebungskonfiguration",[1491],"Die Hauptkonfiguration erfolgt über die .env.local-Datei. Hier sind die wichtigsten Einstellungen:",{"id":1499,"title":1500,"titles":1501,"content":1502,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration#shopware-api-konfiguration","Shopware API-Konfiguration",[1491,1495],"# Shopware API-Zugang\nSHOPWARE_HOST=https:\u002F\u002Fihre-shopware-domain.de\nSHOPWARE_CLIENT_ID=ihre_client_id\nSHOPWARE_CLIENT_SECRET=ihre_client_secret\n\n# API-Timeout (in Sekunden)\nSHOPWARE_API_TIMEOUT=30\n\n# API-Rate-Limiting\nSHOPWARE_API_RATE_LIMIT=100\nSHOPWARE_API_RATE_LIMIT_INTERVAL=60",{"id":1504,"title":1505,"titles":1506,"content":1507,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration#druckerkonfiguration","Druckerkonfiguration",[1491,1495],"# Druckername (muss mit CUPS übereinstimmen)\nPRINTER_NAME=TM-T20\n\n# Druckerauflösung (DPI)\nPRINTER_DPI=203\n\n# Zeichen pro Zeile\nPRINTER_CHARACTERS_PER_LINE=42\n\n# Druckgeschwindigkeit (1-5, 1 = langsam, 5 = schnell)\nPRINTER_SPEED=3\n\n# Druckerdichte (1-15)\nPRINTER_DENSITY=10",{"id":1509,"title":1510,"titles":1511,"content":1512,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration#systemkonfiguration","Systemkonfiguration",[1491,1495],"# Polling-Intervall (in Sekunden)\nPOLLING_INTERVAL=10\n\n# Maximale Anzahl gleichzeitiger Druckaufträge\nMAX_CONCURRENT_PRINTS=5\n\n# Warteschlangen-Timeout (in Sekunden)\nQUEUE_TIMEOUT=300\n\n# Datenverzeichnis für Bon-Archiv\nDATA_DIR=\"\u002Fdata\u002Freceipts\u002F\"\n\n# Log-Level (debug, info, notice, warning, error, critical, alert, emergency)\nLOG_LEVEL=info",{"id":1514,"title":1515,"titles":1516,"content":130,"level":98},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration#bon-formatierung","Bon-Formatierung",[1491],{"id":1518,"title":1519,"titles":1520,"content":1521,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration#standard-bon-layout","Standard-Bon-Layout",[1491,1515],"Der Order Printer generiert Bons mit folgendem Standardlayout: ┌────────────────────────────────────────┐\n│              IHR SHOP-NAME              │\n│    Musterstraße 123 • 12345 Musterstadt │\n│          Tel: 01234\u002F567890              │\n├────────────────────────────────────────┤\n│                BON #1001                 │\n│            11.01.2024 14:30            │\n├────────────────────────────────────────┤\n│ Kunde: Max Mustermann                    │\n│ Tel: 0176\u002F12345678                       │\n├────────────────────────────────────────┤\n│ 1x Pizza Margherita              8,99 € │\n│ 2x Spaghetti Bolognese          15,98 € │\n│ 1x Salat Caesar                  5,99 € │\n├────────────────────────────────────────┤\n│ Zwischensumme:                  30,96 € │\n│ Lieferkosten:                    2,50 € │\n│ Gesamt:                          33,46 € │\n├────────────────────────────────────────┤\n│ Zahlungsart: Barzahlung                  │\n│ Lieferart: Abholung                      │\n├────────────────────────────────────────┤\n│           Vielen Dank für Ihren          │\n│                Einkauf!                 │\n└────────────────────────────────────────┘",{"id":1523,"title":1524,"titles":1525,"content":1526,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration#bon-layout-anpassen","Bon-Layout anpassen",[1491,1515],"Sie können das Bon-Layout durch Anpassung der ReceiptFormatter-Klasse ändern: \u002F\u002F In src\u002FInfra\u002FPrinter\u002FEpson\u002FReceiptFormatter.php\n\npublic function formatHeader(): self\n{\n    $this->content .= self::ALIGN_CENTER;\n    $this->content .= self::DOUBLE_WIDTH_ON;\n    $this->content .= \"IHR SHOP-NAME\\n\";\n    $this->content .= self::DOUBLE_WIDTH_OFF;\n    $this->content .= self::ALIGN_CENTER;\n    $this->content .= \"Musterstraße 123 • 12345 Musterstadt\\n\";\n    $this->content .= \"Tel: 01234\u002F567890\\n\";\n    $this->content .= self::FEED;\n    \n    return $this;\n}",{"id":1528,"title":1529,"titles":1530,"content":1531,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration#logo-hinzufügen","Logo hinzufügen",[1491,1515],"Um ein Logo zum Bon hinzuzufügen, müssen Sie das Logo als ESC\u002FPOS-Bitmap konvertieren: # Logo konvertieren (erfordert ImageMagick)\nconvert logo.png -resize 384x128 -colorspace Gray -dither None logo.bmp\n\n# Logo in ESC\u002FPOS-Format konvertieren\nphp bin\u002Fconsole order-printer:convert-logo logo.bmp logo.escpos Dann können Sie das Logo in der ReceiptFormatter-Klasse einbinden: public function addLogo(): self\n{\n    $logoPath = __DIR__ . '\u002F..\u002F..\u002F..\u002Fpublic\u002Flogo.escpos';\n    if (file_exists($logoPath)) {\n        $this->content .= file_get_contents($logoPath);\n        $this->content .= self::FEED;\n    }\n    \n    return $this;\n}",{"id":1533,"title":1534,"titles":1535,"content":130,"level":98},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration#erweiterte-konfiguration","Erweiterte Konfiguration",[1491],{"id":1537,"title":1538,"titles":1539,"content":1540,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration#mehrere-drucker","Mehrere Drucker",[1491,1534],"Für mehrere Drucker können Sie verschiedene CUPS-Warteschlangen einrichten: # Küchendrucker einrichten\nlpadmin -p KitchenPrinter -E -v usb:\u002F\u002FEpson\u002FTM-U220 -m drv:\u002F\u002F\u002Fsample.drv\u002Fgeneric.ppd\n\n# Kassendrucker einrichten  \nlpadmin -p CashierPrinter -E -v usb:\u002F\u002FEpson\u002FTM-T88 -m drv:\u002F\u002F\u002Fsample.drv\u002Fgeneric.ppd Dann können Sie den Drucker dynamisch basierend auf der Bestellart auswählen: \u002F\u002F In Ihrer Drucklogik\n$printerName = $order->isTakeaway() ? 'KitchenPrinter' : 'CashierPrinter';",{"id":1542,"title":1543,"titles":1544,"content":1545,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration#bestellfilter","Bestellfilter",[1491,1534],"Sie können die abzurufenden Bestellungen filtern, indem Sie die OrderRepository-Klasse anpassen: \u002F\u002F In src\u002FInfra\u002FShopware\u002FOrderRepository.php\n\npublic function findNewNumbers(): array\n{\n    \u002F\u002F Nur Bestellungen mit bestimmten Zahlungsarten\n    $paymentMethods = ['cash', 'card'];\n    \n    \u002F\u002F Nur Bestellungen über einem bestimmten Wert\n    $minOrderValue = 5.00;\n    \n    \u002F\u002F Nur Bestellungen für bestimmte Lieferarten\n    $deliveryTypes = ['delivery', 'takeaway'];\n    \n    return $this->shopwareClient->getOrders(\n        $paymentMethods,\n        $minOrderValue,\n        $deliveryTypes\n    );\n}",{"id":1547,"title":1548,"titles":1549,"content":1550,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration#benachrichtigungen","Benachrichtigungen",[1491,1534],"Sie können Benachrichtigungen für bestimmte Ereignisse einrichten: # In config\u002Fpackages\u002Fmessenger.yaml\n\nframework:\n    messenger:\n        routing:\n            'Veliu\\OrderPrinter\\Domain\\Event\\OrderPrintedEvent': async\n            'Veliu\\OrderPrinter\\Domain\\Event\\PrintFailedEvent': failed Dann können Sie Event-Listener erstellen: #[AsMessageHandler]\nfinal class OrderPrintedNotificationHandler\n{\n    public function __construct(\n        private MailerInterface $mailer,\n        private string $adminEmail\n    ) {}\n    \n    public function __invoke(OrderPrintedEvent $event): void\n    {\n        $email = (new Email())\n            ->from('noreply@shopbite.de')\n            ->to($this->adminEmail)\n            ->subject('Bestellung gedruckt: ' . $event->orderNumber)\n            ->text('Die Bestellung ' . $event->orderNumber . ' wurde erfolgreich gedruckt.');\n        \n        $this->mailer->send($email);\n    }\n}",{"id":1552,"title":357,"titles":1553,"content":130,"level":98},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration#performance-optimierung",[1491],{"id":1555,"title":1556,"titles":1557,"content":1558,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration#caching","Caching",[1491,357],"Aktivieren Sie das Caching für häufig abgerufene Daten: # In config\u002Fpackages\u002Fcache.yaml\n\nframework:\n    cache:\n        app: cache.adapter.filesystem\n        default_redis_provider: 'redis:\u002F\u002Flocalhost'\n        pools:\n            shopware.cache:\n                adapter: cache.adapter.redis\n                default_lifetime: 3600",{"id":1560,"title":1561,"titles":1562,"content":1563,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration#batch-verarbeitung","Batch-Verarbeitung",[1491,357],"Für hohe Bestellvolumen können Sie die Batch-Verarbeitung aktivieren: # Batch-Konfiguration\nBATCH_SIZE=10\nBATCH_INTERVAL=30",{"id":1565,"title":1566,"titles":1567,"content":1568,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration#lastverteilung","Lastverteilung",[1491,357],"Für Systeme mit hohem Durchsatz können Sie mehrere Worker einrichten: # Mehrere Worker starten\nbin\u002Fconsole messenger:consume async --limit=10 --time-limit=3600 &\nbin\u002Fconsole messenger:consume async --limit=10 --time-limit=3600 &\nbin\u002Fconsole messenger:consume async --limit=10 --time-limit=3600 &",{"id":1570,"title":1571,"titles":1572,"content":130,"level":98},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration#sicherheit","Sicherheit",[1491],{"id":1574,"title":1575,"titles":1576,"content":1577,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration#api-sicherheit","API-Sicherheit",[1491,1571],"HTTPS erzwingen: Stellen Sie sicher, dass Ihre Shopware-Instanz HTTPS verwendetIP-Beschränkung: Beschränken Sie den API-Zugriff auf bestimmte IP-AdressenRate-Limiting: Konfigurieren Sie angemessene Rate-Limits",{"id":1579,"title":1580,"titles":1581,"content":1582,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration#druckersicherheit","Druckersicherheit",[1491,1571],"Drucker-IP-Beschränkung: Beschränken Sie den Zugriff auf den DruckerDrucker-Passwort: Richten Sie ein Drucker-Passwort einVerschlüsselung: Verwenden Sie verschlüsselte Verbindungen für Netzwerkdrucker",{"id":1584,"title":1585,"titles":1586,"content":130,"level":98},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration#wartungskonfiguration","Wartungskonfiguration",[1491],{"id":1588,"title":1589,"titles":1590,"content":1591,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration#log-rotation","Log-Rotation",[1491,1585],"Richten Sie eine Log-Rotation ein, um Speicherplatz zu sparen: # Logrotate-Konfiguration (\u002Fetc\u002Flogrotate.d\u002Forder-printer)\n\u002Fvar\u002Flog\u002Forder-printer-*.log {\n    daily\n    rotate 7\n    compress\n    delaycompress\n    missingok\n    notifempty\n    create 644 www-data www-data\n}",{"id":1593,"title":1594,"titles":1595,"content":1596,"level":136},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration#datenbereinigung","Datenbereinigung",[1491,1585],"Richten Sie eine regelmäßige Datenbereinigung ein: # Cron-Job für Datenbereinigung (täglich um 3 Uhr)\n0 3 * * * \u002Fpfad\u002Fzum\u002Fproject\u002Fbin\u002Fconsole order-printer:cleanup --days=30",{"id":1598,"title":111,"titles":1599,"content":1600,"level":98},"\u002Fdocs\u002Freceipt-printer\u002Fconfiguration#nächste-schritte",[1491],"Betrieb und WartungFehlerbehebungErweiterte Druckerkonfiguration html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"id":1602,"title":10,"body":1603,"description":87,"extension":1741,"meta":1742,"navigation":1745,"ogImage":1746,"path":11,"robots":1746,"schemaOrg":1746,"seo":1747,"sitemap":1748,"stem":12,"__hash__":1751},"docs_de\u002Fdocs\u002F1.intro.md",{"type":1604,"value":1605,"toc":1735},"minimark",[1606,1610,1613,1617,1620,1649,1652,1655,1669,1672,1704,1707],[1607,1608,10],"h1",{"id":1609},"einführung-in-shopbite",[1611,1612,92],"p",{},[1614,1615,95],"h2",{"id":1616},"was-ist-shopbite",[1611,1618,1619],{},"ShopBite ist ein modulares E-Commerce System, das aus verschiedenen Open-Source-Komponenten besteht und eine vollständige Webshop-Lösung für Gastronomiebetriebe bietet:",[1621,1622,1623,1631,1637,1643],"ul",{},[1624,1625,1626,1630],"li",{},[1627,1628,1629],"strong",{},"Shopware 6"," - Die Kern-E-Commerce-Plattform",[1624,1632,1633,1636],{},[1627,1634,1635],{},"ShopBite Storefront"," - Eine moderne Nuxt.js-basierte Benutzeroberfläche",[1624,1638,1639,1642],{},[1627,1640,1641],{},"ShopBite Plugin"," - Erweiterungen für Shopware 6",[1624,1644,1645,1648],{},[1627,1646,1647],{},"Order Printer"," - Drucklösungen für Bestellungen",[1614,1650,101],{"id":1651},"zielgruppe",[1611,1653,1654],{},"ShopBite richtet sich an Gastronomiebetriebe aller Größen:",[1621,1656,1657,1660,1663,1666],{},[1624,1658,1659],{},"Restaurants, Cafés und Bars",[1624,1661,1662],{},"Food-Trucks und Catering-Dienste",[1624,1664,1665],{},"Bäckereien und Konditoreien",[1624,1667,1668],{},"Alle Gastronomiebetriebe, die Online-Bestellungen anbieten möchten",[1614,1670,106],{"id":1671},"vorteile-von-shopbite",[1621,1673,1674,1680,1686,1692,1698],{},[1624,1675,1676,1679],{},[1627,1677,1678],{},"Moderne Technologie",": Headless-Architektur für maximale Flexibilität",[1624,1681,1682,1685],{},[1627,1683,1684],{},"Gastronomie-spezifisch",": Funktionen, die speziell auf die Bedürfnisse der Gastronomie zugeschnitten sind",[1624,1687,1688,1691],{},[1627,1689,1690],{},"Open Source",": Volle Kontrolle über Ihr System",[1624,1693,1694,1697],{},[1627,1695,1696],{},"Erweiterbar",": Einfache Anpassung an individuelle Anforderungen",[1624,1699,1700,1703],{},[1627,1701,1702],{},"Kosteneffizient",": Keine monatlichen Lizenzgebühren für die Kernsoftware",[1614,1705,111],{"id":1706},"nächste-schritte",[1621,1708,1709,1716,1723,1729],{},[1624,1710,1711,1715],{},[1712,1713,14],"a",{"href":1714},"architecture"," - Technische Architektur und Komponenten",[1624,1717,1718,1722],{},[1712,1719,1721],{"href":1720},"shopware\u002Fintro","Shopware Plugin"," - Shopware-spezifische Funktionen",[1624,1724,1725,1728],{},[1712,1726,52],{"href":1727},"storefront\u002Ffirst-steps"," - Benutzeroberfläche einrichten",[1624,1730,1731,1734],{},[1712,1732,1647],{"href":1733},"receipt-printer\u002Fintro"," - Drucklösungen konfigurieren",{"title":130,"searchDepth":98,"depth":98,"links":1736},[1737,1738,1739,1740],{"id":1616,"depth":98,"text":95},{"id":1651,"depth":98,"text":101},{"id":1671,"depth":98,"text":106},{"id":1706,"depth":98,"text":111},"md",{"icon":1743,"sorting":88,"datePublished":1744,"dateModified":1744},"i-lucide-home","2026-01-16",true,null,{"title":10,"description":87},{"loc":11,"lastmod":1744,"changefreq":1749,"priority":1750},"weekly",0.8,"BJlwBrqFqSquZqK1ADv_iCI6FOPiMbkdIESuXeQQacs",1789065425800]