Dokumentation
Einrichtung
Pro Contao-Installation gibt es genau einen Shop. Der Datensatz wird beim ersten Aufruf angelegt, der Name kommt aus dem ersten Startpunkt.
Voraussetzungen
-
PHP ^8.3
-
Contao ^5.7 (Managed Edition)
-
Funktionierender Contao-Cron (siehe Cron)
-
Richtige Zeitzone (siehe Fehlerbehebung):
date.timezonein derphp.inioder in derconfig/config.yaml:contao: localconfig: timeZone: Europe/Berlin
1. Konfiguration

Backend → GratOrder → Konfiguration
| Bereich | Felder |
|---|---|
| Shop | Name, Logo (Terminal, Gast-Mails ##shop_logo_url##, Ersatz für das App-Symbol), Telefon (Hinweis bei Großbestellungen, ##shop_phone##), E-Mail-Adresse (Empfänger der Restaurant-Mails, ##shop_email##) |
| Bestellung | Bestellarten, Mindestbestellwert für Lieferung, Mindestvorlauf (früheste Zeit ab jetzt), letzte Abhol-/Lieferzeit vor Schluss (Standard 15 Min.), Zeitraster (5–30 Min.), Vorbestellung in Tagen (0 = nur heute), Format der Bestellnummer |
| Überlastungsschutz | Küchenlast je Zeitfenster (0 = kein Limit) |
| Bezahlung | Zahlungsarten je Bestellart (nur bar, nur online, bar oder online), SumUp Merchant Code und API-Key (siehe Online-Zahlung) |
| Bestellterminal | Bestellungen müssen angenommen werden, Zeitlimit für die Annahme, Zubereitungszeiten zur Auswahl (z. B. 10,15,20,30,45) |
| Öffnungszeiten | Ein Eintrag je Zeitfenster, Tage ohne Eintrag sind geschlossen |
| Preise und Steuern | Währung, ermäßigter und regulärer Steuersatz |
| E-Mails | Benachrichtigung für eingegangen, angenommen, abgelehnt |
| Design | Layout, Primärfarbe, Schrift auf Primärfarbe, Ecken, GratOrder-Badge (Hinweis mit Link auf gratorder.de: Desktop schwebend unten rechts, mobil am Seitenende) |
| Bondrucker | Druckertyp, IP-Adresse/Host, Port, Papierbreite, Anzahl Bons (siehe Bondrucker) |
| Web-App | installierbar ja/nein, App-Name, Startseite, App-Symbol (siehe Web-App) |
| Status | Bestellungen pausieren; Demo-Modus (rund um die Uhr bestellbar, Öffnungszeiten und Terminal-Status werden ignoriert – nur für Demo- und Testshops) |
| Lizenz | Lizenzschlüssel aus der Lizenzmail, Status der Lizenz, installierte und neueste Version (siehe Lizenz) |
Format der Bestellnummer – Platzhalter: {Y} Jahr (2026), {y} Jahr (26), {m} Monat,
{d} Tag, {n} laufende Nummer, {n:3} mit führenden Nullen. Die Nummer beginnt neu mit der
kleinsten Datumseinheit im Format (täglich bei {d}, monatlich bei {m}, jährlich bei {Y}/{y},
sonst nie). {n} ist Pflicht; ein leeres Feld ergibt den Standard {m}{d}-{n:3}.
| Format | Beispiel |
|---|---|
{m}{d}-{n:3} (Standard) |
1020-004 |
LF-{n} |
LF-1234 |
{y}{m}-{n:4} |
2610-0042 |
Mit Annahme über das Terminal: Ist während der Öffnungszeit seit zwei Minuten kein Terminal online, nimmt der Shop keine Bestellungen an.
2. Speisekarte

Unter GratOrder:
- Größen anlegen (z. B. Klein 26 cm, Groß 33 cm, 0,33 l), optional mit Vorauswahl
- Allergene prüfen, Zusatzstoffe ergänzen
- Optionsgruppen mit ihren Optionen anlegen (z. B. „Pizza-Beläge“ als Extras, max. 6, je Option max. 2×; „Dressing“ als Auswahl)
- Speisekarte: Kategorien mit Küchenlast anlegen, darin die Produkte; Preise je Größe, Optionsgruppen, abwählbare Zutaten, Allergene und Zusatzstoffe zuordnen
Für eine Pizza nach Wahl ein Produkt vom Typ „Selbst zusammenstellen“ anlegen und die Belag-Optionsgruppe zuweisen.
3. Seiten und Frontend-Module
Drei Frontend-Module (Kategorie GratOrder) anlegen und auf je einer Seite einbinden:
| Modul | Typ | Einstellungen |
|---|---|---|
| Bestellshop | gratorder_shop |
Weiterleitungsseite: Checkout-Seite |
| Checkout | gratorder_checkout |
Weiterleitungsseite: Bestätigungsseite; Seite der Speisekarte (Link „Zurück zur Speisekarte“); Datenschutzseite (optional, dann Hinweis mit Link über dem Bestellbutton) |
| Bestellbestätigung | gratorder_confirmation |
– |
| Web-App-Hinweis (optional) | gratorder_webapp |
– (z. B. im Layout im Footer oder auf der Startseite einbinden) |
Checkout- und Bestätigungsseite sollten nicht in der Navigation erscheinen.
4. Benutzer
- Restaurant (Speisekarte pflegen, Bestellungen ansehen): Benutzer anlegen und der Gruppe „GratOrder“ zuweisen
- Tablet: eigener Benutzer in der Gruppe „GratOrder-Terminal“. Benutzer ohne weitere Backend-Module landen nach dem Login direkt im Terminal.
Das Recht für das Terminal steht in Benutzer bzw. Benutzergruppe unter GratOrder-Rechte → Bestellterminal nutzen. Administratoren haben immer Zugriff.
5. Cron
Der Contao-Cron muss jede Minute laufen: beim Hoster einen Cronjob anlegen, der minütlich
https://<domain>/_contao/cron aufruft (oder vendor/bin/contao-console contao:cron). Der Web-Cron
allein läuft nur, wenn Besucher die Seite aufrufen. Wann der Cron zuletzt gelaufen ist, zeigt die
GratOrder-Konfiguration unter Status; nach über 5 Minuten erscheint dort eine Warnung.

Der Job ExpireOrdersCron läuft minütlich und
- lehnt Bestellungen ab, deren Annahmefrist abgelaufen ist (Gast bekommt die Ablehnungs-Mail),
- setzt angenommene und abholbereite Bestellungen der Vortage auf Erledigt (ohne Mail),
- setzt Online-Zahlungen, die nach 30 Minuten nicht abgeschlossen sind, auf Nicht bezahlt.
Abgelaufene Bestellungen werden zusätzlich beim Abruf von Terminal, Bestätigungs- und Statusseite abgelehnt. Ohne Cron bleibt eine Bestellung, bei der keine dieser Seiten offen ist, auf „Wartet auf Annahme“, und der Gast erfährt nichts.