---
title: Benutzerdefinierte Seiteneigenschaften
description: Globale, frei konfigurierbare Felder, die jeder Seite zugewiesen werden können.
navIcon: "🏠"
---

Benutzerdefinierte Seiteneigenschaften (BSE) sind frei konfigurierbare Felder, die global angelegt werden und anschließend für jede beliebige Seite im CMS befüllt werden können. Sie ermöglichen es, strukturierte Zusatzinformationen an Seiten zu hängen – zum Beispiel ein Erscheinungsdatum, eine Kategorienzuordnung oder ein boolesches Flag.

## Verwaltung

BSE werden unter **Redaktion → Eigenschaften** verwaltet. Dort können neue Eigenschaften angelegt, bestehende bearbeitet und nicht mehr benötigte gelöscht werden.

![Übersicht der benutzerdefinierten Seiteneigenschaften mit Name, Beschreibung und Feldtyp](../assets/img/redaktion/eigenschaften-liste.png)

Beim Löschen einer BSE werden alle seitenbezogenen Zuweisungen (d. h. die gespeicherten Werte aller Seiten) automatisch mit entfernt.

## Felder beim Anlegen

| Feld | Pflicht | Beschreibung |
|------|---------|--------------|
| **Name** | Ja | Interner Bezeichner. Wird automatisch zu einem URL-freundlichen Slug umgewandelt (Kleinbuchstaben, Bindestriche). Dieser Slug ist der Schlüssel im Template-Array. |
| **Beschreibung** | Ja | Wird im Seiteneditor als Label des Eingabefelds angezeigt. |
| **Feldtyp** | Ja | Legt den Datentyp und das Eingabewidget fest (siehe unten). |
| **Standardwert** | Nein | Wird verwendet, wenn eine Seite keinen eigenen Wert für diese BSE hat. |
| **Optionen (JSON)** | Nein | Optionales JSON-Objekt für Feldtypen, die zusätzliche Konfiguration benötigen. Format: `{"key": "Label"}` |

![Dialog zum Anlegen einer benutzerdefinierten Seiteneigenschaft mit Name, Beschreibung und Feldtyp-Auswahl](../assets/img/redaktion/eigenschaften-erstellen.png)

:::note
Der **Name** wird beim Speichern slugifiziert. Aus „Mein Feld" wird also z. B. `mein-feld`. Dieser Slug ist später der Schlüssel für den Template-Zugriff.
:::

## Feldtypen

### Text

Einfaches Texteingabefeld.

- **Rückgabewert im Template:** `string` (oder `null`, wenn leer)
- **Standardwert-Beispiel:** `Standardtitel`

### Zahl

Numerisches Eingabefeld.

- **Rückgabewert im Template:** `int`
- **Standardwert-Beispiel:** `42`

### Checkbox

Schalter (Toggle), der einen Ja/Nein-Wert speichert.

- **Rückgabewert im Template:** `bool` (`true` / `false`)
- **Standardwert:** Muss `1` oder `true` sein, um standardmäßig aktiviert zu sein. Leerlassen bedeutet `false`.

### Datum

Datumsauswahl (ohne Uhrzeit).

- **Rückgabewert im Template:** `int` (Unix-Timestamp in UTC)
- **Standardwert-Beispiel:** Ein Unix-Timestamp, z. B. `1700000000`

### Datum & Uhrzeit

Datums- und Zeitauswahl.

- **Rückgabewert im Template:** `int` (Unix-Timestamp in UTC)
- **Standardwert-Beispiel:** Ein Unix-Timestamp

### Kategorie

Dropdown zur Auswahl einer CMS-Kategorie.

- **Rückgabewert im Template:** `int` (Kategorie-ID)
- **Standardwert-Beispiel:** Die numerische ID der gewünschten Standardkategorie

## Verwendung in Templates

Im Seitentemplate sind alle BSE-Zuweisungen über das assoziative Array `customPagePropertyAssignments` zugänglich. Der Schlüssel ist der **Name (Slug)** der jeweiligen BSE.

```twig
{# Einfacher Textwert #}
{{ Page.customPagePropertyAssignments['mein-feld'] }}

{# Wert mit Fallback auf leer #}
{{ Page.customPagePropertyAssignments['mein-feld']|default('') }}
```

### Beispiele nach Feldtyp

**Text**
```twig
<p>{{ Page.customPagePropertyAssignments['untertitel']|default('') }}</p>
```

**Zahl**
```twig
<span>{{ Page.customPagePropertyAssignments['lesezeit'] }} Min.</span>
```

**Checkbox**
```twig
{% if Page.customPagePropertyAssignments['ist-featured'] %}
  <span class="badge bg-primary">Featured</span>
{% endif %}
```

**Datum / Datum & Uhrzeit**

Der Wert ist ein Unix-Timestamp. Zur Anzeige mit der Twig-Funktion `parseTimestamp` formatieren:

```twig
{{ parseTimestamp(Page.customPagePropertyAssignments['veroeffentlicht-am']) }}
```

Oder für benutzerdefinierte Formatierung über `parseTime`:

```twig
{{ parseTime(Page.customPagePropertyAssignments['veroeffentlicht-am'], 'UTC').format('d.m.Y') }}
```

**Kategorie**

```twig
{% set kategorie = getCrispyCategory(Page.customPagePropertyAssignments['kategorie']) %}
{% if kategorie %}
  <span>{{ kategorie.name }}</span>
{% endif %}
```

## Seiteneditor

Im Seiteneditor erscheinen alle angelegten BSE automatisch im Abschnitt **Benutzerdefinierte Seiteneigenschaften**, unterhalb des Inhaltsbereichs. Felder ohne Seitenwert zeigen den konfigurierten Standardwert vor. Änderungen werden beim Speichern der Seite übernommen und im Audit-Log als Diff festgehalten.

![Abschnitt „Benutzerdefinierte Seiteneigenschaften" im Seiteneditor mit einem Textfeld](../assets/img/redaktion/seiten-editor-eigenschaften-feld.png)
