# Stránky, layouty, navigace, proměnné a přesměrování v CMS Total.js

> Jak CMS promění layout a stránku ve veřejnou adresu: prvek s id CMS, pole stránky, proměnné, navigační skripty psané v Tangular, přesměrování, sitemapa a které stránky jsou viditelné.

Framework: cms
Product: CMS (cms@8071e48)
Language: cs
Content-SHA256: 1635e2bb3f0f4e19aab692b64190029ded1f0ca9e17618be8cee14cab0cbfc11
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

CMS uchovává HTML každého layoutu a stránky jako soubor a jejich data (adresa, titulek, layout...) v metadatech webu. Požadavek na veřejný web najde stránku podle adresy a vykreslí ji uvnitř jejího layoutu.

## Layouty

**Layout** je úplný dokument HTML. Prvek s `id="CMS"` označuje místo, kam jde obsah stránky:

```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` přijímá `name`, `icon`, `color`, `html` a seznam `scripts`, které se přidají ke každé stránce layoutu. V HTML se `$NAME` nahradí **proměnnou** s tímto názvem (viz níže) a `@{year}` aktuálním rokem.

## Stránky

**Stránka** má `name`, `layoutid` (povinné), adresu `url` a volitelně `title`, `description`, `keywords`, `language`, `parentid`, `icon`, `color` a příznaky `disabled`, `auth`, `pinned` a `nocache`. Její HTML (uložené přes `pages_save_html`) je to, co jde dovnitř prvku `id="CMS"`.

- Pokud necháte `url` prázdné, CMS ji vytvoří z názvu: `Hello World` se stane `/hello-world/` a pod nadřazenou stránkou adresa začíná adresou rodiče.
- Veřejný web obslouží stránku, když se její `url` rovná požadované adrese, není `disabled` a její `language`, pokud je nastaven, se rovná jazyku požadavku.
- Odpověď dostane `<title>` (`title` nebo `name`, následovaný názvem webu u každé stránky kromě `/`), popis a klíčová slova, skript, který počítá návštěvy (`/visitors.js`), a styl widgetů, které stránka používá.
- Stránky `auth` se obslouží jen přihlášenému návštěvníkovi. CMS se ptá vašeho kódu, kdo je návštěvník: definujte `FUNC.auth = function($) { ... }` (například v souboru v `definitions/`) a zavolejte `$.success(user)`. Bez této funkce jsou všichni anonymní a stránka `auth` odpoví 404.
- Vypnutá stránka, neznámá adresa a stránka jiného jazyka odpovídají 404. Sitemapa `/sitemap.xml` uvádí stránky, které nejsou vypnuté.

## Proměnné

Plugin *Variables* uchovává seznam dvojic `NAME: value` (`Variables|save` s `vars`). Každé `$NAME` v layoutu nebo stránce se při obsluze stránky změní na svou hodnotu, což se hodí pro telefon, název firmy nebo odkaz, který se objevuje na mnoha místech. Neznámé `$NAME` zůstane tak, jak je napsáno.

## Navigace

Navigace je menu popsané v administraci (název a strom odkazů s `name`, `url`, `title`, `icon`, `color`, `target`, `hidden`, `highlight` a `children`) a vykreslené vaším layoutem pomocí šablony psané v Tangular. Do layoutu vložte skript:

```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>
```

Při uložení layoutu se vytvoří navigace s názvem `main`, pokud neexistuje; poté upravte její odkazy v pluginu *Navigace*. V šabloně je `value.children` seznam viditelných odkazů a `value.url` obsluhovaná adresa. Skriptu dejte `name`; s pouhým `id` jej kompilátor přijme, ale uložení layoutu neodpoví.

Existuje také `<script type="text/breadcrumb">` pro cestu nadřazených stránek.

## Přesměrování

Přesměrování má `url`, `target` a `permanent`. Veřejný web kontroluje přesměrování před stránkami: `/old/` odpovědělo stránkou `/about/`, když byl jeho cíl `/about/`.

## Mezipaměť

Zkompilované stránky se ukládají do mezipaměti; uložení stránky, layoutu, widgetu nebo proměnné vymaže, co na nich závisí, a služba, která běží každé dvě minuty, vymaže i zkompilovaná zobrazení.
