# Stránky, layouty, navigácia, premenné a presmerovania v CMS Total.js

> Ako CMS premení layout a stránku na verejnú adresu: prvok s id CMS, polia stránky, premenné, navigačné skripty písané v Tangular, presmerovania, sitemapa a ktoré stránky sú viditeľné.

Framework: cms
Product: CMS (cms@8071e48)
Language: sk
Content-SHA256: 7233c1c5cd21c491494dd8a6e5166e6fe6068e4e4ee5a60b69035a932bb6d2b7
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

CMS uchováva HTML každého layoutu a stránky ako súbor a ich údaje (adresa, titulok, layout...) v metadátach webu. Požiadavka na verejný web nájde stránku podľa adresy a vykreslí ju vo vnútri jej layoutu.

## Layouty

**Layout** je úplný dokument HTML. Prvok s `id="CMS"` označuje miesto, kam ide 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` prijíma `name`, `icon`, `color`, `html` a zoznam `scripts`, ktoré sa pridajú ku každej stránke layoutu. V HTML sa `$NAME` nahradí **premennou** s týmto názvom (pozri nižšie) a `@{year}` aktuálnym rokom.

## Stránky

**Stránka** má `name`, `layoutid` (povinné), adresu `url` a voliteľne `title`, `description`, `keywords`, `language`, `parentid`, `icon`, `color` a príznaky `disabled`, `auth`, `pinned` a `nocache`. Jej HTML (uložené cez `pages_save_html`) je to, čo ide dovnútra prvku `id="CMS"`.

- Ak necháte `url` prázdne, CMS ju vytvorí z názvu: `Hello World` sa stane `/hello-world/` a pod nadradenou stránkou adresa začína adresou nadradenej stránky.
- Verejný web obslúži stránku, keď sa jej `url` rovná požadovanej adrese, nie je `disabled` a jej `language`, ak je nastavený, sa rovná jazyku požiadavky.
- Odpoveď dostane `<title>` (`title` alebo `name`, nasledované názvom webu pri každej stránke okrem `/`), popis a kľúčové slová, skript, ktorý počíta návštevy (`/visitors.js`), a štýl widgetov, ktoré stránka používa.
- Stránky `auth` sa obslúžia len prihlásenému návštevníkovi. CMS sa pýta vášho kódu, kto je návštevník: definujte `FUNC.auth = function($) { ... }` (napríklad v súbore v `definitions/`) a zavolajte `$.success(user)`. Bez tejto funkcie sú všetci anonymní a stránka `auth` odpovie 404.
- Vypnutá stránka, neznáma adresa a stránka iného jazyka odpovedajú 404. Sitemapa `/sitemap.xml` uvádza stránky, ktoré nie sú vypnuté.

## Premenné

Plugin *Variables* uchováva zoznam dvojíc `NAME: value` (`Variables|save` s `vars`). Každé `$NAME` v layoute alebo stránke sa pri obsluhe stránky zmení na svoju hodnotu, čo sa hodí pre telefón, názov firmy alebo odkaz, ktorý sa objavuje na mnohých miestach. Neznáme `$NAME` zostane tak, ako je napísané.

## Navigácia

Navigácia je menu opísané v administrácii (názov a strom odkazov s `name`, `url`, `title`, `icon`, `color`, `target`, `hidden`, `highlight` a `children`) a vykreslené vaším layoutom pomocou šablóny písanej 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>
```

Pri uložení layoutu sa vytvorí navigácia s názvom `main`, ak neexistuje; potom jej odkazy upravte v pluguine *Navigácia*. V šablóne je `value.children` zoznam viditeľných odkazov a `value.url` adresa, ktorá sa obsluhuje. Skriptu dajte `name`; s iba `id` ho kompilátor prijme, ale uloženie layoutu neodpovie.

Existuje aj `<script type="text/breadcrumb">` pre cestu nadradených stránok.

## Presmerovania

Presmerovanie má `url`, `target` a `permanent`. Verejný web kontroluje presmerovania pred stránkami: `/old/` odpovedalo stránkou `/about/`, keď bol jeho cieľ `/about/`.

## Vyrovnávacia pamäť

Skompilované stránky sa ukladajú do vyrovnávacej pamäte; uloženie stránky, layoutu, widgetu alebo premennej vymaže, čo od nich závisí, a služba, ktorá beží každé dve minúty, vymaže aj skompilované zobrazenia.
