PHPackages                             d3-werk/gastgeber - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. d3-werk/gastgeber

ActiveTypo3-cms-extension[Utility &amp; Helpers](/categories/utility)

d3-werk/gastgeber
=================

Eigenständiges TYPO3-Gastgeberverzeichnis mit Gastgebern, Unterkunftsarten, Merkmalen, Ortsteilen, Zertifikaten, Filter, Karte, Galerie und SEO.

065↓88.9%PHP

Since Jun 9Pushed 1mo agoCompare

[ Source](https://github.com/d3werk/gastgeber)[ Packagist](https://packagist.org/packages/d3-werk/gastgeber)[ RSS](/packages/d3-werk-gastgeber/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependenciesVersions (1)Used By (0)

Gastgeber
=========

[](#gastgeber)

Eigenständige TYPO3-Erweiterung für ein professionelles Gastgeber- und Unterkunftsverzeichnis.

Architektur
-----------

[](#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_host`
- `tx_gastgeber_domain_model_type`
- `tx_gastgeber_domain_model_featuregroup`
- `tx_gastgeber_domain_model_feature`
- `tx_gastgeber_domain_model_district`
- `tx_gastgeber_domain_model_certificate`

Frontend-Funktionen
-------------------

[](#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-&amp;-Kapazität-Box
- Leaflet/OpenStreetMap-Karte
- JSON-LD für `LodgingBusiness`

Änderung: Kartenansicht in der Listenansicht
--------------------------------------------

[](#ä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
----------------

[](#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
------------------------------

[](#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: Detailansicht` auf 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
--------------

[](#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
------------

[](#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
---------------------

[](#standarddaten-anlegen)

```
vendor/bin/typo3 gastgeber:setup:defaults --pid=123
```

`123` ist die UID des Speicherordners für Gastgeber-Stammdaten.

Empfohlener Seitenaufbau
------------------------

[](#empfohlener-seitenaufbau)

```
Gastgeber
├── Übersicht
│   └── Gastgeber: Übersicht / Liste
├── Detail
│   └── Gastgeber: Detailansicht
└── Karte
    └── Gastgeber: Kartenansicht

```

Hinweise
--------

[](#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
-------------------------------------------

[](#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

[](#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
----------------------------

[](#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
-----------------------------------------------

[](#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 &amp; Kapazität als Tabelle
-------------------------------------------

[](#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
------------------------------

[](#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

[](#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
---------------------------------------------

[](#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

[](#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
-----------------------------------------

[](#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//config.yaml` einfügen und `limitToPages` auf die UID der Gastgeber-/Detailseite setzen. Danach Cache leeren.

Sprechende Detail-URLs / Slug im Browserpfad
--------------------------------------------

[](#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//config.yaml` und Cache-Flush wird aus dem Datensatz-Slug z. B.:

```
/gastgeber/hotel-acht-linden

```

Sprechende Gastgeber-URLs ohne sichtbare Extbase-Parameter
----------------------------------------------------------

[](#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.

###  Health Score

22

—

LowBetter than 21% of packages

Maintenance60

Regular maintenance activity

Popularity8

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/143930485?v=4)[d3Werker](/maintainers/d3Werker)[@d3werker](https://github.com/d3werker)

---

Top Contributors

[![d3werk](https://avatars.githubusercontent.com/u/44762731?v=4)](https://github.com/d3werk "d3werk (120 commits)")

### Embed Badge

![Health badge](/badges/d3-werk-gastgeber/health.svg)

```
[![Health](https://phpackages.com/badges/d3-werk-gastgeber/health.svg)](https://phpackages.com/packages/d3-werk-gastgeber)
```

###  Alternatives

[typo3/cms-styleguide

TYPO3 extension to showcase TYPO3 Backend capabilities

106760.3k34](/packages/typo3-cms-styleguide)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
