---
title: "Meeting venues"
manual: "TYPO3 EXT:thuecat"
version: "6.2"
permalink: "https://docs.typo3.org/permalink/werkraummedia/thuecat:frontend-output-meeting-venues@6.2"
source: "Integration/FrontendOutput/MeetingVenues.rst"
rendered: "2026-11-10T08:39:12+00:00"
---

# Meeting venues {#frontend-output-meeting-venues}

Conference hotels and meeting and congress locations are tourist attractions of the record type
`meeting_venue`. They appear in every attraction list, render through the attraction templates,
and carry the meeting data and meeting rooms on top.

**On this page**

-   [Record type](https://docs.typo3.org/permalink/werkraummedia/thuecat:record-type@6.2)
-   [Templates](https://docs.typo3.org/permalink/werkraummedia/thuecat:templates@6.2)
-   [Venue data](https://docs.typo3.org/permalink/werkraummedia/thuecat:venue-data@6.2)
-   [Meeting rooms](https://docs.typo3.org/permalink/werkraummedia/thuecat:meeting-rooms@6.2)

## Record type {#frontend-output-meeting-venues-record-type}

Every attraction carries `{attraction.recordType}`: `attraction` or `meeting_venue`. A
meeting venue is a `MeetingVenue` model, a subclass of `TouristAttraction`, so every getter of
an attraction works for it too. Lists can be restricted to record types, see
[Record types](https://docs.typo3.org/permalink/werkraummedia/thuecat:frontend-output-plugin-settings-record-types@6.2).

## Templates {#frontend-output-meeting-venues-templates}

There is no template of its own. The attraction templates render venue output inside a record type
condition, through partials:

**EXT:my_extension/Resources/Private/Templates/TouristAttraction/Show.fluid.html**

```html
<f:if condition="{attraction.recordType} == 'meeting_venue'">
    <f:render partial="TouristAttraction/MeetingVenue" arguments="{venue: attraction}" />
    <f:render partial="TouristAttraction/MeetingRoomTable" arguments="{rooms: attraction.meetingRoomTable}" />
    <f:render partial="TouristAttraction/Venue/MeetingRoomDetails" arguments="{rooms: attraction.meetingRoomTable}" />
    <f:render partial="TouristAttraction/Venue/Lodging" arguments="{venue: attraction}" />
</f:if>
```

The stub `TouristAttraction/Show` calls every venue partial under
`Partials/TouristAttraction/Venue/`; `TouristAttraction/ListItem` calls
`TouristAttraction/MeetingVenueListItem`. A template override that lacks the condition renders
a venue like any other attraction.

## Venue data {#frontend-output-meeting-venues-model}

The venue fields come in groups, one partial each: meeting, lodging, gastronomy, visit, building,
links, texts, relations, media and inline parking facilities. Some getters prepare the stored value:

-   **`getMeetingFacilityMembers()` and the other `get…Members()` getters**

    The stored list as an array. An enum member is its ontology name, translated by the key
    `content.<field>.<member>` in `locallang.xlf`; see `Venue/Fact/Members`.

-   **`getDistances()`**

    The distances that are set, keyed `airport`, `cityCenter`, `fair`, `freeway` and
    `iceStation`. Each is an array of `value` and `unit`: kilometres from 1000 metres on,
    metres below.

-   **`getAdditionalType()`**

    The ThueCat type URI of the venue, for structured data.

## Meeting rooms {#frontend-output-meeting-venues-rooms}

`getMeetingRooms()` returns the rooms the venue names, in upstream order.
`getMeetingRoomTable()` returns every room once: each room of the venue, followed by the rooms
reached only through it, such as the parts of a divisible hall. Render the room table and the room
details from it; templates need no graph work.

Meeting rooms have no detail page. The stub room table links each room to its details further down
the page, at the anchor `#meeting-room-<uid>`.

The detail page cache is tagged with the rooms it rendered, so an import changing a room refreshes
the venue page.
