# Pagini, layout-uri, navigație, variabile și redirecționări în CMS-ul Total.js

> Cum transformă CMS-ul un layout și o pagină într-o adresă publică: elementul cu id CMS, câmpurile unei pagini, variabilele, scripturile de navigație scrise cu Tangular, redirecționările, sitemap-ul și care pagini sunt vizibile.

Framework: cms
Product: CMS (cms@8071e48)
Language: ro
Content-SHA256: 7655caf45caab1f8d314d003a5d60caade2256f7de055c8e89f33342930c015d
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

CMS-ul păstrează HTML-ul fiecărui layout și al fiecărei pagini ca fișier, iar datele lor (adresă, titlu, layout...) în metadatele site-ului. O cerere către site-ul public găsește o pagină după adresă și o randează în layout-ul ei.

## Layout-uri

Un **layout** este un document HTML complet. Elementul cu `id="CMS"` marchează locul în care intră conținutul paginii:

```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` primește `name`, `icon`, `color`, `html` și o listă de `scripts` care se adaugă fiecărei pagini a layout-ului. În HTML, `$NAME` este înlocuit cu **variabila** cu acel nume (vezi mai jos), iar `@{year}` cu anul curent.

## Pagini

O **pagină** are un `name`, un `layoutid` (obligatoriu), o adresă `url` și, opțional, `title`, `description`, `keywords`, `language`, `parentid`, `icon`, `color` și indicatorii `disabled`, `auth`, `pinned` și `nocache`. HTML-ul ei (salvat cu `pages_save_html`) este ce intră în elementul `id="CMS"`.

- Dacă lași `url` gol, CMS-ul face unul din nume: `Hello World` devine `/hello-world/`, iar sub o pagină-părinte adresa începe cu adresa părintelui.
- Site-ul public servește o pagină când `url` al ei este egal cu adresa cerută, nu este `disabled`, iar `language` al ei, dacă este setat, este egal cu limba cererii.
- Răspunsul primește `<title>` (`title` sau `name`, urmat de numele site-ului la fiecare pagină în afară de `/`), descrierea și cuvintele-cheie, un script care numără vizitele (`/visitors.js`) și stilul widgeturilor folosite de pagină.
- Paginile `auth` sunt servite doar unui vizitator autentificat. CMS-ul întreabă codul tău cine este vizitatorul: definește `FUNC.auth = function($) { ... }` (de exemplu într-un fișier din `definitions/`) și apelează `$.success(user)`. Fără acea funcție toți sunt anonimi, iar o pagină `auth` răspunde 404.
- O pagină dezactivată, o adresă necunoscută și o pagină în altă limbă răspund 404. Sitemap-ul `/sitemap.xml` listează paginile care nu sunt dezactivate.

## Variabile

Pluginul *Variables* păstrează o listă de perechi `NAME: value` (`Variables|save` cu `vars`). Orice `$NAME` dintr-un layout sau o pagină devine valoarea lui când pagina este servită, ceea ce e util pentru un telefon, numele unei companii sau un link care apare în multe locuri. Un `$NAME` necunoscut rămâne așa cum este scris.

## Navigație

O navigație este un meniu descris în administrare (un nume și un arbore de linkuri cu `name`, `url`, `title`, `icon`, `color`, `target`, `hidden`, `highlight` și `children`) și desenat de layout-ul tău cu un șablon scris în Tangular. Pune un script în 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>
```

Când layout-ul este salvat, se creează o navigație numită `main` dacă nu există; apoi editează linkurile ei în pluginul *Navigație*. În șablon, `value.children` este lista linkurilor vizibile, iar `value.url` adresa servită. Dă scriptului un `name`; doar cu un `id` compilatorul îl acceptă, dar salvarea layout-ului nu răspunde.

Există și `<script type="text/breadcrumb">` pentru traseul paginilor-părinte.

## Redirecționări

O redirecționare are un `url`, un `target` și `permanent`. Site-ul public verifică redirecționările înaintea paginilor: `/old/` a răspuns cu pagina `/about/` când ținta lui era `/about/`.

## Cache

Paginile compilate sunt păstrate în cache; salvarea unei pagini, a unui layout, a unui widget sau a unei variabile golește ce depinde de ele, iar un serviciu care rulează la fiecare două minute golește și vizualizările compilate.
