Project

General

Profile

Development #11006

cellule générique "liens"

Added by Frédéric Péters over 4 years ago. Updated 10 months ago.

Status:
Solution déployée
Priority:
Bas
Start date:
20 May 2016
Due date:
% Done:

0%

Estimated time:
Patch proposed:
Yes
Planning:
No

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

Related to w.c.s. - Development #37980: Pouvoir mettre un formulaire dans plusieurs catégoriesRejeté26 Nov 2019

Actions

Associated revisions

Revision 24619ce6 (diff)
Added by Lauréline Guérin 10 months ago

cells: add a cell type "list of links" (#11006)

History

#2

Updated by Marie Kuntz about 1 year ago

  • Priority changed from Normal to Bas
  • Target version set to Wishlist
#3

Updated by Benjamin Dauvergne about 1 year ago

  • Related to Development #37980: Pouvoir mettre un formulaire dans plusieurs catégories added
#4

Updated by Lauréline Guerin 11 months ago

  • Assignee set to Lauréline Guerin
#5

Updated by Frédéric Péters 11 months 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)

#6

Updated by Lauréline Guerin 11 months 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 ?

#8

Updated by Frédéric Péters 11 months 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.

#9

Updated by Lauréline Guerin 11 months ago

Je n'ai touché à rien depuis ton commentaire précédent :)

Ok merci pour les éclaircissements, je vais partir là-dessus

#11

Updated by Lauréline Guerin 11 months 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 !

#12

Updated by Lauréline Guerin 11 months ago

n'importe quoi, mauvais ticket ...
je nettoie

#13

Updated by Lauréline Guerin 11 months ago

  • File deleted (0005-toulouse_axel-pre_process-the-payload-before-schema-.patch)
#14

Updated by Lauréline Guerin 11 months ago

  • File deleted (0004-toulouse_axel-some-values-are-not-editable-38543.patch)
#15

Updated by Lauréline Guerin 11 months ago

  • File deleted (0002-toulouse_axel-handle-handicap-fields-38543.patch)
#16

Updated by Lauréline Guerin 11 months ago

  • File deleted (0003-toulouse_axel-handle-allergie-fields-38543.patch)
#17

Updated by Lauréline Guerin 11 months ago

  • File deleted (0001-toulouse_axel-partial-update-38543.patch)
#18

Updated by Frédéric Péters 11 months 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.

#20

Updated by Frédéric Péters 11 months 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.

#22

Updated by Frédéric Péters 10 months ago

  • Status changed from Solution proposée to Solution validée
#23

Updated by Lauréline Guerin 10 months 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)
#24

Updated by Frédéric Péters 10 months ago

  • Status changed from Résolu (à déployer) to Solution déployée

Also available in: Atom PDF