# Страници, шаблони, навигация, променливи и пренасочвания в CMS на Total.js

> Как CMS превръща шаблон и страница в публичен адрес: елементът с id CMS, полетата на страницата, променливите, навигационните скриптове, написани с Tangular, пренасочванията, sitemap и кои страници са видими.

Framework: cms
Product: CMS (cms@8071e48)
Language: bg
Content-SHA256: 1377da94b48f679a56b29b6f9854278981bd7a842c7b3e98d44d8f281caac4bb
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

CMS пази HTML на всеки шаблон и страница като файл, а данните им (адрес, заглавие, шаблон...) в метаданните на сайта. Заявка към публичния сайт намира страница по адреса ѝ и я визуализира в нейния шаблон.

## Шаблони

**Шаблонът** е пълен HTML документ. Елементът с `id="CMS"` отбелязва мястото, където отива съдържанието на страницата:

```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` приема `name`, `icon`, `color`, `html` и списък `scripts`, които се добавят към всяка страница на шаблона. В HTML `$NAME` се заменя с **променливата** с това име (вижте по-долу), а `@{year}` с текущата година.

## Страници

**Страницата** има `name`, `layoutid` (задължително), адрес `url` и по избор `title`, `description`, `keywords`, `language`, `parentid`, `icon`, `color` и флаговете `disabled`, `auth`, `pinned` и `nocache`. Нейният HTML (записан с `pages_save_html`) е това, което отива в елемента `id="CMS"`.

- Ако оставите `url` празен, CMS прави такъв от името: `Hello World` става `/hello-world/`, а под родителска страница адресът започва с адреса на родителя.
- Публичният сайт сервира страница, когато нейният `url` е равен на поисканата адрес, не е `disabled` и нейният `language`, ако е зададен, е равен на езика на заявката.
- Отговорът получава `<title>` (`title` или `name`, последвани от името на сайта за всяка страница освен `/`), описанието и ключовите думи, скрипт, който брои посещенията (`/visitors.js`), и стила на уиджетите, които страницата ползва.
- Страниците `auth` се сервират само на влязъл посетител. CMS пита вашия код кой е посетителят: дефинирайте `FUNC.auth = function($) { ... }` (например във файл от `definitions/`) и извикайте `$.success(user)`. Без тази функция всички са анонимни и страница `auth` отговаря 404.
- Изключена страница, непознат адрес и страница на друг език отговарят 404. Sitemap `/sitemap.xml` изброява страниците, които не са изключени.

## Променливи

Добавката *Variables* пази списък от двойки `NAME: value` (`Variables|save` с `vars`). Всяко `$NAME` в шаблон или страница става своята стойност, когато страницата се сервира, което е полезно за телефон, име на фирма или връзка, която се среща на много места. Непознато `$NAME` остава така, както е написано.

## Навигация

Навигацията е меню, описано в администрацията (име и дърво от връзки с `name`, `url`, `title`, `icon`, `color`, `target`, `hidden`, `highlight` и `children`) и изчертавано от вашия шаблон с шаблон, написан с Tangular. Сложете скрипт в шаблона:

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

Когато шаблонът се запише, се създава навигация на име `main`, ако не съществува; след това редактирайте връзките ѝ в добавката *Навигация*. В шаблона `value.children` е списъкът с видимите връзки, а `value.url` е адресът, който се сервира. Дайте на скрипта `name`; само с `id` компилаторът го приема, но записването на шаблона не отговаря.

Има и `<script type="text/breadcrumb">` за пътя на родителските страници.

## Пренасочвания

Пренасочването има `url`, `target` и `permanent`. Публичният сайт проверява пренасочванията преди страниците: `/old/` отговори със страницата на `/about/`, когато целта му беше `/about/`.

## Кеш

Компилираните страници се държат в кеш; записването на страница, шаблон, уиджет или променлива изчиства зависещото от тях, а услуга, която работи на всеки две минути, изчиства и компилираните изгледи.
