Skip to main content

HTML-Seitenstruktur

Minimale Seitenstruktur mit Header, optionaler Sidebar und einem Widget im Hauptbereich.
  • Das Script wird einmal im <head> geladen.
  • a-login-button und a-cart-modal-button gehören in den Header, damit sie auf allen Seiten sichtbar bleiben.
  • Ersetze das Panel durch ein Seiten-Widget mit fullscreen="true" und nav-height, wenn die Buchung die gesamte Viewport-Höhe füllen soll (siehe Ganzseitige Widgets weiter unten).

Ganzseitige Widgets

Seiten-Widgets eignen sich, wenn das Widget den Hauptinhalt der Seite darstellt. Seiten-Widgets:
  • a-organization-page
  • a-organization-map
  • a-organization-calendar
  • a-resource-page
  • a-resource-map
  • a-resource-calendar
  • a-service-page
  • a-subscription-page
  • a-package-page
  • a-my-bookings

Empfohlene Integration für ganzseitige Layouts

Verwende fullscreen="true", damit das Widget die verfügbare Viewport-Höhe ausfüllt. Wenn deine Website einen festen Header hat, übergib zusätzlich nav-height, damit das Widget nicht darunter gerendert wird.
Hinweise:
  • fullscreen="true" entspricht height: 100vh.
  • nav-height ändert das auf calc(100vh - nav-height).
  • Wenn du height setzt, wird die automatische Größenanpassung deaktiviert und der iframe hat eine feste Höhe.
  • Für *-page, Map-, Kalender- und a-my-bookings-Widgets sind ganzseitige Layouts in der Regel die sauberste Integration.

Organization-Map und Organization-Kalender

Diese sind Seiten-Widgets, keine Modal-Buttons. Behandle sie wie einen vollständigen Seitenbereich.
Verwende die Organization-Map, wenn die Karte die primäre Benutzeroberfläche ist. Verwende den Organization-Kalender, wenn die Verfügbarkeitsnavigation im Vordergrund steht. Wenn du stattdessen den vollständigen Explore-Flow möchtest, nimm a-organization-page.

Panels

Booking-Panels sind bewusst kompakt gehalten und sperren die Navigation. Panel-Widgets:
  • a-resource-booking-panel
  • a-service-booking-panel
Wichtiges Verhalten:
  • Panels verwenden immer dynamische Höhe.
  • Externe height- und fullscreen-Werte werden ignoriert.
  • Panels sind dazu gedacht, den Buchungsfluss in dein eigenes Seitenlayout einzubetten.

Externe Zahlungen im Widget

Wenn Kund:innen im eingebetteten Checkout eine Zahlungsmethode wählen, die anny verlässt (PayPal, iDEAL, giropay, Sofort, Bancontact, EPS, Przelewy24, TWINT), öffnet das Widget die Zahlungsseite in einem zentrierten Popup. Karte und SEPA bleiben im Widget (Stripe-Overlay). Der Hinweis im Checkout lautet: Deine Buchung muss online bezahlt werden. Dafür wird sich ein neues Fenster öffnen in dem du die Bezahlung durchführen kannst. Danach wird sich das Fenster automatisch schließen. Blockiert der Browser das Popup, läuft die Zahlung im Widget weiter. Das Host-Dokument der Website wird nicht navigiert.

Login-Button und Warenkorb-Button

Diese zwei Komponenten werden unter Organisation → Einstellungen → Buchungsseite → Globale Komponenten konfiguriert. Sie sind als gemeinsame Steuerelemente gedacht, die sich in der Regel im Site-Header oder in einer fixen Navigationsleiste befinden.

Login-Button

Verwende a-login-button, wenn du ein gemeinsames Login/Logout-Element benötigst, das mit der Widget-Session synchron bleibt.
Verhalten:
  • Lädt einen eigenen Login-iframe.
  • Wechselt automatisch in den eingeloggten Avatar-Zustand.
  • Sendet Auth-Änderungen weiter, damit benachbarte Widgets ihren Authentifizierungszustand aktualisieren.
Gute Platzierungen:
  • Haupt-Site-Header
  • Mobile Navigation Drawer
  • Obere Leiste auf Buchungs-Landingpages

Warenkorb-Button

Verwende a-cart-modal-button, wenn Nutzer Artikel aus Booking-Widgets hinzufügen und später auschecken sollen.
Verhalten:
  • Zeigt eine Live-Badge mit der Artikelanzahl.
  • Bleibt mit benachbarten Widgets auf derselben Seite synchron.
  • Öffnet den Checkout in einem Modal-Overlay.
Häufige Kombinationen:
  • a-resource-booking-panel zusammen mit a-cart-modal-button
  • Mehrere Booking-Widgets auf einer Seite mit einem gemeinsamen Warenkorb-Button

Events und Tracking

Die meisten Embed-Widgets leiten Buchungs-Lifecycle-Events als DOM Custom Events weiter. Trifft für alles aus den Login-Button zu. Unterstützte Event-Namen:
  • view-page
  • add-to-cart
  • start-checkout
  • complete-checkout
Häufige Felder im Event-Payload:
  • event_name
  • value
  • gross_value
  • tax
  • currency
  • transaction_id
  • items
