Développement #11006
cellule générique "liens"
0%
Description
Une cellule type "liste de liens" où chaque lien serait défini par un type (ex: "url" ou "formulaire wcs") et d'éventuelles options (ex: un champ pour taper l'url, un <select> pour choisir un formulaire).
Files
Related issues
Associated revisions
History
Updated by Marie Kuntz over 5 years ago
- Priority changed from Normal to Bas
- Target version set to Wishlist
Updated by Benjamin Dauvergne over 5 years ago
- Related to Développement #37980: Pouvoir mettre un formulaire dans plusieurs catégories added
Updated by Frédéric Péters over 5 years ago
(juste en passant, je veux bien prendre du temps là-dessus à mon retour, bien sûr).
Le truc important de la description : chaque lien serait défini par un type (ex: "url" ou "formulaire wcs"), genre il faudrait que combo.apps.wcs puisse exposer l'info qu'il existe des liens de type "démarches", qui correspondraient à ce qu'on a dans les attributs de WcsFormCell, des liens de type "pages" qui correspondait à l'id de la page, des liens de type "url" qui auraient titre/url, etc. il y a peut-être un truc à inventer en réutilisant/qualifiant les cellules LinkCell/WcsFormCell comme étant des cellules "liens", qu'elles soient créées/mises dans un placeholder au nom particulier, etc.
(désolé encore d'être bref ici)
Updated by Lauréline Guérin over 5 years ago
Alors, j'en ai discuté un peu avec Thomas N, car comme tu étais en congés je ne pouvais pas te déranger :)
Je ne savais pas où poser cette nouvelle cellule: elle concerne à la fois des concepts génériques (Lien externe ou lien interne, cellule LinkCell codée dans data.models) toujours disponibles et des concepts w.c.s. (WcsFormCell dans apps.wcs.models) disponibles uniquement si un w.c.s. a été déployé.
En discutant donc, on est arrivés à la conclusion qu'il pourrait être intéressant de développer 2 cellules:- une première cellule qui gère une liste de liens internes et externes seulement, codée dans data.models
- une autre cellule accessible si un w.c.s. est déployé, qui gère une liste de liens internes, externes, et des liens vers des démarches, codée dans apps.wcs.models
Je suis partie dans cette direction, avec dans l'idée de d'abord me faire la main sur la première cellule, puis de faire sa jumelle.
Dans ma branche, il y a cette première cellule. J'ai volontairement faire un truc simple (pas de formset, peu de JS en dehors du JS d'ordering). Pour le moment ça ressemble à (cf pièces jointes)
Piste d'amélioration:- sans toucher au model LinkItem, proposer 2 formulaires (et 3 pour la cellule w.c.s), un formulaire par type de lien, pour que ce soit plus clair.
- découper le model LinkItem en 2 models distincts (InternalLink, ExternalLink), proposer un WcsFormLink et utiliser ces models pour les cellules de lien unique et les cellules de liste de liens.
- Plus: ça permet de bien factoriser le code
- Moins: performances. Plus de jointures, et ça va être plus compliqué de faire des prefetch ou autres select_related pour améliorer la situation à cause de la diversité des models
Je pensais mettre ça en pause, et attendre ton retour de congé pour en discuter, ça te va ?
Updated by Frédéric Péters over 5 years ago
J'espérais stopper un peu les choses en posant mon commentaire précédent :) Comment je vois les choses :
En gros, une cellule, LinkListCell, ok très bien.
Mais ce qui va dedans, ça ne doit pas être un nouvel objet, ça doit être basé sur ce qu'on a déjà, LinkCell, WcsFormCell.
À ces classes on ajouterait un attribut quelconque, add_as_link_label = _('add a link'), add_as_link_label = _('add a form link').
En bas de la cellule, à la place du "Add a link", on aurait donc une série de ces libellés.
Cliquer dessus, popup, qui affichera le formulaire du get_default_form_class() de la classe.
Validation de la popup, enregistrement de l'objet ("cellule"), avec dedans quelque chose comme placeholder = 'linkslist:%(pk)s'.
Affichage dans la cellule "liste de liens" comme tu le fais, en prenant la liste des cellules de la page qui ont placeholder == '...'.
Sans doute ajouter aux différentes cellules une interface commune, get_label(), get_target(), get_description(), qui seront appelés pour le rendu de la cellule.
Réfléchir aux différentes trucs, export/import, duplication de page, comme tu l'as déjà fait.
Bref, je dirais remplacer LinkItem par les objets existants, et la liaison ForeignKey qui se faisait dedans par une valeur dans l'attribut placeholder.
Updated by Lauréline Guérin over 5 years ago
Je n'ai touché à rien depuis ton commentaire précédent :)
Ok merci pour les éclaircissements, je vais partir là-dessus
Updated by Lauréline Guérin over 5 years ago
- File 0002-cells-add-a-cell-type-list-of-links-11006.patch 0002-cells-add-a-cell-type-list-of-links-11006.patch added
- File 0001-misc-middleware-compatibility.patch 0001-misc-middleware-compatibility.patch added
- Status changed from Nouveau to Solution proposée
- Patch proposed changed from No to Yes
Updated by Lauréline Guérin over 5 years ago
- File 0005-toulouse_axel-pre_process-the-payload-before-schema-.patch added
- File 0004-toulouse_axel-some-values-are-not-editable-38543.patch added
- File 0003-toulouse_axel-handle-allergie-fields-38543.patch added
- File 0002-toulouse_axel-handle-handicap-fields-38543.patch added
- File 0001-toulouse_axel-partial-update-38543.patch added
hop, dernière ligne droite !
Updated by Lauréline Guérin over 5 years ago
- File deleted (
0005-toulouse_axel-pre_process-the-payload-before-schema-.patch)
Updated by Lauréline Guérin over 5 years ago
- File deleted (
0004-toulouse_axel-some-values-are-not-editable-38543.patch)
Updated by Lauréline Guérin over 5 years ago
- File deleted (
0002-toulouse_axel-handle-handicap-fields-38543.patch)
Updated by Lauréline Guérin over 5 years ago
- File deleted (
0003-toulouse_axel-handle-allergie-fields-38543.patch)
Updated by Lauréline Guérin over 5 years ago
- File deleted (
0001-toulouse_axel-partial-update-38543.patch)
Updated by Frédéric Péters over 5 years ago
+ return CellBase.get_cells(page=self.page, placeholder=self.link_placeholder)
Tu peux ici ajouter un paramètre cell_filter, genre cell_filter=lambda x: getattr(x, 'add_link_label'), pour limiter les requêtes SQL qui auront lieu aux seuls modèles possibles. Même si en passant page=self.page on obtient déjà un filtre aux seuls types de cellule présents sur la page. Et écrivant ça je me demande si justement c'est souhaitable, si ça ne va pas faire foirer le cas où la cellule "liste de liens" est posée sur une page parente, dans un placeholder "hérité".
De là je me demande si de toute façon ce qu'il faudrait arriver à faire ne serait pas dans get_cell_extra_context() exploiter "page_cells" qui doit être dans le contexte (via publish_page), et reprendre toutes les cellules, directement sur la page, ou héritées, plutôt que passer par get_items() qui fera de nouvelles requêtes dans la db.
~~
Sur le reste je ne pense pas avoir de remarque importante, pour le rendu, tu peux adapter le style de la liste des liens en faisant :
+<div class="links-list"> <ul> {% for link in links %} <li><a href="{{ link.url }}">{{ link.title }}</a></li> {% endfor %} </ul> +</div>
et regarder le rendu me fait penser qu'on devrait avoir un champ titre (optionnel) sur cette cellule.
Updated by Lauréline Guérin over 5 years ago
- File 0001-cells-add-a-cell-type-list-of-links-11006.patch 0001-cells-add-a-cell-type-list-of-links-11006.patch added
remarques prises en compte :)
Updated by Frédéric Péters over 5 years ago
À tester il y avait un problème de variable "page" pas dans le contexte après un submit du formulaire d'édition, aussi après ce submit et la mise à jour ajax du formulaire d'édition le dragndrop ne fonctionnait plus; comme je comptais de toute façon changer ce tableau pour en faire une liste avec des icônes, j'ai repris ça (en déplaçant le js dans le gabarit même).
Je te laisse regarder et intégrer ça dans ton commit si c'est ok pour toi.
Updated by Lauréline Guérin over 5 years ago
- File 0001-cells-add-a-cell-type-list-of-links-11006.patch 0001-cells-add-a-cell-type-list-of-links-11006.patch added
patch intégré, merci :)
Updated by Frédéric Péters about 5 years ago
- Status changed from Solution proposée to Solution validée
Updated by Lauréline Guérin about 5 years ago
- Status changed from Solution validée to Résolu (à déployer)
commit 24619ce6dbaed88f6f8d30771378a98cc95ad8f0 Author: Lauréline Guérin <zebuline@entrouvert.com> Date: Tue Jan 7 15:27:44 2020 +0100 cells: add a cell type "list of links" (#11006)
Updated by Frédéric Péters about 5 years ago
- Status changed from Résolu (à déployer) to Solution déployée
cells: add a cell type "list of links" (#11006)