# Σελίδες, διατάξεις, πλοήγηση, μεταβλητές και ανακατευθύνσεις στο CMS του Total.js

> Πώς το CMS μετατρέπει μια διάταξη και μια σελίδα σε δημόσια διεύθυνση: το στοιχείο με id CMS, τα πεδία μιας σελίδας, οι μεταβλητές, τα σενάρια πλοήγησης γραμμένα με Tangular, οι ανακατευθύνσεις, το sitemap και ποιες σελίδες είναι ορατές.

Framework: cms
Product: CMS (cms@8071e48)
Language: el
Content-SHA256: f86e7539eee39386bd54aa4bc43ff49bd03ebc59972c66cf3e636fb9de2051b3
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`) και το στυλ των widgets που χρησιμοποιεί η σελίδα.
- Οι σελίδες `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/`.

## Προσωρινή μνήμη

Οι μεταγλωττισμένες σελίδες αποθηκεύονται στην προσωρινή μνήμη· η αποθήκευση μιας σελίδας, διάταξης, widget ή μεταβλητής καθαρίζει ό,τι εξαρτάται από αυτά, και μια υπηρεσία που τρέχει κάθε δύο λεπτά καθαρίζει επίσης τις μεταγλωττισμένες προβολές.
