Development #19443
Permettre l'utilisation "différée" de placeholder
0%
Description
Rappel : un placeholder c'est une zone de la page dans laquelle on peut placer plusieurs cellules.
À GNM il y a des cellules qui sont alimentées depuis des données de data.grandlyon mais il leur manque une zone "infos pratiques" et le souhait serait de pouvoir gérer cette partie depuis Publik.
On pourrait développer unconnecteur "geojson distant mais localement étendu" mais dans le cas présent, ces informations doivent uniquement être affichées sur des pages "lieu" qui sont déjà générées; mon idée est d'ajouter dans celle-ci une zone "Infos pratiques" qui permettra depuis combo d'y mettre une cellule texte ou autre, d'éditer tranquillement là les infos.
Mais ces informations doivent apparaitre au milieu d'autres et donc mon plan est celui-ci :
- pouvoir marquer des placeholders comme ne devant pas être affichés dans la page
- le template d'une page lieu aurait donc {% placeholder "infos-pratiques" name="Infos pratiques" render=False %}
- avoir dans la cellule tirant les données depuis data.grandlyon le rendu
- un appel "normal" à {% placeholder "infos-pratiques" %}
Fichiers
Révisions associées
misc: add is_empty_placeholder filter tag (#19443)
Historique
Mis à jour par Frédéric Péters il y a plus de 6 ans
- Fichier 0002-misc-add-is_empty_placeholder-filter-tag-19443.patch 0002-misc-add-is_empty_placeholder-filter-tag-19443.patch ajouté
- Fichier 0001-misc-add-placeholder-option-to-not-be-rendered-19443.patch 0001-misc-add-placeholder-option-to-not-be-rendered-19443.patch ajouté
- Statut changé de Nouveau à En cours
- Patch proposed changé de Non à Oui
Patch 0001 qui ajoute la prise en charge d'un render=False.
Patch 0002 qui ajoute une fonction supplémentaire pour les templates, me permettant de faire {% if not page|is_empty_placeholder:"infos-pratiques" %}
pour garder le markup propre.
Mis à jour par Frédéric Péters il y a plus de 6 ans
- Fichier 0001-misc-add-placeholder-option-to-not-be-rendered-19443.patch 0001-misc-add-placeholder-option-to-not-be-rendered-19443.patch ajouté
(nouvelle version du patch qui fonctionne également pour des cellules dont le rendu est asynchrone)
Mis à jour par Thomas Noël il y a plus de 6 ans
Je dois rater quelque chose : en quoi une cellule texte "info pratique" ne suffirait pas ?
Mis à jour par Frédéric Péters il y a plus de 6 ans
Pour des raisons de style / ordre des éléments, ce texte doit s'insérer à l'intérieur d'une cellule.
Mis à jour par Thomas Noël il y a plus de 6 ans
Ce que je n'aime pas dans ce qui est présenté ici, c'est qu'il faut poser un placeholder dans le template de la page. Ca serait super que la cellule indique à la page qu'elle peut contenir un ou des placeholder, et que quand on ajoute ce genre de cellule, hop, automatiquement on voit apparaitre les placeholders (même si j'avoue j'ai rien regardé pour savoir si c'est jouable). Car oui, ça résoudrait un soucis important (avoir du texte "en dur" dans certaines cellules, non éditable).
Mis à jour par Frédéric Péters il y a plus de 6 ans
Je n'avais pas du tout pensé à ça et j'étais parti pour écrire que c'était sans doute jouable mais du coup, à vérifier ça, je l'ai fait, et du coup le patch devient "découvre aussi les placeholders au sein des cellules". Il y a quand même quelques complexités, sur un exemple de cellule factures, par exemple, on aurait quelque chose de ce type :
{% if invoices %} <p>Voici la liste de vos factures.</p> {% endif %}
qu'on voudrait transformer en :
{% if invoices %} {% placeholder "intro-factures" name="Texte au-dessus des factures" %} {% endif %}
mais lors de la phase de découverte dans le manager on n'a pas envie de récupérer les factures de l'admin, et peut-être qu'il n'en n'a pas.
Du coup, le modèle va plutôt devoir être :
{% placeholder "intro-factures" name="Texte au-dessus des factures" render=False %} {% if invoices %} {% placeholder "intro-factures" %} {% endif %}
C'est-à-dire commencer par déclarer qu'il va peut-être contenir un tel placeholder.
Le résultat me semble quand même tout à fait acceptable (ce n'est pas comme dans le template, tout à fait déconnecté).
Une limitation au patch que je présente, mais je préférerais vivre avec pour le moment, c'est que les noms de placeholder doivent être uniques, et on ne peut dès lors pas avoir sur la même page deux cellules du même type déclarant le même placeholder. (en fait on peut mais les cellules partageront le même contenu de placeholder). Sur les situations rencontrées, là où le bénéfice d'une zone éditable se faisait sentir, je ne pense pas que ça soit une limitation importante.
Mis à jour par Frédéric Péters il y a plus de 6 ans
- Fichier 0001-misc-also-look-for-placeholders-within-cells-19443.patch 0001-misc-also-look-for-placeholders-within-cells-19443.patch ajouté
Et le patch.
Mis à jour par Thomas Noël il y a plus de 6 ans
Chicos. Je pense qu'il manque des tests non ? J'ai essayé "en vrai", ça semble ok. Bien sûr il ne faut pas oublier le {% load combo %}
quand on veut ajouter des placeholder, c'est normal. Le rendu HTML va donner des cellules imbriquées (et c'est bien logique, elles le sont) : sera-ce facile à gérer selon toi ?
Mis à jour par Frédéric Péters il y a plus de 6 ans
Yep, un peu de tests demain. Sur le rendu il y aura sans doute une base de style "cellule dans une cellule" à mettre, je pense notamment qu'il faudra éliminer un peu de marges.
Mis à jour par Frédéric Péters il y a plus de 6 ans
- Fichier 0001-misc-also-look-for-placeholders-within-cells-19443.patch 0001-misc-also-look-for-placeholders-within-cells-19443.patch ajouté
Voilà avec un (astucieux) test utilisant un JsonCell pour vérifier qu'un {% placeholder %} étant présent dans son template, il est bien présenté dans l'édition de la page.
Aussi, plutôt qu'un flag internal=True pouvant être posé sur les placeholders, ça ignore simplement ceux qui n'ont pas de libellé défini.
Mis à jour par Thomas Noël il y a plus de 6 ans
Ack
Peut-être que ça pourrait être le moment de mettre à jour le README sur ces histoires de placeholder ? (mais dans un ticket à venir, ça me va aussi, le README n'est pas faux ici)
Mis à jour par Frédéric Péters il y a plus de 6 ans
- Statut changé de En cours à Résolu (à déployer)
Oui, de manière proche je devrais reprendre une documentation sur les thèmes, les placeholders, les cellules json.
commit 7ff033f136979a8819e15e57b8d4909458f04ad1 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Sat Oct 14 22:28:30 2017 +0200 misc: add is_empty_placeholder filter tag (#19443) commit 96208f1f4001f63181214524f52981a5249b0d27 Author: Frédéric Péters <fpeters@entrouvert.com> Date: Sat Oct 14 22:08:21 2017 +0200 misc: also look for placeholders within cells (#19443)
Mis à jour par Frédéric Péters il y a plus de 5 ans
- Statut changé de Résolu (à déployer) à Solution déployée
misc: also look for placeholders within cells (#19443)