d3-werk / gastgeber
Eigenständiges TYPO3-Gastgeberverzeichnis mit Gastgebern, Unterkunftsarten, Merkmalen, Ortsteilen, Zertifikaten, Filter, Karte, Galerie und SEO.
Requires
- php: >= 8.2 < 8.6
- symfony/console: ^5.4 || ^6.4 || ^7.0
- typo3/cms-backend: ^13.4.20 || ^14.0
- typo3/cms-core: ^13.4.20 || ^14.0
- typo3/cms-extbase: ^13.4.20 || ^14.0
- typo3/cms-fluid: ^13.4.20 || ^14.0
- typo3/cms-frontend: ^13.4.20 || ^14.0
- typo3/cms-install: ^13.4.20 || ^14.0
Suggests
- d3-werk/sitepackage: Für projektspezifische Template- und SCSS-Overrides.
- typo3/cms-seo: Für XML-Sitemaps und erweiterte SEO-Funktionen.
Replaces
- typo3-ter/gastgeber: dev-master
This package is auto-updated.
Last update: 2026-06-09 21:01:20 UTC
README
Eigenständige TYPO3-Erweiterung für ein professionelles Gastgeber- und Unterkunftsverzeichnis.
Architektur
Die Extension arbeitet unabhängig von EXT:news. Gastgeber, Unterkunftsarten, Merkmalsgruppen, Merkmale, Ortsteile und Zertifikate werden in eigenen Tabellen gespeichert:
tx_gastgeber_domain_model_hosttx_gastgeber_domain_model_typetx_gastgeber_domain_model_featuregrouptx_gastgeber_domain_model_featuretx_gastgeber_domain_model_districttx_gastgeber_domain_model_certificate
Frontend-Funktionen
- Gastgeberliste mit linker Filterspalte
- Filter als echte GET-Links mit teilbaren URLs
- Suchfeld über Name, Ort und Beschreibung
- Ansichten: Cards und Liste, zusätzliche Kartenansicht als Bootstrap-Modal
- Icons in Filter, Cards, Listenansicht und Detailansicht
- Sterne-/Zertifikats-Badge oben rechts im Bild
- Detailseite mit großem Hero/Galerie-Layout
- Galerie-Modal für alle Bilder
- Ausstattungs-Modal ab mehr als sechs Merkmalen
- Top-Merkmale direkt unter dem Hero
- Anfragen-/Buchen-Box rechts neben dem Inhalt
- separate Preise-&-Kapazität-Box
- Leaflet/OpenStreetMap-Karte
- JSON-LD für
LodgingBusiness
Änderung: Kartenansicht in der Listenansicht
Der Ansicht-Umschalter der Gastgeberliste zeigt wieder drei Optionen: Cards, Liste und Karte.
Die Kartenoption öffnet jetzt ein Bootstrap-Modal mit der gefilterten Gastgeberkarte. Die einzelnen Gastgeber-Cards enthalten keinen separaten Link Auf Karte mehr. Die Personen-Kurzinfo in der Card wurde ebenfalls entfernt; Preis, Betten und Quadratmeter bleiben erhalten.
Wichtig für die Ausgabe: settings.showMap = 1 ist im Set als Standard gesetzt. Wenn die Karte in einem bestehenden Inhaltselement weiterhin nicht erscheint, das Listen-Plugin einmal im Backend öffnen, Kartenansicht aktivieren prüfen und speichern.
Frontend-Plugins
- Gastgeber: Übersicht / Liste
- Gastgeber: Detailansicht
- Gastgeber: Kartenansicht
- Gastgeber: Teaser
- Gastgeber: Unterkunftsarten-Teaser
- Gastgeber: Filter
Empfohlen ist für normale Gastgeberseiten nur:
1. Gastgeber: Übersicht / Liste
2. Gastgeber: Detailansicht auf separater Detailseite
Das separate Filter-Plugin ist nur für spezielle Einstiegsseiten vorgesehen.
Verbindung Liste → Detailseite
Die Liste hat jetzt im Backend eine echte Seitenauswahl für die Detailseite. Dadurch muss keine UID mehr manuell eingetragen werden.
Empfohlenes Setup:
Seite "Gastgeber / Übersicht"
└── Inhaltselement "Gastgeber: Übersicht / Liste"
├── Datensatz-Ordner / Storage PID = Ordner mit Gastgeber-Datensätzen
└── Detailseite = Seite "Gastgeber / Detail"
Seite "Gastgeber / Detail"
└── Inhaltselement "Gastgeber: Detailansicht"
├── Datensatz-Ordner / Storage PID = gleicher Ordner wie in der Liste
└── Übersichtsseite / Zurück-Link = Seite "Gastgeber / Übersicht"
Die Linkausgabe wurde wie bei etablierten TYPO3-Listen-/Detail-Plugins aufgebaut:
- Wenn in der Listenansicht eine Detailseite gewählt ist, werden Detail-Links gezielt an das Plugin
Gastgeber: Detailansichtauf dieser Seite übergeben. - Wenn keine Detailseite gewählt ist, kann die Listen-, Karten- oder Teaseransicht die Detailaktion als Fallback selbst anzeigen.
- Teaser- und Kartenplugin besitzen ebenfalls eine Detailseiten-Auswahl, damit Links von Startseiten oder Karten sauber zur Detailseite führen.
Für sprechende Detail-URLs liegt ein Beispiel unter:
Configuration/Routes/GastgeberDetail.example.yaml
Der Inhalt kann in die jeweilige Site-Konfiguration übernommen und die UID der Detailseite angepasst werden.
Backend-Pflege
Gastgeber-Datensätze sind redaktionell gegliedert in:
- Allgemein
- Medien
- Adresse / Karte
- Kontakt / Buchung
- Preise / Kapazität
- Ausstattung / Merkmale
- SEO / Suchmaschinen
Wichtig für Redakteure:
- erstes Bild in der Bildergalerie = Hero-Bild
- weitere Bilder erscheinen im Galerie-Modal
- Merkmale werden als eigene Datensätze gepflegt
- jedes Merkmal kann ein Icon oder eine CSS-Iconklasse bekommen
- jedes Merkmal kann für Filter, Cards, Detailseite und Top-Merkmal getrennt geschaltet werden
- Zertifikate/Sterne werden als eigene Datensätze gepflegt
- Koordinaten können manuell gepflegt oder per Geocoding aus der Anschrift ermittelt werden
Installation
composer require d3-werk/gastgeber vendor/bin/typo3 extension:setup vendor/bin/typo3 cache:flush vendor/bin/typo3 cache:warmup
Danach in den Admin Tools die Datenbankstruktur analysieren und übernehmen.
Standarddaten anlegen
vendor/bin/typo3 gastgeber:setup:defaults --pid=123
123 ist die UID des Speicherordners für Gastgeber-Stammdaten.
Empfohlener Seitenaufbau
Gastgeber
├── Übersicht
│ └── Gastgeber: Übersicht / Liste
├── Detail
│ └── Gastgeber: Detailansicht
└── Karte
└── Gastgeber: Kartenansicht
Hinweise
- Die Karte basiert auf Leaflet/OpenStreetMap.
- Externe Kartenkacheln sollten im Projekt datenschutzrechtlich geprüft werden.
- Bootstrap 5 wird für Modals und Buttons erwartet.
- Templates und SCSS können im Sitepackage über TYPO3-Template-Pfade überschrieben werden.
Backend: Listenansicht sauber konfigurieren
Die Listenansicht verwendet eine eigene FlexForm Configuration/FlexForms/List.xml. Es gibt keine Abhängigkeit mehr zu EXT:news und keine News-Felder wie Sortierlogik, Kategorienmodus, Unterkategorien oder News-Pagination.
Für das Inhaltselement Gastgeber: Übersicht / Liste sind nur diese fachlichen Einstellungen relevant:
- Datensatz-Ordner
- Detailseite
- Standardansicht
- Standardsortierung
- Anzahl Gastgeber anzeigen
- Filterspalte anzeigen
- Ansicht-Umschalter anzeigen
- Kartenansicht aktivieren
- Unterkunftsarten vorauswählen
- Merkmalsgruppen im Filter einschränken
- Merkmalslogik
- Nur hervorgehobene Gastgeber anzeigen
Wenn im Backend weiterhin alte News-Felder erscheinen, ist meist noch ein alter TYPO3-Cache aktiv oder ein altes Inhaltselement vom Typ News-Plugin wird bearbeitet. In diesem Fall Cache leeren, das Inhaltselement als Gastgeber: Übersicht / Liste neu auswählen und den Datensatz einmal speichern.
Merkmale in der Detailansicht
In der Gastgeber-Detailansicht werden maximal sechs Merkmale direkt sichtbar ausgegeben. Die Darstellung erfolgt als zweizeiliges 3er-Raster: links das gepflegte Icon, rechts der Merkmaltext. Weitere Merkmale werden über den Button „Weitere Merkmale anzeigen“ in einem Bootstrap-Modal ausgegeben. Im Backend wird die Merkmalsauswahl beim Gastgeber zusätzlich mit einem Icon-Hinweis und der Merkmalsgruppe im Auswahltext unterstützt.
Backend-Beschriftungen / TCA
Alle fachlichen Tabellen der Standalone-Erweiterung besitzen jetzt explizite deutsche Feldbeschriftungen und Hilfetexte in der TCA. Dadurch erscheinen beim Anlegen und Bearbeiten von Gastgebern, Merkmalen, Merkmalsgruppen, Unterkunftsarten, Ortsteilen und Zertifikaten keine technischen Platzhalter wie [title], [slug] oder [description] mehr.
Die Merkmalsauswahl im Gastgeber-Datensatz zeigt im Auswahltext zusätzlich ein kleines Text-Icon und die zugehörige Merkmalsgruppe. Dadurch können Redakteure die Merkmale schneller und sicherer auswählen.
Sterne-Klassifizierung direkt an der Unterkunft
Gastgeber-Datensätze besitzen wieder ein eigenes Feld Sterne-Klassifizierung. Redakteure wählen dort direkt 1 bis 5 Sterne aus und können zusätzlich Superior aktivieren. Diese direkte Auswahl wird in Listen- und Detail-Hero als Badge angezeigt und für JSON-LD starRating genutzt. Die Relation Klassifizierung / Sterne / Zertifikate bleibt zusätzlich für DTV, Bett+Bike oder weitere Prüfsiegel erhalten und dient als Fallback, wenn keine direkte Sterne-Auswahl gepflegt wurde.
Flexible Preise & Kapazität als Tabelle
Der Bereich Preise / Kapazität ist jetzt nicht mehr auf wenige starre Felder beschränkt. Im Gastgeber-Datensatz gibt es zusätzlich die Inline-Tabelle Flexible Preistabelle.
Redakteure können beliebig viele Preiszeilen anlegen, sortieren und bei Bedarf deaktivieren:
- Preiszeile: linke Spalte „Leistung / Bezeichnung“, rechte Spalte „Preis / Beschreibung“
- Zwischenüberschrift: trennt längere Preisblöcke, z. B. „Pferdeboxen“ oder „Ferienwohnungen“
- Hinweis: läuft über beide Spalten, z. B. Kurtaxe, Mindestaufenthalt oder Sonderbedingungen
Damit lassen sich einfache Preislisten wie „Einzelzimmer ab 70 €“ genauso pflegen wie umfangreiche Beschreibungen mit mehrzeiligen Bedingungen für Ferienwohnungen, Hunde, Pferdeboxen oder Zusatzleistungen. Das Feld Preis ab / Kurzpreis bleibt nur noch als optionale Kurzinfo für Cards, Listen und Schnellüberblick erhalten.
Mobile- und Tablet-Optimierung
Die Frontend-Ausgabe wurde für Smartphone und Tablet überarbeitet:
- Die linke Filterspalte wird auf Tablet/Smartphone über einen mobilen Filter-Button ein- und ausgeblendet.
- Der Ansicht-Umschalter bricht sauber um und verursacht keine horizontale Überbreite mehr.
- Listen-Karten stapeln sich auf kleineren Displays sauber untereinander.
- Detail-Hero, Sterne-Badge und Galerie-Button sind für kleine Displays neu positioniert.
- In der Detailansicht erscheint direkt unter dem Hero eine mobile Schnellaktionsleiste für Buchung, E-Mail und Telefon.
- Merkmale, Top-Merkmale, Preistabelle, Kapazitätsboxen, Karte und Modale wurden responsiv nachgeschärft.
- Die flexible Preistabelle wird ab Smartphone-Breite als gestapelte Tabelle ausgegeben, damit lange Preisbeschreibungen lesbar bleiben.
Wichtig: Für den mobilen Filter-Button und die vorhandenen Modale wird Bootstrap-JavaScript benötigt. Im Bootstrap Package ist dies üblicherweise bereits vorhanden.
Detail-Galerie: Desktop-Mosaik
Die Detailansicht zeigt auf Desktop und Tablet-Landscape links das Hauptbild und rechts exakt vier Vorschaubilder aus der Galerie. Die Galerie verwendet eine feste Mosaik-Höhe und ein 2×2-Raster, damit die rechte Bildspalte immer bündig mit dem Hauptbild abschließt. Ab Tablet-Portrait/Smartphone wird die rechte Bildspalte ausgeblendet; alle weiteren Bilder bleiben über den Button „Alle Bilder anzeigen“ im Modal erreichbar.
Eigenes Marker-/Standort-Symbol für die Karte
Die Kartenansicht verwendet ein eigenes SVG-Standardsymbol aus Resources/Public/Icons/map-marker.svg, damit der Standort-Marker nicht von den Leaflet-Standardgrafiken auf externen Pfaden abhängt.
Ein eigenes Symbol kann pro Plugin im Backend-FlexForm-Feld Eigenes Marker-/Standort-Symbol eingetragen werden, z. B.:
/fileadmin/undeloh/karte-marker.svg
Alternativ global per TypoScript:
plugin.tx_gastgeber.settings.mapMarkerIconUrl = /fileadmin/undeloh/karte-marker.svg
plugin.tx_gastgeber.settings.mapMarkerIconWidth = 38
plugin.tx_gastgeber.settings.mapMarkerIconHeight = 46
plugin.tx_gastgeber.settings.mapMarkerIconAnchorX = 19
plugin.tx_gastgeber.settings.mapMarkerIconAnchorY = 46
plugin.tx_gastgeber.settings.mapMarkerPopupAnchorY = -42
Für andere Symbolgrößen müssen Breite, Höhe und Anker passend gesetzt werden. Der Anker ist der Punkt des Bildes, der exakt auf der Koordinate liegen soll.
Webseiten-Link in der Detailansicht
Der Webseiten-Link in der Kontaktbox der Detailansicht wird nicht mehr mit dem generischen Text „Webseite öffnen“ ausgegeben. Stattdessen erscheint der im Gastgeber-Datensatz gepflegte Linkpfad als sichtbarer Linktext. Beispiel: Wird im Feld „Webseite“ https://www.beispiel.de/ferienwohnung eingetragen, erscheint genau dieser Pfad als klickbarer Link.
Sprechende Detail-URLs mit Gastgeber-Slug
Der Datensatz besitzt das Feld URL-Segment / Slug (slug). Damit daraus eine sichtbare Browser-URL wie
/gastgeber/hotel-acht-linden
wird, muss in der TYPO3-Site-Config ein Route-Enhancer gesetzt werden. Die fertige Vorlage liegt unter:
EXT:gastgeber/Configuration/Routes/Gastgeber.yaml
Den passenden Block in config/sites/<site-identifier>/config.yaml einfügen und limitToPages auf die UID der Gastgeber-/Detailseite setzen. Danach Cache leeren.
Sprechende Detail-URLs / Slug im Browserpfad
Wenn der Browser noch eine URL wie diese anzeigt:
/gastgeber?tx_gastgeber_list%5Baction%5D=detail&tx_gastgeber_list%5Bcontroller%5D=Host&tx_gastgeber_list%5Bhost%5D=2&cHash=...
dann ist der Route-Enhancer für das aktuell verwendete Extbase-Plugin nicht aktiv.
Die Zeichenfolge tx_gastgeber_list zeigt, dass der Detailaufruf über das Plugin List läuft.
Dafür muss in der TYPO3-Site-Config der Route-Enhancer GastgeberListDetail verwendet werden.
Die passende Vorlage liegt hier:
EXT:gastgeber/Configuration/Routes/GastgeberListSamePage.example.yaml
Nach dem Einfügen in config/sites/<site-identifier>/config.yaml und Cache-Flush wird aus dem Datensatz-Slug z. B.:
/gastgeber/hotel-acht-linden
Sprechende Gastgeber-URLs ohne sichtbare Extbase-Parameter
Die Gastgeber-Detailansicht kann URLs wie /gastgeber/hotel-acht-linden verwenden. Wenn TYPO3 noch eine alte Extbase-URL wie
/gastgeber?tx_gastgeber_list[action]=detail&tx_gastgeber_list[host]=2&cHash=... erzeugt, wird die Browser-Adresszeile im Frontend automatisch auf den sauberen Slug-Pfad umgestellt.
Zusätzlich ist eine Frontend-Middleware enthalten. Sie löst saubere URLs wie /gastgeber/hotel-acht-linden intern auf das Listen-Plugin auf, damit die Detailansicht auch ohne sichtbare Query-Parameter geladen werden kann. Der empfohlene Weg bleibt weiterhin ein sauber eingerichteter TYPO3 Route-Enhancer in der Site-Config; die Middleware dient als robustes Sicherheitsnetz für bestehende Installationen.
Die Listenansicht entfernt leere Standardparameter wie tx_gastgeber_list[action]=list, leere Suche und view=cards aus der Adresszeile, so dass bei der Rückkehr zur Liste wieder /gastgeber angezeigt wird.