Artifact 75551c0bf77e6136876baba409ef033b4e118a6194a3ae5558ce2d6e5bebac23:

Wiki page [Dev/Web] by bohwaz on 2021-05-02 01:03:00.
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