@kiubi/mcp-designer 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +15 -0
- package/README.md +219 -0
- package/package.json +57 -0
- package/src/app.ts +39 -0
- package/src/index.ts +21 -0
- package/src/lib/stemmer.ts +38 -0
- package/src/lib/theme-checker/block-validator.ts +353 -0
- package/src/lib/theme-checker/checker.ts +897 -0
- package/src/lib/theme-checker/filter-validator.ts +163 -0
- package/src/lib/theme-checker/index.ts +6 -0
- package/src/lib/theme-checker/inspector.ts +193 -0
- package/src/lib/theme-checker/lang.ts +42 -0
- package/src/lib/theme-checker/parsers/component-xml.ts +120 -0
- package/src/lib/theme-checker/parsers/model-xml.ts +82 -0
- package/src/lib/theme-checker/parsers/post-type-xml.ts +92 -0
- package/src/lib/theme-checker/parsers/symbol-xml.ts +162 -0
- package/src/lib/theme-checker/parsers/theme-xml.ts +102 -0
- package/src/lib/theme-checker/types.ts +97 -0
- package/src/logger.ts +28 -0
- package/src/tool.ts +13 -0
- package/src/tools/create_type.ts +535 -0
- package/src/tools/detail_type.ts +208 -0
- package/src/tools/get_doc_section.ts +201 -0
- package/src/tools/list_types.ts +87 -0
- package/src/tools/list_widgets.ts +181 -0
- package/src/tools/ruleset.ts +25 -0
- package/src/tools/search_doc.ts +160 -0
- package/src/tools/validate_theme.ts +63 -0
- package/storage/definitions/blog.json +1444 -0
- package/storage/definitions/catalogue.json +2817 -0
- package/storage/definitions/cms.json +1002 -0
- package/storage/definitions/commandes.json +2409 -0
- package/storage/definitions/comptes.json +780 -0
- package/storage/definitions/modules.json +418 -0
- package/storage/definitions/recherche.json +804 -0
- package/storage/documents/CLAUDE.exemple.md +281 -0
- package/storage/documents/generated/exemples.md +8054 -0
- package/storage/documents/generated/integration/01_theme_perso.md +182 -0
- package/storage/documents/generated/integration/02_modeles.md +220 -0
- package/storage/documents/generated/integration/03_widgets.md +139 -0
- package/storage/documents/generated/integration/04_blocs.md +45 -0
- package/storage/documents/generated/integration/05_balises.md +43 -0
- package/storage/documents/generated/integration/06_balises_globales.md +201 -0
- package/storage/documents/generated/integration/07_balises_widget.md +257 -0
- package/storage/documents/generated/integration/08_types_billets.md +154 -0
- package/storage/documents/generated/integration/09_types_produits.md +77 -0
- package/storage/documents/generated/integration/10_types_composants.md +142 -0
- package/storage/documents/generated/integration/11_symboles.md +156 -0
- package/storage/documents/generated/integration/12_mediatheque.md +66 -0
- package/storage/documents/generated/integration/13_includes.md +25 -0
- package/storage/documents/generated/integration/14_404.md +32 -0
- package/storage/documents/generated/integration/15_arianne.md +62 -0
- package/storage/documents/generated/integration/16_fermeture.md +36 -0
- package/storage/documents/generated/integration/17_recherche.md +36 -0
- package/storage/documents/generated/integration/18_cms.md +582 -0
- package/storage/documents/generated/integration/19_modules.md +479 -0
- package/storage/documents/generated/integration/20_blog.md +946 -0
- package/storage/documents/generated/integration/21_catalogue.md +1834 -0
- package/storage/documents/generated/integration/22_commandes.md +2772 -0
- package/storage/documents/generated/integration/23_comptes.md +1195 -0
- package/storage/documents/generated/integration/24_recherche.md +542 -0
- package/storage/documents/hors_sujet_regles.md +43 -0
- package/storage/documents/kiubi_api.md +6690 -0
- package/storage/documents/kiubi_ruleset.md +419 -0
- package/storage/documents/kiubi_workflows.md +121 -0
|
@@ -0,0 +1,419 @@
|
|
|
1
|
+
# Kiubi CMS : Règles d'intégration
|
|
2
|
+
|
|
3
|
+
> Ce document est la référence des contraintes structurelles, des conventions de code et des règles métier à respecter
|
|
4
|
+
> dans toute intégration Kiubi. Il est lu une fois avant toute tâche.
|
|
5
|
+
|
|
6
|
+
## RÈGLES STRUCTURELLES
|
|
7
|
+
|
|
8
|
+
### Hiérarchie des blocs du moteur de template html
|
|
9
|
+
|
|
10
|
+
| Règles absolues | Contrainte |
|
|
11
|
+
|:----------------|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
12
|
+
| Appariement | Chaque `<!-- BEGIN:XXX -->` doit avoir son `<!-- END:XXX -->` correspondant |
|
|
13
|
+
| Hiérarchie | Un bloc ne peut exister que s'il est imbriqué dans son parent direct tel que défini par la documentation technique. Ne jamais placer un bloc à un niveau non documenté. |
|
|
14
|
+
| Unicité | Un même bloc ne doit apparaître qu'une seule fois par fichier, sauf indication contraire explicite dans la documentation |
|
|
15
|
+
| Nommage | Les noms de blocs doivent correspondre exactement à ceux de la documentation. Une personnalisation n'est autorisée que si la documentation le spécifie explicitement (ex : champs de billets, composants, etc.) |
|
|
16
|
+
| Casse | Les noms de blocs s'écrivent en minuscules : `<!-- BEGIN: main -->` est correct, `<!-- BEGIN: MAIN -->` est interdit |
|
|
17
|
+
|
|
18
|
+
Exemple de hiérarchie valide : `main.collection.item.title`
|
|
19
|
+
|
|
20
|
+
```html
|
|
21
|
+
<!-- BEGIN: main -->
|
|
22
|
+
<!-- BEGIN: collection -->
|
|
23
|
+
<!-- BEGIN: item -->
|
|
24
|
+
<!-- BEGIN: title --><!-- END: title -->
|
|
25
|
+
<!-- END: item -->
|
|
26
|
+
<!-- END: collection -->
|
|
27
|
+
<!-- END: main -->
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Commentaires HTML
|
|
31
|
+
|
|
32
|
+
**Caractères autorisés dans les commentaires :** lettres `a-z` / `A-Z`, chiffres `0-9`, tiret simple `-`, underscore
|
|
33
|
+
simple `_`, espace.
|
|
34
|
+
|
|
35
|
+
**Tout le reste est interdit**, sans exception :
|
|
36
|
+
|
|
37
|
+
- Caractères accentués (`é`, `è`, `à`, `ç`…). Si un nom contient un accent, le translittérer. Ex : `Témoignages` → `Temoignages`.
|
|
38
|
+
- Entités HTML (`é`, `à`…), même pour écrire un mot accentué
|
|
39
|
+
- Tirets doubles `--` ou underscores doubles `__`, tiret long (`—`)
|
|
40
|
+
- Tout autre caractère spécial
|
|
41
|
+
|
|
42
|
+
Exemples :
|
|
43
|
+
|
|
44
|
+
```html
|
|
45
|
+
<!-- Correct -->
|
|
46
|
+
<!-- Template du Widget Temoignages -->
|
|
47
|
+
|
|
48
|
+
<!-- INTERDIT -->
|
|
49
|
+
<!-- Template du Widget Témoignages -->
|
|
50
|
+
<!-- Template du Widget Témoignages -->
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## CHAMPS PERSONNALISÉS
|
|
56
|
+
|
|
57
|
+
### Règles de nommage universelles
|
|
58
|
+
|
|
59
|
+
S'appliquent à **tous** les champs personnalisés (billets, produits, composants, symboles).
|
|
60
|
+
|
|
61
|
+
| Règle | Contrainte |
|
|
62
|
+
|:---------------------|:------------------------------------------------------------------------------------------------------------------------------------|
|
|
63
|
+
| Caractères autorisés | Lettres minuscules `a-z` et chiffres `0-9` uniquement |
|
|
64
|
+
| Caractères interdits | Espaces, tirets `-`, underscores `_`, tout caractère spécial |
|
|
65
|
+
| Langue | Anglais recommandé pour les composants et symboles (`content`, `subtitle`, `bgcolor`, `image`, `button`, `link`) |
|
|
66
|
+
| Attribut `aide` | Obligatoire dans `config.xml` pour expliquer l'utilité du champ, sauf si le nom est universellement compréhensible (ex : `Contenu`) |
|
|
67
|
+
|
|
68
|
+
### Champs par type de template
|
|
69
|
+
|
|
70
|
+
| Champ | Billet | Billet du blog / Produit | Composant / Symbole | Remarque |
|
|
71
|
+
|:----------------------|:----------------|:-------------------------|:--------------------|:--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
72
|
+
| `titre` | **Obligatoire** | **Interdit** | **Interdit** | Titre natif du billet |
|
|
73
|
+
| `sstitre` | Facultatif | **Interdit** | **Interdit** | Utiliser de préférence plutôt qu'un champ `text` dédié |
|
|
74
|
+
| `texte1` | **Obligatoire** | Facultatif | **Interdit** | Contenu rédactionnel principal. Privilégier `wysiwyg` |
|
|
75
|
+
| `texte2` à `texte5` | Facultatif | Facultatif | **Interdit** | Contenus rédactionnels alternatifs |
|
|
76
|
+
| `texte6` à `texte9` | Facultatif | Facultatif | **Interdit** | Données diverses (méta, infos complémentaires, paramètres) |
|
|
77
|
+
| `texte10` à `texte15` | Facultatif | Facultatif | **Interdit** | Fichiers et images |
|
|
78
|
+
| `title` | **Interdit** | **Interdit** | **Obligatoire** | Obligatoire au niveau composant ET dans chaque item de collection, qu'il soit affiché en front-office ou non. Sa présence dans `config.xml` est non négociable. Facultatif dans `desc.xml` d'un symbole |
|
|
79
|
+
| `subtitle` | **Interdit** | **Interdit** | Facultatif | Sous-titre du composant ou de l'item |
|
|
80
|
+
| `content` | **Interdit** | **Interdit** | Facultatif | Nom imposé pour le contenu principal du composant. Privilégier `wysiwyg` |
|
|
81
|
+
| `img` | **Interdit** | **Interdit** | Facultatif | Nom imposé pour le champ image du composant |
|
|
82
|
+
| Autres champs libres | Facultatif | Facultatif | Facultatif | Nommage selon les règles de la section précédente |
|
|
83
|
+
|
|
84
|
+
### Uniformisation des noms de champs
|
|
85
|
+
|
|
86
|
+
Avant de nommer un nouveau champ, inspecter les templates existants du même type pour identifier les noms déjà en usage
|
|
87
|
+
dans le projet. Si un champ remplit la même fonction, réutiliser le même nom, y compris pour les champs de la plage
|
|
88
|
+
`texteN`.
|
|
89
|
+
|
|
90
|
+
Exemples :
|
|
91
|
+
|
|
92
|
+
- Si `texte9` contrôle l'alignement partout dans le projet → utiliser `texte9` pour cette fonction dans le nouveau
|
|
93
|
+
template.
|
|
94
|
+
- Si `bgcolor` contrôle la couleur de fond dans les composants existants → utiliser `bgcolor` et non `backgroundcolor`
|
|
95
|
+
ou `bg`.
|
|
96
|
+
|
|
97
|
+
L'homogénéité des noms à travers le projet est préférable.
|
|
98
|
+
|
|
99
|
+
### Règles spécifiques au champ `title`
|
|
100
|
+
|
|
101
|
+
Le champ `title` d'un composant peut apparaître simultanément hors item et dans un item : c'est une exception autorisée
|
|
102
|
+
à la règle d'unicité. Sa présence dans `config.xml` est obligatoire indépendamment de son affichage en front-office : ne
|
|
103
|
+
jamais le supprimer au motif qu'il ne s'affiche pas. Si le champ n'est pas affiché en front-office, préciser dans
|
|
104
|
+
l'attribut `aide` (ex : `aide="Le titre n'est pas affiché dans le site web mais permet d'identifier le composant dans
|
|
105
|
+
la console d'administration"`).
|
|
106
|
+
|
|
107
|
+
### Types de champs disponibles
|
|
108
|
+
|
|
109
|
+
| Type | Description |
|
|
110
|
+
|:-----------|:----------------------------------------------|
|
|
111
|
+
| `text` | Champ de saisie simple (une ligne) |
|
|
112
|
+
| `textarea` | Champ de saisie multiligne |
|
|
113
|
+
| `wysiwyg` | Éditeur de texte visuel |
|
|
114
|
+
| `image` | Fichier image de la médiathèque |
|
|
115
|
+
| `fichier` | Fichier quelconque de la médiathèque |
|
|
116
|
+
| `select` | Champ de liste déroulante |
|
|
117
|
+
| `color` | Couleur hexadécimale |
|
|
118
|
+
| `date` | Date au format `dd/mm/YYYY` |
|
|
119
|
+
| `datetime` | Date et heure au format `dd/mm/YYYY hh:mm:ss` |
|
|
120
|
+
| `checkbox` | Case à cocher |
|
|
121
|
+
|
|
122
|
+
#### Champ de type `select`
|
|
123
|
+
|
|
124
|
+
Un champ `select` permet à l'éditeur de choisir parmi une liste de valeurs prédéfinies. Le comportement dépend de
|
|
125
|
+
l'attribut `value` de chaque `<option>` :
|
|
126
|
+
|
|
127
|
+
```xml
|
|
128
|
+
|
|
129
|
+
<champ champ="monchamp" type="select" intitule="Mon champ">
|
|
130
|
+
<option value=""></option>
|
|
131
|
+
<option value="">Vide</option>
|
|
132
|
+
<option value=" ">Espace</option>
|
|
133
|
+
<option value="default">Par défaut</option>
|
|
134
|
+
</champ>
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
| Déclaration | Valeur enregistrée | Valeur non vide | Usage recommandé |
|
|
138
|
+
|:----------------------------------------------|:-----------------------------------|:---------------:|:-------------------------------------------------------------------------------------------------|
|
|
139
|
+
| `<option value=""></option>` | Aucune, le champ reste sans valeur | Non | Permis pour de l'affichage conditionnel via BEGIN/END, mais non recommandé |
|
|
140
|
+
| `<option value="">Vide</option>` | Le libellé de l'option, ici `Vide` | Oui | À éviter : `value=""` est trompeur. Toujours préférer une valeur explicite (ex : `value="vide"`) |
|
|
141
|
+
| `<option value=" ">Espace</option>` | Un espace `" "` | Oui | Utilisable, mais peu lisible. Préférer une valeur explicite |
|
|
142
|
+
| `<option value="default">Par défaut</option>` | `default` | Oui | Forme recommandée : la valeur enregistrée est explicite et prévisible |
|
|
143
|
+
|
|
144
|
+
**Règle :** Ne jamais laisser `value=""` sur une option qui porte un libellé. La valeur enregistrée serait le libellé
|
|
145
|
+
lui-même, ce qui crée une ambiguïté entre la valeur affichée et la valeur stockée.
|
|
146
|
+
|
|
147
|
+
#### Autres règles spécifiques aux champs
|
|
148
|
+
|
|
149
|
+
- **Saturation d'une plage :** Si une plage `texte` est saturée, il est permis d'utiliser des champs de la plage
|
|
150
|
+
précédente, mais la cohérence doit être maintenue et `texte1` reste non négociable.
|
|
151
|
+
- **Imbrication interdite :** Les champs `texte1` à `texte15` ne s'imbriquent jamais entre eux. Ils sont toujours au
|
|
152
|
+
même niveau dans le bloc parent. Tout pattern `texteX.texteY` trouvé dans le projet est non conforme et ne doit pas
|
|
153
|
+
être reproduit.
|
|
154
|
+
- **Un champ personnalisé ne peut jamais être le bloc parent d'un autre champ personnalisé**, quel que soit son nom. Le
|
|
155
|
+
pattern `<!-- BEGIN:img --><!-- BEGIN:imgwidth -->` est **interdit** si `img` et `imgwidth` sont tous deux des champs
|
|
156
|
+
personnalisés.
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
## FILTRES
|
|
161
|
+
|
|
162
|
+
### Règles absolues
|
|
163
|
+
|
|
164
|
+
| Règle | Contrainte |
|
|
165
|
+
|:----------------------------|:-------------------------------------------------------------------------------------------------------|
|
|
166
|
+
| Pas d'espace dans le filtre | La syntaxe `{balise\|filtre\|arg1\|arg2}` doit être compacte. `{balise\|mapValue\| arg1}` est invalide |
|
|
167
|
+
| Un seul filtre par balise | `{balise\|filtre1\|filtre2}` est **interdit** |
|
|
168
|
+
|
|
169
|
+
### Filtre `mapValue` (affichage conditionnel)
|
|
170
|
+
|
|
171
|
+
Teste si une balise renvoie une valeur interprétée comme "vraie".
|
|
172
|
+
|
|
173
|
+
- **Valeurs "vraies" :** `1`, `actif`, `checked`, `selected`, `erreur`
|
|
174
|
+
- **Syntaxe :** `{balise|mapValue|valeur_si_vrai|valeur_si_faux}`, 2 arguments maximum
|
|
175
|
+
- **Usages courants :** classe CSS, attribut HTML, toute valeur textuelle conditionnelle
|
|
176
|
+
- **Valeur par défaut :** `valeur_si_faux` s'applique quand la balise ne renvoie pas une valeur vraie
|
|
177
|
+
- **Champs personnalisés avec `mapValue` :** le champ doit toujours avoir une valeur définie pour les deux états (ex :
|
|
178
|
+
`0` et `1`). Un champ vide ou absent est interprété comme faux.
|
|
179
|
+
|
|
180
|
+
| Cas d'usage | Syntaxe | Résultat |
|
|
181
|
+
|:-----------------------|:-----------------------------------------------------------|:--------------------------------------------------------|
|
|
182
|
+
| Valeur si VRAI | `{erreur\|mapValue\|is-invalid}` | Applique `is-invalid` si `erreur` renvoie `erreur` |
|
|
183
|
+
| Valeur si FAUX | `{is_active\|mapValue\|\|text-muted}` | Applique `text-muted` si `is_active` ne renvoie pas `1` |
|
|
184
|
+
| Alternative de valeurs | `{actif\|mapValue\|active\|inactive}` | `active` si vrai, `inactive` si faux |
|
|
185
|
+
| Multi-valeurs | `{my_tag\|mapValue\|class1} {my_tag\|mapValue\|class2}` | Répéter la balise pour chaque valeur à appliquer |
|
|
186
|
+
| Première position | `{position\|mapValue\|first-position\|not-first-position}` | Aussi possible avec `compteur` |
|
|
187
|
+
| Niveau d'une page | `{niveau\|mapValue\|first-level\|not-first-level}` | `first-level` si page de niveau 1 |
|
|
188
|
+
| Page fille | `{page_fille\|mapValue\|has-child\|no-child}` | `has-child` si la page a une page fille |
|
|
189
|
+
|
|
190
|
+
### Filtre `htmlentities`
|
|
191
|
+
|
|
192
|
+
Convertit les caractères spéciaux d'une valeur en entités HTML (`<` devient `<`, `&` devient `&`, etc.) pour
|
|
193
|
+
éviter qu'ils soient interprétés par le navigateur.
|
|
194
|
+
|
|
195
|
+
**Cas d'usage principal :** toujours utiliser `htmlentities` quand une balise Kiubi est placée dans un attribut HTML qui
|
|
196
|
+
affiche du contenu éditorial libre :
|
|
197
|
+
|
|
198
|
+
```html
|
|
199
|
+
<img src="..." alt="{alt|htmlentities}" title="{title|htmlentities}">
|
|
200
|
+
<div data-label="{label|htmlentities}">
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
**Inutile dans les cas suivants :**
|
|
204
|
+
|
|
205
|
+
- Champ de type `wysiwyg` (le CMS gère déjà l'échappement)
|
|
206
|
+
- Balises Kiubi nativement conçues pour être dans un attribut (métadonnées, `{url}`, `{slug}`, etc.) dont les valeurs
|
|
207
|
+
sont propres par nature
|
|
208
|
+
- Partout ailleurs hors attribut HTML
|
|
209
|
+
|
|
210
|
+
### Filtre `alternate` (séquence numérique modulo)
|
|
211
|
+
|
|
212
|
+
Génère une séquence numérique cyclique. **Ce n'est pas un filtre conditionnel.**
|
|
213
|
+
|
|
214
|
+
- **Syntaxe :** `{position|alternate|3}` → produit `1`, `2`, `3`, `1`, `2`, `3`, …
|
|
215
|
+
- **Argument unique :** ne peut pas prendre d'argument supplémentaire après le chiffre (`{position|alternate|3|XXX}` est
|
|
216
|
+
invalide)
|
|
217
|
+
- **Balise recommandée :** `position` dans les collections de composants (`compteur` n'est pas disponible dans ce
|
|
218
|
+
contexte)
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## LIVRABLES ET COHÉRENCE DES FICHIERS
|
|
223
|
+
|
|
224
|
+
### Fichiers obligatoires par contexte
|
|
225
|
+
|
|
226
|
+
| Contexte | Fichiers obligatoires |
|
|
227
|
+
|:-------------------|:------------------------------------------------------------------------|
|
|
228
|
+
| Billet site web | `index.html` + `config.xml` |
|
|
229
|
+
| Billet blog | `config.xml` |
|
|
230
|
+
| Produit | `index.html` + `config.xml` |
|
|
231
|
+
| Composant | `index.html` + `config.xml` |
|
|
232
|
+
| Symbole | `index.html` + `desc.xml` + `structure.xhtml` |
|
|
233
|
+
| Template principal | `index.html` + `desc.xml` + `structure.xhtml` |
|
|
234
|
+
| Widget | `index.html` + éventuellement d'autres fichiers `.html` selon le widget |
|
|
235
|
+
|
|
236
|
+
Tous les fichiers obligatoires d'un contexte doivent être produits ensemble, sauf instruction explicite de ne livrer que
|
|
237
|
+
l'un d'eux.
|
|
238
|
+
|
|
239
|
+
Pour les widgets, consulter la documentation technique pour connaître la liste exacte des fichiers attendus.
|
|
240
|
+
|
|
241
|
+
### Emplacement des répertoires
|
|
242
|
+
|
|
243
|
+
Chaque template est créé dans un sous-répertoire **direct** du répertoire correspondant à son type ; jamais imbriqué
|
|
244
|
+
dans un sous-répertoire existant.
|
|
245
|
+
|
|
246
|
+
| Type | Répertoire parent |
|
|
247
|
+
|:-----------------------------|:-----------------------------------------|
|
|
248
|
+
| Billet site web | `theme/[lg]/billets/` |
|
|
249
|
+
| Billet blog (`config.xml`) | `theme/[lg]/billets_blog/` |
|
|
250
|
+
| Billet blog (`index.html`) | `theme/[lg]/widgets/blog/detail_billet/` |
|
|
251
|
+
| Composant | `theme/[lg]/composants/` |
|
|
252
|
+
| Produit | `theme/[lg]/produits/` |
|
|
253
|
+
| Symbole | `theme/[lg]/symboles/` |
|
|
254
|
+
| Template principal | `theme/[lg]/templates/` |
|
|
255
|
+
| Widget (template alternatif) | `theme/[lg]/widgets/[service]/[widget]/` |
|
|
256
|
+
|
|
257
|
+
### Spécificités des widgets
|
|
258
|
+
|
|
259
|
+
Un répertoire de widget a la structure suivante :
|
|
260
|
+
|
|
261
|
+
```
|
|
262
|
+
theme/[lg]/widgets/[service]/[widget]/
|
|
263
|
+
├── index.html ← template principal du widget (rendu par défaut)
|
|
264
|
+
├── liste.html ← autres fichiers .html du widget (selon le widget)
|
|
265
|
+
├── vignette.html
|
|
266
|
+
└── mon_template/ ← template alternatif (sous-répertoire direct)
|
|
267
|
+
├── index.html
|
|
268
|
+
└── ...
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
Règles d'exploration :
|
|
272
|
+
|
|
273
|
+
- Le `index.html` à la racine du widget est le template principal → il doit être lu au même titre que les autres
|
|
274
|
+
fichiers.
|
|
275
|
+
- Les autres fichiers `.html` à la racine (`liste.html`, `vignette.html`, etc.) sont des templates secondaires du même
|
|
276
|
+
widget → les lire aussi.
|
|
277
|
+
- Les sous-répertoires directs sont des templates alternatifs, chacun peut contenir ses propres fichiers `.html`.
|
|
278
|
+
- Tous ces fichiers doivent être pris en compte quand on travaille sur un widget.
|
|
279
|
+
|
|
280
|
+
Le template alternatif est un sous-répertoire **direct** du répertoire du widget, jamais imbriqué dans un template
|
|
281
|
+
alternatif existant.
|
|
282
|
+
|
|
283
|
+
Exemple valide : `theme/fr/widgets/site_web/bloc_extrait/mon_template/`
|
|
284
|
+
Exemple interdit : `theme/fr/widgets/site_web/bloc_extrait/template_existant/mon_template/`
|
|
285
|
+
|
|
286
|
+
### Répertoires `/includes/`
|
|
287
|
+
|
|
288
|
+
| Emplacement | Chemin | Quand l'utiliser |
|
|
289
|
+
|:---------------------|:-----------------------|:----------------------------------------------|
|
|
290
|
+
| Racine du thème | `theme/includes/` | Include sans texte spécifique à une langue |
|
|
291
|
+
| Répertoire de langue | `theme/[lg]/includes/` | Include contenant du texte propre à la langue |
|
|
292
|
+
|
|
293
|
+
### Répertoire `/modules/`
|
|
294
|
+
|
|
295
|
+
`theme/[lg]/modules/[nom-du-module]/`
|
|
296
|
+
|
|
297
|
+
| Module | Répertoire |
|
|
298
|
+
|:-------------------|:--------------------------------|
|
|
299
|
+
| Page d'erreur 404 | `theme/[lg]/modules/404/` |
|
|
300
|
+
| Fil d'Ariane | `theme/[lg]/modules/chemin/` |
|
|
301
|
+
| Page de fermeture | `theme/[lg]/modules/fermeture/` |
|
|
302
|
+
| Sélecteur de sites | `theme/[lg]/modules/selecteur/` |
|
|
303
|
+
|
|
304
|
+
### Cohérence `index.html` / `config.xml` (et `desc.xml` pour les symboles)
|
|
305
|
+
|
|
306
|
+
| Règle | Contrainte |
|
|
307
|
+
|:---------------------------|:------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
308
|
+
| Inséparabilité | Si un template utilise des champs personnalisés, le `config.xml` (ou `desc.xml`) doit être produit en même temps |
|
|
309
|
+
| Pas de déclaration inutile | Tout champ déclaré dans `config.xml` (ou `desc.xml`) doit être utilisé dans `index.html`. Exception : champ utilisé exclusivement par un bloc d'extrait lié |
|
|
310
|
+
|
|
311
|
+
#### Cas particulier : billet du blog
|
|
312
|
+
|
|
313
|
+
Le `config.xml` et le `index.html` du billet blog sont **complètement indépendants** l'un de l'autre :
|
|
314
|
+
|
|
315
|
+
- `config.xml` → définit un **type de contenu** (champs éditoriaux disponibles dans le back-office)
|
|
316
|
+
- `index.html` → définit une **mise en page** (rendu visuel en front-office)
|
|
317
|
+
|
|
318
|
+
La relation est **n:m** : plusieurs types de contenu peuvent utiliser la même mise en page, et une même mise en page
|
|
319
|
+
peut afficher plusieurs types de contenu. Il n'y a aucun lien structurel entre un `config.xml` dans `billets_blog/` et
|
|
320
|
+
un `index.html` dans `widgets/blog/detail_billet/`.
|
|
321
|
+
|
|
322
|
+
**Conséquences opérationnelles :**
|
|
323
|
+
|
|
324
|
+
- Ne jamais créer automatiquement un `index.html` lors de la création d'un `config.xml`, ni l'inverse, sauf instruction
|
|
325
|
+
explicite.
|
|
326
|
+
- Si la demande est ambiguë (type de contenu, mise en page, ou les deux), demander avant de continuer.
|
|
327
|
+
|
|
328
|
+
#### Cas particulier : bloc d'extrait
|
|
329
|
+
|
|
330
|
+
Un bloc d'extrait est toujours dépendant d'un billet. Avant toute action, il est **obligatoire** de poser cette question
|
|
331
|
+
à l'utilisateur :
|
|
332
|
+
|
|
333
|
+
> **Le `config.xml` du billet associé existe-t-il déjà ?**
|
|
334
|
+
|
|
335
|
+
Ne jamais commencer la création du bloc d'extrait sans avoir reçu une réponse explicite à cette question.
|
|
336
|
+
|
|
337
|
+
- **Oui** → demander quel billet. Ne pas créer de `config.xml`, le billet utilisant ce `config.xml` sera le support
|
|
338
|
+
éditorial du bloc d'extrait.
|
|
339
|
+
- **Non** → créer le `config.xml` du billet en même temps que le bloc d'extrait.
|
|
340
|
+
|
|
341
|
+
Si la demande ne précise rien, poser la question avant de continuer.
|
|
342
|
+
|
|
343
|
+
### Zonage des templates principaux et symboles
|
|
344
|
+
|
|
345
|
+
Tout template principal et tout symbole doit obligatoirement avoir une zone `id="contenu"` de `type="contenu"` :
|
|
346
|
+
|
|
347
|
+
```xml
|
|
348
|
+
|
|
349
|
+
<zone id="contenu" colmax="3" intitule="Contenu" defaut="1" type="contenu"/>
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
**Règle de construction :** partir toujours de la zone `id="contenu"`, puis ajouter les zones supplémentaires si
|
|
353
|
+
nécessaire. Ne jamais partir des zones additionnelles sans avoir défini la zone `id="contenu"` d'abord.
|
|
354
|
+
|
|
355
|
+
**Attribut `type="contenu"` :** seules les zones déclarées avec `type="contenu"` acceptent des billets, composants et
|
|
356
|
+
symboles dans la console d'administration. Une zone sans cet attribut ne peut recevoir que des widgets. La zone
|
|
357
|
+
`id="contenu"` doit toujours avoir `type="contenu"`.
|
|
358
|
+
|
|
359
|
+
**Ordre des zones :** suivre un ordre logique en fonction de la structure visuelle attendue du template, de haut en bas
|
|
360
|
+
et de gauche à droite. Par exemple, pour un template classique :
|
|
361
|
+
|
|
362
|
+
```xml
|
|
363
|
+
|
|
364
|
+
<zones defaut="contenu">
|
|
365
|
+
<zone id="entete" colmax="1" intitule="Entete" defaut="1"/>
|
|
366
|
+
<zone id="menu" colmax="1" intitule="Menu" defaut="1"/>
|
|
367
|
+
<zone id="contenu" colmax="3" intitule="Contenu" defaut="1" type="contenu"/>
|
|
368
|
+
<zone id="sidebar" colmax="1" intitule="Sidebar" defaut="1" type="contenu"/>
|
|
369
|
+
<zone id="piedepage" colmax="3" intitule="Pied de page" defaut="1"/>
|
|
370
|
+
</zones>
|
|
371
|
+
```
|
|
372
|
+
|
|
373
|
+
**`<zones defaut="...">` :** toujours pointer sur `contenu` sauf raison explicite contraire.
|
|
374
|
+
|
|
375
|
+
### Uniformité des noms de zones entre templates principaux
|
|
376
|
+
|
|
377
|
+
**Règle absolue :** les noms de zones (`id`) doivent être identiques d'un template principal à l'autre pour toute zone
|
|
378
|
+
qui remplit le même rôle fonctionnel, indépendamment des variations visuelles ou structurelles du template.
|
|
379
|
+
|
|
380
|
+
**En pratique :** avant de nommer une zone, inspecter les templates principaux existants du projet et réutiliser les
|
|
381
|
+
`id` déjà en place pour les zones de même rôle. Ne jamais inventer un nouveau nom si un nom équivalent existe déjà.
|
|
382
|
+
|
|
383
|
+
**Exemple :** une sidebar reste `sidebar` qu'elle soit positionnée à gauche ou à droite, large ou étroite. Ce qui
|
|
384
|
+
change, c'est sa position dans `structure.xhtml`, pas son `id`.
|
|
385
|
+
|
|
386
|
+
| Situation | Correct | Incorrect |
|
|
387
|
+
|:-------------------------------------|:-----------------|:---------------------------------------------|
|
|
388
|
+
| Sidebar, quelle que soit sa position | `id="sidebar"` | `id="sidebar_droite"`, `id="sidebar_gauche"` |
|
|
389
|
+
| En-tête, même si réduit | `id="entete"` | `id="entete_compact"` |
|
|
390
|
+
| Pied de page | `id="piedepage"` | `id="footer"` |
|
|
391
|
+
|
|
392
|
+
**Cas d'un rôle vraiment nouveau** (zone sans équivalent dans les templates existants) : choisir un nom court, en
|
|
393
|
+
minuscules, sans tirets ni underscores, qui décrit le rôle fonctionnel, pas la position visuelle.
|
|
394
|
+
|
|
395
|
+
### Rédaction de `structure.xhtml`
|
|
396
|
+
|
|
397
|
+
Le fichier `structure.xhtml` définit la grille de mise en page via un tableau HTML.
|
|
398
|
+
|
|
399
|
+
- **Zones pleine largeur :** occupent toute la largeur, utilisent `colspan="N"` (N = nombre total de colonnes).
|
|
400
|
+
- **Zones en colonne :** dès qu'un `<tr>` contient plusieurs `<td>`, chaque `<td>` doit porter un attribut `width="%"`.
|
|
401
|
+
L'ensemble des largeurs doit totaliser 100 %.
|
|
402
|
+
|
|
403
|
+
Exemple avec sidebar à droite :
|
|
404
|
+
|
|
405
|
+
```xml
|
|
406
|
+
|
|
407
|
+
<table>
|
|
408
|
+
<tr>
|
|
409
|
+
<td colspan="2">{annonce}</td>
|
|
410
|
+
</tr>
|
|
411
|
+
<tr>
|
|
412
|
+
<td width="65%">{contenu}</td>
|
|
413
|
+
<td width="35%">{sidebar}</td>
|
|
414
|
+
</tr>
|
|
415
|
+
<tr>
|
|
416
|
+
<td colspan="2">{piedepage}</td>
|
|
417
|
+
</tr>
|
|
418
|
+
</table>
|
|
419
|
+
```
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# Kiubi CMS : Workflows d'intégration
|
|
2
|
+
|
|
3
|
+
> Ce document décrit les workflows à suivre selon le type de tâche d'intégration. Consulter le workflow applicable à chaque tâche.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Workflow A : Modification d'un template Kiubi existant
|
|
8
|
+
|
|
9
|
+
**Action préalable :** Annoncer `Workflow A : Modification d'un template Kiubi existant`
|
|
10
|
+
|
|
11
|
+
**Étapes à suivre dans l'ordre :**
|
|
12
|
+
|
|
13
|
+
1. **Analyse :** Lire le `index.html` et le `config.xml` existants pour comprendre la structure. Pour un widget, lister et lire **tous** les fichiers `.html` du répertoire, pas uniquement `index.html`.
|
|
14
|
+
2. **Inspection :** Inspecter les templates existants du même type pour évaluer la cohérence CSS et HTML du projet.
|
|
15
|
+
3. **Plan d'action :** Exposer les modifications envisagées. **→ Attendre une validation explicite avant de continuer.**
|
|
16
|
+
4. **Modification :** Ajouter ou modifier des éléments en respectant les blocs et la logique en place.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Workflow B : Création ou conversion d'un template Kiubi
|
|
21
|
+
|
|
22
|
+
**Action préalable :** Annoncer `Workflow B : Création ou conversion d'un template Kiubi`
|
|
23
|
+
|
|
24
|
+
**Étapes à suivre dans l'ordre :**
|
|
25
|
+
|
|
26
|
+
1. **Identification du mode :** Demander obligatoirement à l'utilisateur lequel des trois modes s'applique, quelle que soit l'instruction reçue :
|
|
27
|
+
|
|
28
|
+
| Mode | Instruction typique | HTML fourni | Approche |
|
|
29
|
+
| :--- | :--- | :--- | :--- |
|
|
30
|
+
| **Préservation** | "convertis ce HTML", "intègre ce HTML tel quel", "garde la mise en page" | Oui | Conserver au maximum la structure, le balisage et les classes CSS d'origine. Les modifications se limitent à ce qu'imposent les règles des sections Règles structurelles, Champs personnalisés, Filtres et Livrables. |
|
|
31
|
+
| **Adaptation** | "inspire-toi de ce HTML", "adapte au thème", "reprends la structure mais adapte le style" | Oui | S'inspirer du HTML fourni pour produire un template cohérent avec le thème existant (classes, wrappers, conventions CSS du projet). |
|
|
32
|
+
| **Création autonome** | "crée un composant", "fais-moi un template", "nouveau billet" | Non | Construire le template de toutes pièces en s'appuyant uniquement sur les templates existants du projet comme référence visuelle et structurelle. |
|
|
33
|
+
|
|
34
|
+
**Cette question est obligatoire à chaque déclenchement du Workflow B**, même si une réponse a déjà été donnée en début de session. Le mode peut changer d'un template à l'autre. Ne jamais supposer que le mode de la conversion précédente s'applique à la suivante.
|
|
35
|
+
|
|
36
|
+
> Formulation suggérée : "Dois-je préserver ce HTML tel quel, m'en inspirer pour l'adapter au thème, ou créer le template de toutes pièces à partir des patterns du projet ?"
|
|
37
|
+
|
|
38
|
+
**→ Attendre une validation explicite avant de passer à l'étape suivante.**
|
|
39
|
+
|
|
40
|
+
2. **Qualification :** Définir la nature exacte du livrable : billet, composant, widget, symbole, template principal ? Cette décision conditionne toutes les étapes suivantes. En cas de doute, l'exposer dans le plan d'action (étape 4) et attendre confirmation.
|
|
41
|
+
|
|
42
|
+
3. **Inspection :** Inspecter les templates existants du même type pour la cohérence CSS et HTML.
|
|
43
|
+
- En mode **Création autonome**, cette étape est la source principale. Lire attentivement plusieurs templates existants du même type pour identifier les patterns visuels (classes, wrappers, structure HTML), les champs utilisés et les conventions de nommage. C'est à partir de cette lecture que le nouveau template est construit.
|
|
44
|
+
|
|
45
|
+
4. **Plan d'action :** Avant de produire quoi que ce soit, exposer un plan détaillé contenant :
|
|
46
|
+
- Nature exacte du livrable et fichiers à créer
|
|
47
|
+
- Blocs Kiubi envisagés et leur hiérarchie
|
|
48
|
+
- Champs personnalisés prévus (noms, types, rôles)
|
|
49
|
+
- Zones si applicable
|
|
50
|
+
- Points ambigus ou choix structurels nécessitant une décision
|
|
51
|
+
|
|
52
|
+
**→ Attendre une validation explicite avant de passer à l'étape suivante.**
|
|
53
|
+
|
|
54
|
+
5. **Structure :** Compléter les blocs `<!-- BEGIN:XXX -->` et `<!-- END:XXX -->` en respectant la hiérarchie Kiubi.
|
|
55
|
+
|
|
56
|
+
6. **Dynamisation :** Remplacer les contenus statiques par les balises Kiubi appropriées (`{title}`, `{content}`, etc.).
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
## Workflow C : Intégration d'un HTML brut avec dépendances en template principal
|
|
61
|
+
|
|
62
|
+
**Action préalable :** Annoncer `Workflow C : Intégration d'un HTML brut avec dépendances en template principal`
|
|
63
|
+
|
|
64
|
+
**Contexte d'application :** Un fichier HTML statique accompagné de ses fichiers de dépendances (CSS, JS, images, fonts, etc.) est à intégrer comme template principal dans `theme/[lg]/templates/`. Le fichier HTML est fourni directement dans la conversation. Les fichiers de dépendances sont déposés au préalable dans `temp/`.
|
|
65
|
+
|
|
66
|
+
**Étapes à suivre dans l'ordre :**
|
|
67
|
+
|
|
68
|
+
1. **Inventaire :** À partir du HTML fourni, identifier toutes les dépendances en suivant l'arbre complet : CSS, JS, images, fonts, et toute autre ressource externe référencée directement dans le HTML, mais aussi les dépendances de ces fichiers (ex : un CSS qui importe une font, un JS qui charge un autre JS), récursivement. Tout fichier présent dans `temp/` mais non atteignable depuis ce HTML est ignoré et ne doit pas être déplacé ni déclaré.
|
|
69
|
+
|
|
70
|
+
2. **Doublons :** Avant de déplacer, comparer chaque fichier avec ceux déjà présents dans `theme/assets/`. Si un fichier du même nom existe déjà, identifier les différences et soumettre le cas à l'utilisateur avec les trois options suivantes :
|
|
71
|
+
|
|
72
|
+
| Option | Action |
|
|
73
|
+
| :--- | :--- |
|
|
74
|
+
| **Écraser** | Remplacer le fichier existant par le nouveau |
|
|
75
|
+
| **Conserver les deux** | Renommer l'existant en ajoutant le suffixe `.backup` avant l'extension (ex : `bootstrap.min.css` → `bootstrap.min.backup.css`), puis déplacer le nouveau avec son nom d'origine |
|
|
76
|
+
| **Garder l'existant** | Ignorer le nouveau fichier, ne rien déplacer |
|
|
77
|
+
|
|
78
|
+
**→ Attendre une décision explicite pour chaque doublon avant de continuer.** Si aucun doublon : déplacer directement.
|
|
79
|
+
|
|
80
|
+
3. **Déplacement :** Placer chaque fichier dans le sous-répertoire adapté de `theme/assets/` :
|
|
81
|
+
|
|
82
|
+
| Type | Destination |
|
|
83
|
+
|:-------|:----------------------------------|
|
|
84
|
+
| CSS | `theme/assets/css/` |
|
|
85
|
+
| JS | `theme/assets/js/` |
|
|
86
|
+
| Images | `theme/assets/img/` |
|
|
87
|
+
| Fonts | `theme/assets/fonts/` |
|
|
88
|
+
| Autres | Sous-répertoire le plus approprié |
|
|
89
|
+
|
|
90
|
+
4. **Liens internes :** Dans chaque fichier déplacé, recalculer les chemins vers ses propres dépendances (ex : un CSS qui référence des fonts ou des images) en fonction de son nouvel emplacement.
|
|
91
|
+
|
|
92
|
+
5. **Injection dans les includes :** Ajouter les liens dans les fichiers d'includes, après les liens existants et avant les fichiers de surcouche :
|
|
93
|
+
|
|
94
|
+
| Fichier | Position d'insertion |
|
|
95
|
+
|:-----------------------------------|:--------------------------------|
|
|
96
|
+
| `theme/[lg]/includes/css.html` | Avant `{Stylesheet}` |
|
|
97
|
+
| `theme/[lg]/includes/js-head.html` | Avant le script `kiubi.api.pfo` |
|
|
98
|
+
| `theme/[lg]/includes/js-body.html` | Avant `js.js` |
|
|
99
|
+
|
|
100
|
+
Encadrer les ajouts d'un commentaire d'identification :
|
|
101
|
+
```html
|
|
102
|
+
<!-- Dependances : nom-du-template -->
|
|
103
|
+
<link rel="stylesheet" href="{theme}/{lg}/assets/css/ma-dependance.css">
|
|
104
|
+
<!-- / Dependances : nom-du-template -->
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
6. **Rapport :** Produire un rapport listant :
|
|
108
|
+
- Les fichiers ajoutés et leur répertoire de destination
|
|
109
|
+
- Les liens ajoutés dans chaque fichier d'includes
|
|
110
|
+
- Les fichiers en doublon et leur renommage (ancien nom → nouveau nom)
|
|
111
|
+
|
|
112
|
+
7. **Stratégie des zones :** Utiliser le tool disponible pour inspecter les templates principaux existants et proposer une stratégie. Deux modes sont possibles :
|
|
113
|
+
|
|
114
|
+
| Mode | Description |
|
|
115
|
+
| :--- | :--- |
|
|
116
|
+
| **Zones utiles uniquement** | Conserver le code d'origine et placer uniquement les zones nécessaires pour dynamiser le template (contenu éditorial, navigation, etc.) |
|
|
117
|
+
| **Zones utiles + zones utilitaires** | Conserver le code d'origine, placer les zones utiles, et ajouter les zones utilitaires déjà présentes dans les autres templates du projet (ex : bannières, annonces, en-tête, etc.) |
|
|
118
|
+
|
|
119
|
+
Exposer les deux options avec les zones identifiées dans chaque cas. **→ Attendre une décision explicite avant de créer quoi que ce soit.**
|
|
120
|
+
|
|
121
|
+
8. **Zones et structure générale :** Créer les fichiers `index.html`, `desc.xml` et `structure.xhtml` avec les zones validées à l'étape précédente. Cette étape se concentre exclusivement sur les zones et la structure générale du template. Ne pas intégrer le contenu (billets, widgets, composants, etc.) : cela se fait séparément via le Workflow B, dans une autre demande.
|