# Impostazioni, post, file e visitatori del CMS di Total.js e dove si salva tutto

> Le impostazioni del CMS di Total.js, il gestore dei post, come vengono serviti e ridimensionati i file caricati, le statistiche dei visitatori e la dashboard, l’integrazione con OpenPlatform e il modello dei dati del sito.

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

## Impostazioni

Il plugin *Settings* (`settings_read`, `settings_save`; permesso `settings`) modifica la configurazione che il CMS conserva nei metadati del sito e carica in `CONF` a ogni avvio:

| Chiave | Significato |
|---|---|
| `name` | il nome del sito, usato nel `<title>` di ogni pagina tranne `/` e nel nome del file del backup |
| `url` | l’indirizzo pubblico del sito; il CMS lo aggiorna anche dall’host delle richieste dell’admin |
| `smtp` | le impostazioni SMTP come testo JSON (`server`, `from`, `user`, `password`, `port`); `settings_test` le prova |
| `icon` | un’icona per il sito |
| `$tms`, `secret_tms` | pubblica gli eventi tramite TMS, e il segreto di quella connessione |
| `op_reqtoken`, `op_restoken` | i token di un’applicazione [OpenPlatform](/en/openplatform/how-an-app-connects/); quando sono impostati entrambi, l’accesso all’admin è sostituito da quello di OpenPlatform |
| `totalapi` | una chiave per i servizi dell’API di Total.js |

I plugin possono aggiungere altre chiavi, che compaiono nello stesso modulo. I valori che vivono nel file `config` (`$api`, `cdn`, `salt` e, se lo aggiungi, `token`) non si modificano qui.

## Post

Il plugin *Posts* è un piccolo gestore di articoli, conservati in un proprio file NoSQL nell’archivio. Un post ha `name`, `category`, `picture`, `summary`, `body`, `reference`, `icon`, `color`, `hidden` e `date`; l’admin li elenca dal più recente (100 per pagina) e `posts_categories` restituisce le categorie in uso. I post sono dati per il tuo codice: il renderer pubblico del CMS (`controllers/default.js`) non li stampa, quindi un tuo widget o una tua route deve leggerli e disegnarli.

## File

Il plugin *Files* salva i caricamenti nell’archivio di file e li segna come pubblici. `GET /download/<id>.<ext>` serve un file pubblico (solo quelli pubblici; gli altri rispondono 404). Per le immagini, `?s=<percent>` restituisce un JPEG più piccolo (il valore deve essere tra 10 e 80, con qualità 80), e `?download=1` forza il download. Le route di caricamento e i loro limiti sono in [l’API dell’admin](/en/cms/the-admin-api/).

## Visitatori e dashboard

Il modulo `modules/visitors.js` conta le visite delle pagine pubbliche tramite lo script `/visitors.js` incluso da ogni pagina: visitatori unici, visualizzazioni, browser, referrer, traffico da ricerca, social e diretto, mobile e desktop, ore del giorno e persone online (un visitatore è online per 20 minuti senza attività). Il plugin *Dashboard* disegna questi numeri da `dashboard_stats`, `dashboard_online`, `dashboard_browsers`, `dashboard_referers` e `dashboard_pages`.

## OpenPlatform

Quando `op_reqtoken` e `op_restoken` sono impostati, il CMS fa accedere le persone tramite [OpenPlatform](/en/openplatform/what-is-openplatform/) (modulo `modules/openplatform.js`) e ogni plugin aggiunge il suo permesso all’elenco che OpenPlatform mostra quando assegni i gruppi: `pages`, `layouts`, `widgets`, `navigation`, `posts`, `files`, `redirects`, `variables`, `settings` e `admin`. Ricorda la regola di OpenPlatform: un’applicazione è visibile solo ai gruppi che le assegni.

## Il modello dei dati

`MAIN.db` contiene i metadati del sito (`pages`, `layouts`, `widgets`, `redirects`, `vars`, `nav`, `config` e `storage`) e viene salvato come un unico documento JSON chiamato `meta` nell’archivio di file. L’HTML di ogni pagina e layout è un file di quell’archivio il cui nome è l’id della pagina o del layout. `FUNC.load()` legge i metadati all’avvio, compila i widget (eseguendo la loro funzione `install`) e ricostruisce le cache; `FUNC.save()` li riscrive. Per questo un backup dell’archivio è un backup del sito.
