Closed marcantoinedupre closed 6 months ago
Implémentation d'une arborescence pour les pages
Suite discussion il est acté que les pages seront organisées dans une arborescence de pages. Il y aura donc deux arborescences d'entités : l'arborescence des menus et l'arborescence des pages.
La différence par rapport à la conception précédente est qu'une page ne pourra avoir qu'une seule page parente.
Quelques éléments pour la migration [pages statiques] vers [pages v2 + menu items]
Si les 2 champs « Lien externe » et « Contenu » comporte des données idéalement la migration devrait être stoppée et l'anomalie remontée pour résolution préalable.
Notes sur le champ « Cible »
/api/v2/flatpage/?portals=1,2
: retournera les pages associées directement aux portails 1 ou 2 OU indirectement via un menu associé à ces portails (et que la valeur plateforme cible de ce menu indique une diffusion via l'API).Notes sur la notion de page publiée
Fait dans la 2.104.0 (nécessite Geotrek-rando 3.19+) avec la création d'un objet "Elément de menu" complémentaire aux pages statiques, et qui pilote donc le menu désormais. Voir doc : https://geotrek.readthedocs.io/en/latest/usage/static-pages.html
Je propose d'introduire un nouveau type d'entité Élément Menu (MenuItem).
Objectifs :
séparer les concepts actuellement portés par le modèle Page Statique
L'implémentation actuelle du modèle Page Statique embarque plusieurs concepts différents :
Ce travail d'ajout de fonctionnalités pour les pages statiques est l'occasion de séparer ces concepts et clarifier ce modèle. Le modèle Page Statique conservera uniquement le concept d'une page éditorial et de son contenu. Le nouveau modèle Entrée de menu (MenuItem) portera le concept d'une entrée de menu dans des menus arborescents avec une possible cible définie (page, lien interne ou externe, page des actualités).
implémenter l'arborescence de menu
Les objets Entrées de menu seront liées entre eux de façon arborescente, soit au moyen d'un champ "parent" ou avec l'implémentation fournie par une app Django comme
django-treebeard
oudjango-mptt-admin
. L'intérêt d'une app Django est de bénéficier d'une vue arborescente dans le AdminSite.Maquette de l'interface
admin
: vues listes + formulairesPour l'arborescence suivante :
Types de contenu :
Et les pages hors-arborescence :
(fichier zip avec maquettes Excalidraw)
Champs de formulaire pour les modèles Page Statique et Entrée Menu
Inventaire pour donner une idée de la séparation entre les 2 modèles :
Champs de Page Statique (modèle
FlatPage
)Champs de Élément Menu (modèle
MenuItem
)Migration depuis l'existant
pas de rétro-compatibilité de l'API
/api/v2/version
pourrait être utile en plus de la documentation appropriée).protections/contraintes
Certaines propriétés actuelles (visibilité, cible web/mobile, publication(?) ) devraient se propager du parent vers le bas de l'arborescence. Par exemple : ça n'a pas de sens d'avoir des Élément de Menu enfants visibles si le parent ne l'est pas. Je propose de limiter l'édition de certains attributs aux entités de premier niveau (c-à-d sans parent).
All
,Web
,Mobile
) sur un MenuItem de premier niveau.questions fonctionnelles