# Seiten, Layouts, Navigation, Variablen und Weiterleitungen im Total.js CMS

> Wie das CMS aus einem Layout und einer Seite eine öffentliche Adresse macht: das Element mit der id CMS, die Felder einer Seite, Variablen, mit Tangular geschriebene Navigationsskripte, Weiterleitungen, die Sitemap und welche Seiten sichtbar sind.

Framework: cms
Product: CMS (cms@8071e48)
Language: de
Content-SHA256: 564589d11f1df3e6b7f51d76a86428ebe34d210509ae7dc6e354bb2f3475ca06
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

Das CMS speichert das HTML jedes Layouts und jeder Seite als Datei und ihre Daten (Adresse, Titel, Layout...) in den Metadaten der Website. Eine Anfrage an die öffentliche Website findet eine Seite anhand ihrer Adresse und rendert sie in ihrem Layout.

## Layouts

Ein **Layout** ist ein vollständiges HTML-Dokument. Das Element mit `id="CMS"` markiert die Stelle, an der der Inhalt der Seite steht:

```html
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
</head>
<body>
	<header>$SITE</header>
	<div id="CMS"></div>
	<footer>@{year}</footer>
</body>
</html>
```

`Layouts/save` nimmt `name`, `icon`, `color`, `html` und eine Liste von `scripts` entgegen, die jeder Seite des Layouts hinzugefügt werden. Im HTML wird `$NAME` durch die **Variable** dieses Namens ersetzt (siehe unten) und `@{year}` durch das aktuelle Jahr.

## Seiten

Eine **Seite** hat einen `name`, eine `layoutid` (Pflicht), eine Adresse `url` und optional `title`, `description`, `keywords`, `language`, `parentid`, `icon`, `color` sowie die Flags `disabled`, `auth`, `pinned` und `nocache`. Ihr HTML (gespeichert mit `pages_save_html`) steht im Element `id="CMS"`.

- Lassen Sie `url` leer, erzeugt das CMS eine aus dem Namen: `Hello World` wird zu `/hello-world/`, und unter einer Elternseite beginnt die Adresse mit der Adresse des Elternteils.
- Die öffentliche Website liefert eine Seite aus, wenn ihre `url` der angefragten Adresse entspricht, sie nicht `disabled` ist und ihre `language`, falls gesetzt, der Sprache der Anfrage entspricht.
- Die Antwort erhält `<title>` (den `title` oder den `name`, gefolgt vom Namen der Website bei jeder Seite außer `/`), die Beschreibung und die Schlüsselwörter, ein Skript, das die Besuche zählt (`/visitors.js`), und den Stil der Widgets, die die Seite verwendet.
- `auth`-Seiten werden nur einem angemeldeten Besucher ausgeliefert. Das CMS fragt Ihren Code, wer der Besucher ist: Definieren Sie `FUNC.auth = function($) { ... }` (zum Beispiel in einer Datei von `definitions/`) und rufen Sie `$.success(user)` auf. Ohne diese Funktion sind alle anonym, und eine `auth`-Seite antwortet 404.
- Eine deaktivierte Seite, eine unbekannte Adresse und eine Seite einer anderen Sprache antworten 404. Die Sitemap `/sitemap.xml` listet die Seiten auf, die nicht deaktiviert sind.

## Variablen

Das Plugin *Variables* hält eine Liste von Paaren `NAME: value` (`Variables|save` mit `vars`). Jedes `$NAME` in einem Layout oder einer Seite wird beim Ausliefern der Seite zu seinem Wert, was für eine Telefonnummer, einen Firmennamen oder einen Link nützlich ist, der an vielen Stellen vorkommt. Ein unbekanntes `$NAME` bleibt wie geschrieben stehen.

## Navigation

Eine Navigation ist ein im Admin beschriebenes Menü (ein Name und ein Baum von Links mit `name`, `url`, `title`, `icon`, `color`, `target`, `hidden`, `highlight` und `children`), das Ihr Layout mit einer in Tangular geschriebenen Vorlage zeichnet. Setzen Sie ein Skript in das Layout:

```html
<nav>
	<script type="text/navigation" name="main">
		{{ foreach m in value.children }}
			<a href="{{ m.url }}"{{ if m.url === value.url }} class="on"{{ fi }}>{{ m.name }}</a>
		{{ end }}
	</script>
</nav>
```

Beim Speichern des Layouts wird eine Navigation namens `main` angelegt, falls sie nicht existiert; bearbeiten Sie dann ihre Links im Plugin *Navigation*. In der Vorlage ist `value.children` die Liste der sichtbaren Links und `value.url` die ausgelieferte Adresse. Geben Sie dem Skript einen `name`; mit nur einer `id` akzeptiert der Compiler es, aber das Speichern des Layouts antwortet nicht.

Es gibt auch `<script type="text/breadcrumb">` für den Pfad der Elternseiten.

## Weiterleitungen

Eine Weiterleitung hat eine `url`, ein `target` und `permanent`. Die öffentliche Website prüft die Weiterleitungen vor den Seiten: `/old/` antwortete mit der Seite von `/about/`, als ihr Ziel `/about/` war.

## Cache

Kompilierte Seiten werden im Cache gehalten; das Speichern einer Seite, eines Layouts, eines Widgets oder einer Variable leert, was davon abhängt, und ein Dienst, der alle zwei Minuten läuft, leert außerdem die kompilierten Ansichten.
