Projet

Général

Profil

Development #11006

cellule générique "liens"

Ajouté par Frédéric Péters il y a presque 8 ans. Mis à jour il y a environ 4 ans.

Statut:
Fermé
Priorité:
Bas
Assigné à:
Début:
20 mai 2016
Echéance:
% réalisé:

0%

Temps estimé:
Patch proposed:
Oui
Planning:
Non

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).


Fichiers


Demandes liées

Lié à w.c.s. - Development #37980: Pouvoir mettre un formulaire dans plusieurs catégoriesRejeté26 novembre 2019

Actions

Révisions associées

Révision 24619ce6 (diff)
Ajouté par Lauréline Guérin il y a environ 4 ans

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

Historique

#2

Mis à jour par Marie Kuntz il y a plus de 4 ans

  • Priorité changé de Normal à Bas
  • Version cible mis à Wishlist
#3

Mis à jour par Benjamin Dauvergne il y a plus de 4 ans

  • Lié à Development #37980: Pouvoir mettre un formulaire dans plusieurs catégories ajouté
#4

Mis à jour par Lauréline Guérin il y a environ 4 ans

  • Assigné à mis à Lauréline Guérin
#5

Mis à jour par Frédéric Péters il y a environ 4 ans

(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

Mis à jour par Lauréline Guérin il y a environ 4 ans

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

Mis à jour par Frédéric Péters il y a environ 4 ans

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

Mis à jour par Lauréline Guérin il y a environ 4 ans

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

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

#10

Mis à jour par Lauréline Guérin il y a environ 4 ans

#11

Mis à jour par Lauréline Guérin il y a environ 4 ans

  • Fichier 0005-toulouse_axel-pre_process-the-payload-before-schema-.patch ajouté
  • Fichier 0004-toulouse_axel-some-values-are-not-editable-38543.patch ajouté
  • Fichier 0003-toulouse_axel-handle-allergie-fields-38543.patch ajouté
  • Fichier 0002-toulouse_axel-handle-handicap-fields-38543.patch ajouté
  • Fichier 0001-toulouse_axel-partial-update-38543.patch ajouté

hop, dernière ligne droite !

#12

Mis à jour par Lauréline Guérin il y a environ 4 ans

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

#13

Mis à jour par Lauréline Guérin il y a environ 4 ans

  • Fichier 0005-toulouse_axel-pre_process-the-payload-before-schema-.patch supprimé
#14

Mis à jour par Lauréline Guérin il y a environ 4 ans

  • Fichier 0004-toulouse_axel-some-values-are-not-editable-38543.patch supprimé
#15

Mis à jour par Lauréline Guérin il y a environ 4 ans

  • Fichier 0002-toulouse_axel-handle-handicap-fields-38543.patch supprimé
#16

Mis à jour par Lauréline Guérin il y a environ 4 ans

  • Fichier 0003-toulouse_axel-handle-allergie-fields-38543.patch supprimé
#17

Mis à jour par Lauréline Guérin il y a environ 4 ans

  • Fichier 0001-toulouse_axel-partial-update-38543.patch supprimé
#18

Mis à jour par Frédéric Péters il y a environ 4 ans

+        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

Mis à jour par Frédéric Péters il y a environ 4 ans

À 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

Mis à jour par Frédéric Péters il y a environ 4 ans

  • Statut changé de Solution proposée à Solution validée
#23

Mis à jour par Lauréline Guérin il y a environ 4 ans

  • Statut changé de Solution validée à 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

Mis à jour par Frédéric Péters il y a environ 4 ans

  • Statut changé de Résolu (à déployer) à Solution déployée

Formats disponibles : Atom PDF