YesWiki/yeswiki

Personnaliser le rendu d'une fiche bazar

Closed this issue · 3 comments

En prévision d'un futur sprint

L'idée est de pouvoir facilement personnaliser le rendu d'une fiche bazar depuis l'interface sans avoir à créer un fichier sur le serveur dans custom/templates

Proposition

Lorsqu'on édite un formulaire, on pourrait rajouter un nouvel onglet "Rendu des fiches" avec un éditeur wiki dedans
Dans cet éditeur, en plus des fonctionnalités classique lorsqu'on édite une page, il faut pouvoir :

  1. Accéder aux valeurs brutes des champs de la fiche
  2. Afficher un champ tel qu'il aurait été affiché de manière automatique en html
  3. Accéder à la config du formulaire
  4. Ecrire directement du twig

Syntaxe/Implémentation

Prenons un exemple : pour un formulaire avec un bf_titre, bf_equipe, bf_url et bf_categories (de type checkboxes), je veux
-> afficher un titre avec bf_titre et bf_equipe dedans
-> afficher un bouton qui renvoie vers bf_url
-> afficher les catégories de manière automatique

Moustaches

Note: Il faudra ajouter une option lors du Formatter wakka pour dire "si l'action n'est pas trouvée, laisse le texte comme ça" plutot que de mettre le message "Action bf_titre n'existe pas"
Avantages: Ca ressemble à une syntaxe classique yeswiki, et on peut écrire du twig
Inconvenient: L'autocompletion quand on tape {{ mélangera le nom des actions et le nom des champs. Ou alors dans ce contexte on désactive l'autocompletion du nom des actions.

==={{bf_titre}} - {{bf_equipe}}===
{{button link="{{bf_url}}" text="Site web"}}
{{field id="bf_categories" label="Les catégories"}}

{# Autre exemple avec twig #}
""
<h1>{{ bf_titre|uppercase }} - {{bf_equipe}}</h1>

{% for option in bf_categories %}
	<li>Category value = {{ option }} label = {{ form.bf_categories.options[option] }}
{% endfor %}
""

Crochets

Avantages: Pas de conflits de syntaxe. On peut facilement faire de l'autocompletion
Inconvenient: Pour twig, faudrait changer le delimiteur

===[[bf_titre]] - [[bf_equipe]]===
{{button link="[[bf_url]]" text="Site web"}}
{{field id="bf_categories" label="Les catégories"}}

{# Autre exemple avec twig #}
""
<h1>[[ bf_titre|uppercase ]] - [[bf_equipe]]</h1>

[% for option in bf_categories %]
	<li>Category value = [[ option ]] label = [[ form.bf_categories.options[option] ]]
[% endfor %]
""

Variantes pour l'affichage du rendu automatisé d'un champ

{{render field="bf_categories" label="Les catégories"}}
{{bazarfield id="bf_categories" label="Les catégories"}}
{{bazarentry field="bf_categories" label="Les catégories"}}

Spécifier de quelle manière on veut faire le rendu

Par default ça utilise le type de champ déclaré dans le formulaire

{{field id="bf_url" as="text" label="l'url en mode plain text"}}

Petit extra

Un bouton special dans la toolbar pour selectionner quel champ on veut afficher et que ça insère {{bf_equipe}} dans l'éditeur quand on selectionne bf_equipe dans la popup

Personnaliser aussi le bazarliste

On pourrait utiliser la même syntaxe mise en place afin de personaliser le rendu des bazarliste. Pour le template card par example, plutôt que de dire "dans la zone de titre affiche le champ bf_titre" on pourrait dire "dans la zone de titre affiche le rendu de Equipe {{bf_titre}} ({{bf_equipe}})

J9rem commented

sans me prononcer sur telle ou telle proposition, je pense qu'il serait pratique de maintenir la rétro-compatibilité dans twig pour que {{ ... }} reste considérer comme délimiteur afin de ne pas avoir tous les twig custom à réécrire, .... (ou les twig des extensions)

c'est bon ça coco !!!