4.5.4 getTemplates
La méthode getTemplates
permet de modifier les templates utilisés
lors de la génération du document et des attributs.
Cette méthode retourne un tableau de templates mustache.
4.5.4.1 gérer les modèles
La méthode getTemplates
retourne un array
à plusieurs niveaux.
Le premier niveau est
body
-
pour définir le template du corps du document.
Le template est alors défini par une des clés suivantes :
file
-
Le template utilisé est identifié par un fichier le contenant.
Le chemin de ce fichier est relatif au répertoire d'installation de Dynacase.
content
- Le template utilisé est directement indiqué sous la forme d'une chaîne de caractères.
Lorsque les clés
file
etcontent
sont toutes deux non vides, la clécontent
ets utilisée et la cléfile
est ignorée. sections
-
pour définir le template d'une section du document.
Dans ce cas,
sections
est un tableau à 2 niveaux.Le premier niveau est le nom de la section
-
Le second niveau est une des clés suivantes :
file
-
Le template utilisé est identifié par un fichier le contenant.
Le chemin de ce fichier est relatif au répertoire d'installation de Dynacase.
content
- Le template utilisé est directement indiqué sous la forme d'une chaîne de caractères.
Lorsque les clés
file
etcontent
sont toutes deux non vides, la clécontent
ets utilisée et la cléfile
est ignorée.
Les modèles sont parsés côté client et côté serveur, et plusieurs clés sont utilisables.
4.5.4.2 Corps du document : body
Le corps du document est constitué de 4 sections :
- L'entête
- Le menu
- Le contenu
- Le pied
Son template par défaut est le suivant :
{{> header}} {{> menu}} {{> content}} {{> footer}}
Cette définition peut être modifiée au moyen de la clé body
du tableau de templates pour ajouter des éléments HTML entre les
sections ou tout simplement pour supprimer une ou plusieurs sections.
Exemple : Insérer un titre entre chaque section.
class MyRenderConfigCustom extends \Dcp\Ui\DefaultView { public function getTemplates(\Doc $document = null) { $templates=parent::getTemplates($document); $templates["body"]["file"]="MY/customDocument.mustache"; return $templates; } }
Fichier MY/customDocument.mustache
:
<h1>Pre Header</h1> {{> header}} <h1>Post Header</h1> {{> menu}} <h1>Post Menu</h1> {{> content}} <h1>Post Content</h1> {{> footer}} <h1>Post Footer</h1>
Le pied de page, de par sa css, est
toujours affiché en bas du document. Pour afficher des éléments
plus bas que le pied de page, il faut modifier la css
(classe dcpDocument__footer
).
Chacune des sections peut être personnalisée au moyen d'un modèle de section.
4.5.4.3 Sections
Les sections peuvent être modifiées au moyen de la clé sections
du tableau de templates.
4.5.4.3.1 Entête du document : header
L'entête du document est la section header
de la catégorie sections
.
Le template par défaut de la section header
est le suivant (version simplifiée) :
<header class="dcpDocument__header"> <img class="dcpDocument__header__icon" src="{{document.properties.icon}}" alt="Document icon"/> <a class="dcpDocument__header__title" href="api/v1/documents/{{document.properties.id}}.html">{{document.properties.title}}</a> <div class="dcpDocument__header__family">{{document.properties.family.title}}</div> </header>
Le template complet comporte des éléments plus spécifiques qui sont fonction du mode de rendu et aussi du fait d'afficher une révision passée ou non. Dans tous les cas, les trois éléments indiqués sont présent.
Exemple : Afficher uniquement le titre.
class MyRenderConfigCustom extends \Dcp\Ui\DefaultView { public function getTemplates(\Doc $document = null) { $templates=parent::getTemplates($document); $templates["sections"]["header"]["file"]="MY/customHead.mustache"; return $templates; } }
Fichier MY/customHead.mustache
:
<h1>{{document.properties.title}}</h1>
Cela donnera la structure suivante :
<html> <head>...</head> <body> <div class="document"> <div class="dcpDocument"> <h1>Mon document</h1> <nav class="dcpDocument__menu">...</nav> <section class="dcpDocument__body">...</section> <footer class="dcpDocument__footer"/> </div> </div> </body> </html>
4.5.4.3.2 Menu du document : menu
La barre de menu du document est la section menu
de la catégorie sections
.
Par défaut :
<nav class="dcpDocument__menu"></nav>
Le menu, défini par ::getMenu()
, est construit dans l'objet de la
classe css dcpDocument__menu
.
La barre de menu peut être déplacée dans n'importe quelle autre section.
Exemple : mettre le menu dans le footer du document
class MyRenderConfigCustom extends \Dcp\Ui\DefaultView { public function getTemplates(\Doc $document = null) { $templates=parent::getTemplates($document); $templates["sections"]["footer"]["content"]= '<footer class="dcpDocument__footer"><div class="dcpDocument__menu"/></footer>'; $templates["sections"]["menu"]["content"]=''; return $templates; } }
Cela donnera la structure suivante :
<html> <head>...</head> <body> <div class="document"> <div class="dcpDocument"> <header class="dcpDocument__header">...</header> <!-- plus de menu ici --> <section class="dcpDocument__body">...</section> <footer class="dcpDocument__footer"><div class="dcpDocument__menu">...</div></footer> </div> </div> </body> </html>
La barre de menu a un comportement
spécifique lorsqu'elle est contenue dans un élément de type nav
. Ce comportement
implique que le menu passe en position fixed
en haut du document lorsque le
header n'est plus visible.
4.5.4.3.3 Contenu du document : content
Le contenu du document est la section content
de la catégorie sections
.
Par défaut :
<section class="dcpDocument__body"/>
Le contenu par défaut du document est construit par le widget dans la section
identifiée par la classe css dcpDocument__body
. Si celle-ci n'est pas
présente, il est nécessaire alors d'indiquer les attributs à afficher
explicitement en utilisant les variables mustache.
Exemple : Affichage uniquement du contenu de l'onglet my_tabinformation
.
class MyRenderConfigCustom extends \Dcp\Ui\DefaultView { public function getTemplates(\Doc $document = null) { $templates=parent::getTemplates($document); $templates["sections"]["content"]["file"]="MY/customContent.mustache"; return $templates; } }
Fichier "MY/customContent.mustache"
<div class="container-fluid"> <h1>Voici : {{document.properties.title}}</h1> {{{document.attributes.my_tabinformation.htmlContent}}} </div>
Cela donnera la structure suivante :
<html> <head>...</head> <body> <div class="document"> <div class="dcpDocument"> <header class="dcpDocument__header">...</header> <nav class="dcpDocument__menu">...</nav> <div class="container-fluid"> <h1>Voici : Mon document</h1> <div class="dcpCustomTemplate--content" data-attrid="my_tabinformation"> <div class="dcpTab__content" data-attrid="my_tabinformation" "> ... </div> </div> </div> <footer class="dcpDocument__footer"/> </div> </div> </body> </html>
4.5.4.3.4 Pied du document : footer
Le bas du document est la section footer
de la catégorie sections
.
Par défaut :
<footer class="dcpDocument__footer"/>
La classe dcpDocument__footer
fixe le pied de document en bas de la page pour
être toujours visible.
Les règles pour le footer par défaut sont :
.dcpDocument__footer { background-color: #f2f2f2; text-align: center; position: fixed; bottom: 0; width: 100%; z-index: 2; }
Exemple : Afficher un copyright.
class MyRenderConfigCustom extends \Dcp\Ui\DefaultView { public function getTemplates(\Doc $document = null) { $templates=parent::getTemplates($document); $templates["sections"]["footer"]["content"]=' <footer class="dcpDocument__footer"> <strong>All right reserved ©</strong> </footer> '; return $templates; } }
Cela donnera la structure suivante :
<html> <head>...</head> <body> <div class="document"> <div class="dcpDocument"> <header class="dcpDocument__header">...</header> <nav class="dcpDocument__menu">...</nav> <section class="dcpDocument__body">...</section> <footer class="dcpDocument__footer"> <strong>All right reserved ©</strong> </footer> </div> </div> </body> </html>
4.5.4.4 Variables des templates
Il est possible d'utiliser des variables liées au document dans les templates.
4.5.4.4.1 Variables client
Les variables sur les propriétés et les attributs du document sont utilisables dans les templates :
4.5.4.4.1.1 Propriétés
Clef | Définition |
---|---|
{{document.properties.id}} | Identifiant du document |
{{document.properties.name}} | Nom logique du document |
{{document.properties.initid}} | Identifiant de la lignée du document |
{{document.properties.icon}} | Url de l'icône du document |
{{document.properties.title}} | Titre du document |
{{document.properties.family.title}} | Titre de la famille du document |
{{document.properties.family.id}} | Identifiant de la famille du document |
{{document.properties.family.icon}} | Icône de la famille du document |
{{document.properties.isReadMode}} | (booléen) Indique si le rendu de document est en mode consultation |
{{document.properties.isWriteMode}} | (booléen) Indique si le rendu de document est en mode modification |
4.5.4.4.1.2 Attributs
Clef | Définition |
---|---|
{{document.attributes.attrid .label}} |
Libellé de l'attribut "attrid" |
{{document.attributes.attrid .attributeValue.value}} |
Valeur brute |
{{document.attributes.attrid .attributeValue.displayValue}} |
valeur affichable |
{{document.attributes.attrid .attributeValue.specialProperty }} |
Autres propriétés (Voir formatCollection) |
{{{document.attributes.attrid .htmlContent}}} |
Contenu (HTML) formaté de la valeur (Attention aux triple accolades : {{{…}}} ) |
{{{document.attributes.attrid .htmlView}}} |
Contenu (HTML) formaté de la valeur avec le libellé (non applicable au type tab ni aux attributs contenu dans un tableau) (Attention aux triple accolades : {{{…}}} ) |
Exemple : Remplacement de l'entête
<h1>Voici le document : "{{document.properties.title}}"</h1> {{> menu}} {{> content}} {{> footer}}
Exemple : Affichage du cadre my_firstframe
{{>header}} {{> menu}} <h1>Voici un cadre</h1> {{{document.attributes.my_firstframe.htmlView}}} {{> footer}}
Ces variables sont remplacées sur le client lors du rendu du document.
4.5.4.4.2 Variables serveur
Le template est aussi analysé par le serveur. Les variables notées entre double crochets sont des variables qui sont remplacées par le contrôleur avant d'être envoyé sur le client.
Les clefs disponibles côté serveur sont celles gérées par le contrôleur.
L'ensemble des clefs ne sont pas les mêmes que celle côté client. En particulier,
les clefs de rendu HTML (htmlContent
, htmlView
) ne sont pas disponibles.
Exemple : Remplacement de l'entête côté serveur
<h1>[[#i18n]]my::This my document[[/i18n]] : "[[document.properties.title]]"</h1> {{> menu}} {{> content}} {{> footer}}