# Sidor, layouter, navigation, variabler och omdirigeringar i Total.js CMS

> Hur CMS gör en layout och en sida till en publik adress: elementet med id CMS, en sidas fält, variabler, navigationsskript skrivna med Tangular, omdirigeringar, sitemap och vilka sidor som är synliga.

Framework: cms
Product: CMS (cms@8071e48)
Language: sv
Content-SHA256: 598c8643afe9d577cec3ff28018f19d20ccee206a314b7afdc7ba227b35ee86a
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: 
Review: not-recorded

CMS lagrar HTML för varje layout och sida som en fil och deras data (adress, titel, layout...) i webbplatsens metadata. En begäran till den publika webbplatsen hittar en sida via dess adress och renderar den inuti dess layout.

## Layouter

En **layout** är ett fullständigt HTML-dokument. Elementet med `id="CMS"` markerar platsen där sidans innehåll hamnar:

```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` tar `name`, `icon`, `color`, `html` och en lista `scripts` som läggs till på varje sida i layouten. I HTML ersätts `$NAME` av **variabeln** med det namnet (se nedan) och `@{year}` av innevarande år.

## Sidor

En **sida** har ett `name`, ett `layoutid` (obligatoriskt), en adress `url` och valfritt `title`, `description`, `keywords`, `language`, `parentid`, `icon`, `color` samt flaggorna `disabled`, `auth`, `pinned` och `nocache`. Dess HTML (sparad med `pages_save_html`) hamnar i elementet `id="CMS"`.

- Om du lämnar `url` tom skapar CMS en av namnet: `Hello World` blir `/hello-world/`, och under en föräldersida börjar adressen med förälderns adress.
- Den publika webbplatsen serverar en sida när dess `url` är lika med den begärda adressen, den inte är `disabled` och dess `language`, om satt, är lika med begärans språk.
- Svaret får `<title>` (`title` eller `name`, följt av webbplatsens namn för varje sida utom `/`), beskrivningen och nyckelorden, ett skript som räknar besöken (`/visitors.js`) och stilen för de widgetar som sidan använder.
- `auth`-sidor serveras bara till en inloggad besökare. CMS frågar din kod vem besökaren är: definiera `FUNC.auth = function($) { ... }` (till exempel i en fil i `definitions/`) och anropa `$.success(user)`. Utan den funktionen är alla anonyma och en `auth`-sida svarar 404.
- En inaktiverad sida, en okänd adress och en sida på ett annat språk svarar 404. Sitemapen `/sitemap.xml` listar sidorna som inte är inaktiverade.

## Variabler

Pluginet *Variables* håller en lista med par `NAME: value` (`Variables|save` med `vars`). Varje `$NAME` i en layout eller sida blir sitt värde när sidan serveras, vilket är användbart för ett telefonnummer, ett företagsnamn eller en länk som förekommer på många ställen. Ett okänt `$NAME` förblir som det står skrivet.

## Navigation

En navigation är en meny som beskrivs i administrationen (ett namn och ett träd av länkar med `name`, `url`, `title`, `icon`, `color`, `target`, `hidden`, `highlight` och `children`) och ritas av din layout med en mall skriven i Tangular. Lägg ett skript i layouten:

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

När layouten sparas skapas en navigation som heter `main` om den inte finns; redigera sedan dess länkar i pluginet *Navigation*. I mallen är `value.children` listan över synliga länkar och `value.url` adressen som serveras. Ge skriptet ett `name`; med bara ett `id` accepterar kompilatorn det, men sparandet av layouten ger inget svar.

Det finns också `<script type="text/breadcrumb">` för spåret av föräldersidor.

## Omdirigeringar

En omdirigering har en `url`, ett `target` och `permanent`. Den publika webbplatsen kontrollerar omdirigeringarna före sidorna: `/old/` svarade med sidan `/about/` när dess mål var `/about/`.

## Cache

Kompilerade sidor cachas; att spara en sida, layout, widget eller variabel rensar det som beror på dem, och en tjänst som körs var tvåa minut rensar också de kompilerade vyerna.
