---
title: "Frontend output"
manual: "TYPO3 EXT:thuecat"
version: "main"
permalink: "https://docs.typo3.org/permalink/werkraummedia/thuecat:frontend-output@main"
source: "Integration/FrontendOutput/Index.rst"
rendered: "2026-10-09T11:47:03+00:00"
---

-   [Plugin settings](https://docs.typo3.org/permalink/werkraummedia/thuecat:plugin-settings@main)
-   [Content element example](https://docs.typo3.org/permalink/werkraummedia/thuecat:content-element-example-1@main)
-   [Caching](https://docs.typo3.org/permalink/werkraummedia/thuecat:caching@main)
-   [Detail Page Sections](https://docs.typo3.org/permalink/werkraummedia/thuecat:detail-page-sections@main)

# Frontend output {#frontend-output}

EXT:thuecat registers Extbase controller actions and ships template stubs, but **no content
elements**. You define the content elements in your own extension or sitepackage and point them at
the registered plugins, so rendering stays under your control.

## Plugins and templates {#plugins-and-templates}

The extension name is `ThueCat`. It registers six plugins, four for tourist attractions and two
for trails. Each plugin renders one template. List plugins render each item through the `ListItem`
template of their record kind and cache it on its own, so an item shown in several lists is rendered
once. See [Caching](https://docs.typo3.org/permalink/werkraummedia/thuecat:frontend-output-caching@main).

### Tourist attractions {#tourist-attractions}

| Plugin name | Purpose | Template | FlexForm settings |
| --- | --- | --- | --- |
| `TouristAttractionList` | Paginated list of attractions, limited to the storage folders in its `pages` field where set, refined by the search-and-filter form on the same page. With an editor preset it becomes a filtered list, see [Filtered list](https://docs.typo3.org/permalink/werkraummedia/thuecat:filtered-list@main). | `List` | optional preset: `towns`, `categories`, `keywords`, `petsAllowed`, `isAccessibleForFree`, `publicAccess`. Optional overrides of the [Site settings](https://docs.typo3.org/permalink/werkraummedia/thuecat:site-settings@main): `itemsPerPage`, `page.pid.thuecat_attraction_show`. |
| `TouristAttractionListSelected` | Fixed set of attractions picked by the editor, in the picked order. No filtering, no pagination. | `SelectedList` | `selectedRecords` |
| `TouristAttractionSearch` | Search-and-filter form. Submits into the list plugin on the same page, or to the configured search page. | `SearchForm` | none |
| `TouristAttractionShow` | Detail view of one attraction, taken from the URL or pinned by the editor. | `Show` | optional `selectedRecord` |

### Trails {#trails}

| Plugin name | Purpose | Template | FlexForm settings |
| --- | --- | --- | --- |
| `TrailListSelected` | Fixed set of trails picked by the editor, in the picked order. | `SelectedList` | `selectedRecords` |
| `TrailShow` | Detail view of one trail, taken from the URL or pinned by the editor. | `Show` | optional `selectedRecord` |

Trails have no filterable list and no search form.

## Required pages {#required-pages}

The plugins link to each other across pages, but they cannot discover those pages on their own. Set
up the following pages once and feed their uids into the site configuration, see [Site settings](https://docs.typo3.org/permalink/werkraummedia/thuecat:site-settings@main):

-   **Attraction detail page** -- carries the attraction detail content element; target for links to a
    single attraction (`thuecat_attraction_show`).
-   **Trail detail page** -- carries the trail detail content element; target for links to a single
    trail (`thuecat_trail_show`).
-   **Search result page** -- carries a list content element; search forms on pages without a list
    submit here (`thuecat_attraction_search`). See [Search and list on one page](https://docs.typo3.org/permalink/werkraummedia/thuecat:search-and-list-on-one-page@main).
-   **Storage folder** -- where the import configuration writes the records (`storagePid`). Not a
    site setting: a list content element can be narrowed to it through its `pages` field, and
    left empty it is not limited to any storage page.

## Site settings {#frontend-output-site-settings}

Provide a site set that maps site settings onto the plugin configuration and include it in your
site. Fill in the page ids under **Settings** in the site configuration.

**EXT:myextensions/Configuration/Sets/\<YourSet>/settings.definitions.yaml**

```yaml
settings:
  thuecat.pois.pid_show:
    label: 'Detail Page for Tourist Attractions'
    description: 'The page providing the detail pages for tourist attractions'
    category: 'page.pids'
    type: 'int'
    default: 0
  thuecat.pois.pid_search:
    label: 'Search Result Page for Tourist Attractions'
    description: 'The page providing the list of tourist attractions, used as target for search form submissions'
    category: 'page.pids'
    type: 'int'
    default: 0
  thuecat.trails.pid_show:
    label: 'Detail Page for Trails'
    description: 'The page providing the detail pages for trails'
    category: 'page.pids'
    type: 'int'
    default: 0
  thuecat.settings.itemsPerPage:
    label: 'Tourist Attractions per Page'
    description: 'Number of tourist attractions shown per page in the list view'
    category: 'list'
    type: 'int'
    default: 20
```

**EXT:myextension/Configuration/Sets/MySet/setup.typoscript**

```typoscript
plugin.tx_thuecat.settings {
    page.pid {
        thuecat_attraction_show = {$thuecat.pois.pid_show}
        thuecat_attraction_search = {$thuecat.pois.pid_search}
        thuecat_trail_show = {$thuecat.trails.pid_show}
    }
    itemsPerPage = {$thuecat.settings.itemsPerPage}
}
```

## Content elements {#content-elements}

Register one content element per plugin in your own extension or sitepackage, for example with
[TYPO3 Content Blocks](https://docs.typo3.org/p/friendsoftypo3/content-blocks/main/en-us/Index.html#start). Each content element wires its `CType` to a plugin of the `ThueCat`
extension.

Define one Extbase plugin object carrying the `ThueCat` extension name, once, in your site set.
Each content element copies it and names its plugin. A dedicated object keeps other extensions that
wire their own plugins into content elements on the same site from overwriting the extension name:

**EXT:myextension/Configuration/Sets/MySet/setup.typoscript**

```typoscript
lib.myvendorThuecatPlugin = EXTBASEPLUGIN
lib.myvendorThuecatPlugin {
    extensionName = ThueCat
}
```

**EXT:myextension/ContentBlocks/ContentElements/attraction-list-selected/setup.typoscript**

```typoscript
tt_content.myvendor_attractionlistselected =< lib.contentBlock
tt_content.myvendor_attractionlistselected {
    20 =< lib.myvendorThuecatPlugin
    20 {
        pluginName = TouristAttractionListSelected
    }
}
```

A list content element can be narrowed to the storage folder through its `pages` field.

A full, ready-to-use content element definition is shown in [Content element example](https://docs.typo3.org/permalink/werkraummedia/thuecat:content-element-example@main).

## Templates {#templates}

The shipped stubs under `EXT:thuecat/Resources/Private/Templates/` are registered at
`templateRootPaths.10`. Override them by adding a higher index:

**EXT:myextension/Configuration/Sets/ThuecatAttraction/setup.typoscript**

```typoscript
plugin.tx_thuecat.view {
    templateRootPaths.20 = EXT:my_extension/Resources/Private/Templates/
    partialRootPaths.20 = EXT:my_extension/Resources/Private/Partials/
    layoutRootPaths.20 = EXT:my_extension/Resources/Private/Layouts/
}
```

The templates are

-   `TouristAttraction/List`
-   `TouristAttraction/ListItem` \- one list item, cached on its own, see
    [Caching](https://docs.typo3.org/permalink/werkraummedia/thuecat:frontend-output-caching@main)
-   `TouristAttraction/SelectedList`
-   `TouristAttraction/SearchForm`
-   `TouristAttraction/Show`
-   `Trail/ListItem` \- one list item, cached on its own, see [Caching](https://docs.typo3.org/permalink/werkraummedia/thuecat:frontend-output-caching@main)
-   `Trail/SelectedList`
-   `Trail/Show`

## Search and filter {#search-and-filter}

### Search and list on one page {#search-and-list-on-one-page}

The search-and-filter form adapts to what shares its page:

-   **With a list (plain or filtered) on the page** the form posts to the same page and the list
    re-renders with the result.
-   **Without a list on the page** the form targets the configured search result page
    (`page.pid.thuecat_attraction_search`).
-   **On a filtered list** the preset fields are not shown in the search form, but rendered as hidden
    fields to preserve the pre-selection. The visitor refines the remaining fields but cannot widen
    past the preset.

After a search the form re-populates with the submitted values, so the visitor keeps their input.

### Filtered list {#filtered-list}

A filtered list is the list plugin with a preset in its FlexForm, for example a fixed set of towns.
Visitors refine within the preset but never widen it. The preset fields are described in
[Presets](https://docs.typo3.org/permalink/werkraummedia/thuecat:frontend-output-plugin-settings-presets@main).
