.
D 2021-05-01T23:03:00.861
L Dev/Web
N text/x-markdown
P 61e85387843f07ce9fa67fb796408cfa2cd7de34a7e50fc87984b90c4f900543
U bohwaz
W 3576
# Format de stockage des pages web
Les pages web sont stockées sous la forme d'un répertoire contenant :
* un fichier "contenu" (actuellement nommé `index.txt`)
* éventuellement des fichiers joints
* éventuellement des sous-répertoires (= autres pages web)
Ce format s'inspire de ce qui est fait par les CMS Grav et [Kirby](https://getkirby.com/docs/guide/blueprints/layout). Ainsi il est possible de modifier le site web avec un simple éditeur de texte :)
## Format du fichier contenu
Ce fichier est séparé en plusieurs blocs. Chaque bloc est séparé d'un autre par une ligne contenant seulement 4 tirets, précédée d'une ligne vide, et suivie d'une autre ligne vide (`\n\n----\n\n`).
Pour éviter un conflit avec la syntaxe markdown ou autre contenus, les lignes contenant seulement quatre tirets dans les contenus sont échappées : elles sont précédées d'un antislash.
Chaque bloc commence par des entêtes semblables aux entêtes HTTP : sur chaque ligne une clé, suivie de deux points `:`, d'un espace et de la valeur.
Après les entêtes suivent deux retours de ligne (`\n\n`) et le contenu du bloc, s'il y a un contenu. S'il n'y a pas de contenu, les entêtes sont suivis d'un séparateur de bloc.
Le premier bloc contient obligatoirement les méta-données du document, sous forme d'entêtes sans contenu.
### Méta-données du document
```
Title: Nos activités
Published: 2012-05-23 17:35:00
Status: Online
```
* `Status` indique le statut de la page, celui-ci peut être `online` (en ligne) ou `draft` (brouillon)
* `Published` indique la date de publication au format `Y-m-d H:i:s`
* `Title` représente le titre de la page
### Blocs
La page est conçue comme une suite de blocs
Un bloc de contenu a forcément un entête `Type`. Ce type peut être :
* `columns` : un ensemble de colonnes (le nombre est indiqué dans l'entête `Columns`)
* `column` : une colonne
* `markdown` : du texte formatté avec Markdown
* `skriv` : du texte formatté avec SkrivML
* `gallery` : une galerie de photos ou de fichiers
* `image` : une image
* `code` : du code à afficher tel quel
* `heading` : un titre
* `quote` : une citation
* `video` : une vidéo externe
Par commodité on considère que la page est déjà dans un bloc de type `columns` (avec une seule colonne), et donc tout bloc à la racine de la page doit être de type `column`.
À la suite d'un bloc `column` on peut trouver n'importe quel type de bloc. Si ce n'est pas un bloc de type `column`, ils seront ajoutés les uns à la suite des autres dans la colonne précédente.
#### Exemple de bloc simple
Imaginons que notre page ne soit composée que d'un bloc de type `markdown`, le template contiendra alors (sans compter les méta-données de la page) :
```
Type: column
----
Type: markdown
Hello ''world''!
```
De manière visuelle pour représenter les blocs cela donnera :
![](/attachdownload/doc_web_markdown.svg?page=Dev/Web&file=doc_web_markdown.svg)
#### Exemple de bloc avec deux colonnes
Nous voulons avoir deux colonnes sur notre page, la première avec un titre et un texte, et la seconde avec une image. Nous créons donc un bloc de type `columns` qui contient deux blocs de type `column`, et chacun de ces blocs contient des blocs de contenu.
```
Type: columns
----
Type: column
----
Type: heading
Notre association
----
Type: markdown
Notre association est fabriquée à base de nounours tout doux.
----
Type: column
----
Type: image
Logo_association.png
```
![](/attachdownload/doc_web_columns.svg?page=Dev/Web&file=doc_web_columns.svg)
Z 47dbc4cf831e3dbfcbb5cb14d74e64e2