Novius OS est nativement multi-contextes. Mais chaque application décide de la façon dont elle utilise les contextes. Trois cas de figures.
Le cas le plus simple. Une application n’implémente pas la notion de contexte. C’est le cas par défaut, elle n’a rien à faire.
Son contenu sera alors le même quelque soit le contexte et elle pourra être utilisée (via ses enhancers) dans n’importe quel contexte.
L’application utilise les contextes. Chaque item est associé à un contexte et ne peut être utilisé que dans son contexte.
Techniquement les tables de l’application auront un champ context de type varchar(25) contenant le code du contexte et les Models de l’application implémenteront le behaviour Contextable.
L’application utilise les contextes et crée des ponts entre-eux. Chaque item est associé à un contexte et peut-être lié à d’autres items de contextes différents.
Techniquement les tables de l’application auront 3 champs :
context: | de type varchar(25) et contenant le code du context de l’item. |
---|---|
common_id_property: | |
de type int et contenant un ID commun aux items liés entre-eux. | |
is_main_property: | |
de type boolean, chaque groupe d’items liés entre-eux a un seul item principal. |
Les Models de l’application implémenteront le behaviour Twinnable.
Struture de la table d’exemple :
Créons un premier item :
item_id | item_context | item_common_id_property | item_is_main_property | item_title |
---|---|---|---|---|
1 | main::fr_FR | 1 | 1 | Premier item |
Ajoutons un autre item, dans un autre contexte, et lié au premier item :
item_id | item_context | item_common_id_property | item_is_main_property | item_title |
---|---|---|---|---|
1 | main::fr_FR | 1 | 1 | Premier item |
2 | main::en_GB | 1 | 0 | First item |
Observons la table après plusieurs ajouts :
item_id | item_context | item_common_id_property | item_is_main_property | item_title |
---|---|---|---|---|
1 | main::fr_FR | 1 | 1 | Premier item |
2 | main::en_GB | 1 | 0 | First item |
3 | main::en_GB | 3 | 1 | Second item |
4 | main::fr_FR | 3 | 0 | Second item (fr) |
5 | event::fr_FR | 5 | 1 | Item du site event |
6 | main::es_ES | 1 | 0 | First item (es) |
Supprimons l’item 1 :
item_id | item_context | item_common_id_property | item_is_main_property | item_title |
---|---|---|---|---|
2 | main::en_GB | 1 | 1 | First item |
3 | main::en_GB | 3 | 1 | Second item |
4 | main::fr_FR | 3 | 0 | Second item |
5 | event::fr_FR | 5 | 1 | Item du site vent |
6 | main::es_ES | 1 | 0 | First item |
L’item 2 a récupéré le rôle principal, mais l’item_common_id_property du 2 et du 6 n’a pas changé.