Beispiel:
GA4-Beispiel:
Hinweise:
  • a-login-button und a-cart-modal-button sind Hilfs-Widgets und senden keine Buchungs-Events.
  • Seiten-Widgets, Maps, Kalender, Booking-Panels und checkout-orientierte Seiten senden Buchungs-Events.
  • Subscription- und Package-Widgets senden checkout-fokussierte Events. In der Praxis sind view-page, start-checkout und complete-checkout die relevantesten.

UTM-Parameter und Click-IDs

Für Attribution musst du nichts weiter tun. Wenn ein Widget lädt, liest es den Query-String der übergeordneten Seiten-URL aus und leitet diese Parameter automatisch in den eingebetteten iframe weiter: Wenn ein Nutzer also über ?utm_campaign=fruehling&gclid=abc123 auf deine Seite kommt, trägt das Widget diese Werte durch den gesamten Buchungsfluss – Conversion-Tracking funktioniert ohne zusätzliche Konfiguration. Es ist kein HTML-Attribut erforderlich – die Weiterleitung erfolgt automatisch bei jedem Widget-Ladevorgang.

Start- und Enddatum

Die meisten Widgets akzeptieren start (und manchmal end), um Kalender oder Karte auf einen bestimmten Datumsbereich vorzunavigieren. ISO-8601-Datumsstring – exaktes Datum:
Relativer Schlüsselwert – wird zum Render-Zeitpunkt aufgelöst:
Relative Werte werden überall unterstützt – außer bei a-resource-calendar und a-organization-calendar, die ISO 8601 erfordern. end erwartet immer einen ISO-8601-Datumsstring.

Anpassungsoptionen nach Widget-Typ

Dieser Abschnitt dokumentiert die öffentlichen HTML-Attribute. Admin-generierte Snippets decken in der Regel die wichtigsten davon bereits ab.

Gemeinsame Attribute für Embed-Widgets

Gilt für Seiten-Widgets und Panel-Widgets. Nicht anwendbar auf Button-Widgets. Alle Embed-Widgets akzeptieren zusätzlich die Design-Attribute aus WIDGET_DESIGNING.md.

Organization-Widgets

a-organization-page

Hinweis:
  • Die Option „Kalender-Board” im Admin entspricht calendar-view="list".

a-organization-calendar

a-organization-map

Ressource-Widgets

a-resource-page

a-resource-calendar

a-resource-map

a-resource-booking-panel

Service-Widgets

a-service-page

a-service-booking-panel

Subscription- und Package-Widgets

a-subscription-page

a-subscription-button

a-package-page

a-package-button

Button-Widgets

Gilt für:
  • a-organization-button
  • a-resource-button
  • a-service-button
  • a-subscription-button
  • a-package-button
  • a-modal-button
  • a-cart-modal-button

Gemeinsame Modal-Attribute

Trigger-Attribute für Entity-Buttons

Gilt für:
  • a-organization-button
  • a-resource-button
  • a-service-button
  • a-subscription-button
  • a-package-button
a-modal-button ist anders:
  • kein label-Prop
  • keine eingebauten Trigger-Styling-Props
  • verwende ein eigenes Element im Slot als Trigger

Eigener Trigger (Slot)

Alle Button-Widgets akzeptieren einen Standard-Slot, der den eingebauten Trigger ersetzt. Nutze das, wenn du den Trigger selbst gestalten oder ein anderes Element als Button verwenden möchtest.
Wenn ein Slot verwendet wird, werden label, button-background, button-text und button-width ignoriert. Klick- und Tastatursteuerung werden weiterhin vom Widget-Wrapper übernommen.

a-resource-button

a-service-button

a-organization-button

a-modal-button

Verwende diesen Button, wenn du einen eigenen Modal-Trigger ohne entity-spezifische Button-Komponente benötigst.

Hilfs-Widgets

a-cart-modal-button

a-login-button

a-my-bookings

Hinweis:
  • a-my-bookings erfordert immer eine Authentifizierung. should-login ist nicht verfügbar, da Login obligatorisch ist.

Externe Zahlung im eingebetteten Checkout

Wenn Kund:innen im Widget mit einer externen Zahlungsmethode bezahlen (zum Beispiel PayPal, iDEAL, Giropay, Sofort, Bancontact, EPS, Przelewy24 oder TWINT), öffnet anny die Zahlungsseite in einem eigenen, zentrierten Fenster. Deine Website und das Widget bleiben geöffnet, der Checkout behält die eingegebenen Daten. Karten- und SEPA-Zahlungen bleiben im Widget. Wird das Zahlungsfenster vom Browser blockiert, läuft die Zahlung stattdessen im Widget selbst weiter. Schließt jemand das Fenster, bevor die Zahlung fertig ist, erscheint der Hinweis, dass die Zahlung nicht durchgeführt werden konnte.

Empfehlungen

  • Nutze zuerst das Admin-generierte Snippet und verfeinere es manuell nur wenn nötig.
  • Verwende Seiten-Widgets für dedizierte Buchungsseiten.
  • Verwende Panels für redaktionelle Seiten rund um den Buchungsfluss.
  • Verwende Button-Widgets, wenn die Buchung erst nach einem Klick sichtbar sein soll.
  • Platziere a-login-button und a-cart-modal-button an stabilen, gut sichtbaren Stellen im UI.
  • Bevorzuge drawer für Desktop-seitige Checkout-Flows und fullscreen für mobile Erlebnisse.