Implémentation et utilisation des macros Freemarker dans les templates
Le rendu des macros par framework est visible sur le style Guide BO.
Table des matières
- Les macros
- Structure de la page
- Lignes et colonnes
- Formulaires
- Composants dynamiques
- Icônes
Les macros
Les macros visent à remplacer le code HTML dans le but de réduire la maintenance et de faciliter les migrations à d’autres frameworks CSS. Elles contiennent une présentation homogène et cohérente pensée pour l’ensemble des pages du back-office, de ce fait, leur usage est réservé au back office.
Les macros ressemblent à du HTML pour que cela reste lisible, mais aussi à du HTML avec classes Bootstrap puisqu’elles ont été écrites initialement pour fonctionner avec ce framework CSS. Certains noms de macros font donc référence à des composants Bootstrap. Pour plus d’informations sur ces composants, veuillez consulter la documentation.
Beaucoup de paramètres de macros correspondent simplement aux attributs HTML du même nom (name, id, title, type, href, class, action…).
D’autres paramètres font appel à des fonctions et permettent d’ajouter des classes pour répondre à des besoins de présentation :
hide=['all'|'xs','sm','md','lg','xl']
: Ce paramètre permet de spécifier la visibilité d’un élément. Soit on le cache pour tous les breakpoints (‘all’), soit on le cache pour certains breakpoints (xs, sm, md, lg, ou xl).align='left|right|center'
: permet de gérer l’alignement d’un élément dans la page.
Enfin, ce paramètre permet d’ajouter d’autres attributs :
params
: permet d’ajouter d’autres éléments non inclus dans les paramètres de la macro pour plus de souplesse.
Ces paramètres se retrouvent communément dans la plupart des macros.
Structure de la page
Sans onglets
{@pageContainer
{@pageColumn
{@pageHeader title=''}
Boutons d'action
{/pageHeader}
Contenu la page
{/pageColumn}
{/pageContainer}
La macro columns
inclut la possibilité d’utiliser le système de grilles du framework CSS avec les paramètres xs
, sm
, md
, lg
et xl
. Les paramètres de type offset
permettent de décaler les colonnes sur la grille.
Avec onglets
{@pageContainer
{@pageColumn
{@pageHeader title=''}
Boutons d'action
{/pageHeader}
{@tabs
{@tabList
{@tabLink href='panel1' active=true title='' /}
{@tabLink href='panel2' title='' /}
{/tabList}
{@tabContent
{@tabPanel id='panel1' active=true}
...
{/tabPanel}
{@tabPanel id='panel2'}
...
{/tabPanel}
{/tabContent}
{/tabs}
{/pageColumn}
{/pageContainer}
Lignes et colonnes
Le système de grilles est utilisable avec les macros de la façon suivante :
row
pour une nouvelle lignecolumns
pour les colonnes avec les valeurs correspondant aux breakpoints (de 1 à 12 colonnes) avec les paramètresxs
,sm
,md
,lg
etxl
prenant des valeurs de 1 à 12 ainsi que des paramètresoffset
pour décaler les colonnes.
{@row
{@columns
...
{/columns}
{@row}
Formulaires
Le formulaire
La macro tform
sert à afficher les éléments de type form.
Paramètres :
type
: horizontal ou inline
La macro fieldSet
permet de grouper les champs et incorpore la légende de chaque groupe.
{@tform method='post' action=''
{@fieldSet legend=''} ... {/fieldSet}
...
{/tform}
Les éléments de formulaires
Tous les éléments de formulaire doivent être inclus dans des conteneurs formGroup
:
{@formGroup labelFor='' labelKey='' helpKey=''
Ici l'élément de formulaire
{/formGroup}
labelFor
fait référence à l’attribut name
du type de champ inclus dans le formGroup
(indispensable pour cocher un bouton radio ou une case à cocher en cliquant sur le label par exemple), labelKey
correspond au contenu du label du champ, et helpKey
contient le texte d’aide du champ.
Le paramètre mandatory
est hérité par le champ enfant, auquel sera automatiquement ajouté l’attribut required
. Une astérisque sera également ajoutée au label pour indiquer visuellement le caractère obligatoire du champ.
L’attribut groupStyle
de la macro formGroup
permet d’ajouter dynamiquement une classe au champ, après soumission du formulaire, afin de représenter son état d’erreur ou de succès, par exemple.
Input text, search, password, email, file, number, hidden
{@formGroup labelFor='' labelKey='' helpKey=''
{@input type='text' name='' id='' value='' /}
{/formGroup}
{@formGroup labelFor='' labelKey='' helpKey=''
{@input type='search' name='' id='' value='' /}
{/formGroup}
{@formGroup labelFor='' labelKey='' helpKey=''
{@input type='password' name='' id='' value='' /}
{/formGroup}
{@formGroup labelFor='' labelKey='' helpKey=''
{@input type='email' name='' id='' value='' /}
{/formGroup}
{@formGroup labelFor='' labelKey='' helpKey=''
{@input type='file' name='' id='' value='' /}
{/formGroup}
{@formGroup labelFor='' labelKey='' helpKey=''
{@input type='number' name='' id='' value='' /}
{/formGroup}
{@formGroup labelFor='' labelKey='' helpKey=''
{@input type='hidden' name='' id='' value='' /}
{/formGroup}
Input date, datetime, daterange, time
Input date
{@formGroup labelFor='' labelKey='' helpKey=''
{@input type='date' name='' id='' value='' /}
{/formGroup}
Input datetime
{@formGroup labelFor='' labelKey='' helpKey=''
{@input type='datetime' name='' id='' value='' /}
{/formGroup}
Input time
{@formGroup labelFor='' labelKey='' helpKey=''
{@input type='time' name='' id='' value='' /}
{/formGroup}
Input time avec limites :
{@formGroup labelFor='' labelKey='' helpKey=''
{@input type='time' name='' id='' value='' minTime='16:00' maxTime='22:30' /}
{/formGroup}
Input time avec une valeur par défaut :
{@formGroup labelFor='' labelKey='' helpKey=''
{@input type='time' name='' id='' value='' defaultDate='13:45' /}
{/formGroup}
Ranges
C’est un plugin de FlatPickr qui fournit cette fonctionnalité (js/admin/bootstrap-flatpickr-rangePlugin.js).
Input daterange
{@formGroup labelFor='' labelKey='' helpKey=''
{@input type='daterange' dateRangeEndId='' name='' id='' value='' /}
{/formGroup}
Le paramètre dateRangeEndId
doit être renseigné sur le premier champ date, rien pour le second (qui peut même être de type text).
Input datetimerange
{@formGroup labelFor='' labelKey='' helpKey=''
{@input type='datetimerange' name='' id='' value='' /}
{/formGroup}
Textarea
{@formGroup labelFor='' labelKey='' helpKey=''
{@input type='textarea' name='' id='' value='' /}
{/formGroup}
Select
Toutes les macros combo
doivent être remplacées par la macro select
qui couvre les différents cas d’usage des anciennes macros combo.
Select avec liste de valeurs
{@select name='page_template_code' id='page_template_code'
{@hashmark;list pages_list as key, value
<option value="${key}">${value}</option>
{/hashmark;list}
{/select}
{@select name='order_id' id='order_id-${group.id?html}' default_value=group.order?string items=order_list sort=true size='sm' /}
Select avec contenu HTML uniquement
{@select id='status' name='status'
{@hashmark;if default_user_status = 1
<option value="0">Activé</option>
<option value="1" selected="selected">Désactivé</option>
{@hashmark;else
<option value="0" selected="selected">Activé</option>
<option value="1">Désactivé</option>
{/hashmark;if}
{/select}
Checkbox
{@checkBox labelFor='status1' labelKey='Status' name='status' id='status1' value='1' /}
Le paramètre labelFor
doit correspondre à l’ID de la checkbox.
Radio button
{@radioButton labelFor='form_id' labelKey='Form' name='form' id='form_id' value='2' /}
Le paramètre labelFor
doit correspondre à l’ID du bouton radio.
Boutons
Button
Exemple de bouton de validation simple d’un formulaire :
{@button type='submit' title='Modifier' buttonIcon='check' /}
Exemple de bouton Annuler
:
{@button type='submit' name='cancel' value='cancel' buttonIcon='times' title='Annuler' cancel=true size='' /}
Paramètres :
- Le paramètre
cancel
ajoute l’attributformnovalidate
au bouton ainsi qu’une couleur différente d’un bouton de soumission du formulaire. - Le paramètre
formId
permet de lier le bouton au formulaire dans le cas où, pour des besoins de présentation, le bouton se trouverait à l’extérieur du formulaire. - Le paramètre
buttonTargetId
permet de lier un bouton de type button à un autre élément de la page (un div, par exemple) afin d’utiliser les fonctionnalités JavaScript de typecollapse
ouremove
.
aButton
Cette macro représente un lien simple sous la forme d’un bouton, avec la classe associée.
{@aButton href='jsp/admin/AdminLogin.jsp' title='Annuler' buttonIcon='close' /}
{@aButton href='jsp/admin/features/RemoveExternalFeature.jsp?external_feature_id=${external_feature.id}' title='Supprimer' hideTitle=['all'] buttonIcon='trash' color='danger' size='sm' /}
Groupes d’éléments ou de boutons
inputGroup
Cette macro et sa sous-macro inputGroupItem
permettent de grouper un champ et un bouton (sous forme de bouton ou de texte). Le bouton peut être placé à gauche ou à droite en fonction de si on place inputGroupItem
avant ou après le champ.
{@inputGroup
{@input type='text' /}
{@inputGroupItem
{@button type='submit' /}
{/inputGroupItem}
{/inputGroup}
btnGroup
Cette macro permet de grouper des boutons.
{@btnGroup
{@button type='button' /}
{@button type='submit' /}
{@aButton href='' /}
{/btnGroup}
Composants dynamiques
Accordéon
{@accordionContainer id='PARENT_ID'
{@accordionPanel collapsed=true childId='CHILD_ID'
{@accordionHeader title='Header Title' id='HEADER_ID' parentId='PARENT_ID' /}
{@accordionBody
Contenu
{/accordionBody}
{/accordionPanel}
{/accordionContainer}
Exemple d’accordéon avec une liste :
{@accordionContainer id='accordion'
{@hashmark;list groups_list as group
{@accordionPanel collapsed=true childId='${group.id}_child'
{@accordionHeader title='${group.name}' id='${group.id}_header' /}
{@accordionBody
<p>${group.description}</p>
{/accordionBody}
{/accordionPanel}
{/hashmark;list}
{/accordionContainer}
Notes :
- Le paramètre
childId
de la macroaccordionPanel
correspond à l’ID de l’élément collapsableaccordionBody
. L’ID de l’élément lui est ajouté par la macro.
Boutons collapse/expand
- Les styles possibles sont
card-control collapse
etcard-control remove
.
Bouton collapse
{@button type='button' title='Button' style='card-control collapse' buttonTargetId='#example' buttonIcon='minus' size='sm' /}
Notes :
- Si le paramètre
buttonIcon
contientminus
: élément cible visible au chargement de la page, clic sur le bouton pour réduire. - Si le paramètre
buttonIcon
contientplus
: élément cible non visible au chargement de la page, clic sur le bouton pour afficher.
Élément cible :
{@div id='example'}
{/div}
Bouton remove
Ce bouton concerne les widgets de l’admin dashboard.
{@button style='card-control remove' buttonTargetId='#site_dashboard_last_page' buttonIcon='times' size='sm' /}
Icônes
La macro icon
permet d’insérer un icône de la librairie Font Awesome 5 :
{@icon style='question-circle' /}
La librairie de tous les icônes de la version 5 est disponible **[sur le site de Font Awesome](https://fontawesome.com/icons?d=gallery&