6.4 Vue d'attribut
Les vues d'attribut permettent de définir la représentation d'un attribut. Elles peuvent être utilisées lorsque la représentation par défaut du document correspond, à l'exception de quelques attributs isolés.
Les vues d'attributs sont déclarées au moyen des options :
-
viewtemplate
: pour les vues de consultation, -
edittemplate
: pour les vues de modification.
Une vue d'attribut est composée de :
- un fichier de template, définissant la structure,
- une méthode (appelée contrôleur de vue) du document à représenter,
définissant les valeurs.
Cette méthode peut également être omise. dans ce cas, dynacase fait appel au contrôleur de vue par défaut.
Par convention :
- le fichier de template porte l'extension
.xml
, - son nom détermine le nom de la vue,
- la méthode associée doit porter le même nom.
L'objetLayout
est accessible au moyen de la propriétélay
de l'objet courant ($this->lay
).
6.4.1 Le contrôleur de vue d'attribut
Pour qu'une méthode du document soit utilisable en tant que contrôleur d'une
vue, il est nécessaire de lui ajouter la phpDoc @templateController
afin
de se prémunir d'une éventuelle exécution arbitraire de code.
Les paramètres reçus par la méthode sont au nombre de 3 :
-
$target
(string) : nom de la fenêtre graphique qui est utilisée pour les hyperliens ("_self"
par défaut) , -
$ulink
(booléen) : indique s'il faut générer les hyperliens (true
par défaut) , -
$abstract
(booléen) : indique s'il faut générer uniquement les attributs de la fiche résumé (false
par défaut).
6.4.1.1 Contrôleur d'attributs par défaut
En l'absence de méthode correspondant à la vue, le contrôleur d'attributs par défaut est appelé. Cette méthode dépend de l'option :
-
viewtemplate
: en consultation, la méthode appelée estDoc::viewDefaultCard
, -
edittemplate
: en modification, la méthode appelée estDoc::viewProp
suivi deDoc::editAttr
.
6.4.2 Syntaxe d'une zone de vue d'attribut
Une zone de vue d'attribut s'exprime sous la forme APP:DOCVIEW:OPTIONS
:
-
APP
(obligatoire) - Le nom de l'application dans laquelle se trouve le template.
-
DOCVIEW
(obligatoire) - La nom du template et du contrôleur à utiliser.
-
OPTIONS
(facultatif) -
Une option de représentation. ces options dépendent du type de vue :
Des paramètres supplémentaires peuvent être fournis en utilisant une syntaxe
identique aux paramètres des URL. Les valeurs des paramètres doivent être
encodés comme les URL (l'utilisation de la fonction urlencode
est recommandée).
La syntaxe complète avec les paramètres est donc :
APP:DOCVIEW:OPTIONS?param1=valeur1[¶m=valeur]*
.
Ces paramètres supplémentaires sont accessibles depuis le contrôleur avec la
fonction getHttpVars()
.
Le couple APP:DOCVIEW
indique le template et le contrôleur à utiliser.
- Le fichier template est recherché avec la logique suivante :
- Si
DOCVIEW
ne comporte pas d'extension, alors l'extension.xml
est ajoutée. - Le fichier template est recherché par la fonction
getLayoutFile
dans le répertoireAPP/Layout
.- Le fichier est d'abord recherché avec le nom
DOCVIEW
tel qu'il est décrit - Si le fichier n'est pas trouvé, le nom en minuscule est recherché.
- Le fichier est d'abord recherché avec le nom
- Si
- Le nom de la méthode est le nom
DOCVIEW
.
Dans ce cas, la casse du nom de la méthode n'est pas prise en compte (comme pour les méthodes de PHP en général).
6.4.3 Vue de consultation d'attribut
La vue d'attribut remplace la valeur d'un attribut.
Elle s'insère à la place de la valeur d'un attribut depuis la zone
FDL:VIEWBODYCARD
.
Extrait d'une consultation de document avec la zone FDL:VIEWBODYCARD
:
<table> <tr> <td>Label 1</td> <td>:</td> <td>valeur 1</td> </tr> <tr> <td>Label 2</td> <td>:</td> <td>valeur 2</td> </tr> </table>
Afin de spécifier la vue d'attribut à utiliser en consultation, il faut utiliser
l'option viewtemplate
. Si l'attribut n°2 a une vue d'attribut le document de
consultation est :
<table> <tr> <td>Label 1</td> <td>:</td> <td>valeur 1</td> </tr> <tr> <td>Label 2</td> <td>:</td> <td>ICI LE RESULTAT DE LA VUE D'ATTRIBUT</td> </tr> </table>
La vue d'attribut est présentée dans une cellule de tableau HTML comme représenté ci-dessous.
Label1 | : | Valeur1 |
Label2 | : | ICI LE RESULTAT DE LA VUE D'ATTRIBUT |
Si l'option est portée sur un attribut tableau (array
), la vue remplace tout
le tableau.
Si l'option est portée sur un attribut cadre (frame
) la vue remplace tout le
contenu du cadre mais le contour avec le libellé est conservé.
6.4.3.1 Options des vues d'attribut en consultation
Les options disponibles en consultation sont les suivantes :
S
-
signifie que le libellé de l'attribut n'est pas affiché et le template prend toute la largeur du document. Cette option n'est pas applicable si l'attribut est de type
frame
.Dans ce cas le document de consultation est :
<table> <tr> <td>Label 1</td> <td>:</td> <td>valeur 1</td> </tr> <tr> <td colspan="3">ICI LE RESULTAT DE LA VUE D'ATTRIBUT POUR L'ATTRIBUT N°2</td> </tr> </table>
La vue d'attribut avec l'option
S
est présentée dans une cellule de tableau HTML comme représenté ci-dessous :Label 1 : valeur 1 ICI LE RESULTAT DE LA VUE D'ATTRIBUT
POUR L'ATTRIBUT N°2
6.4.3.2 Utilisation des valeurs du document en consultation
Le contrôleur par défaut fait automatiquement appel
aux méthodes Doc::viewAttr
et Doc::viewProp
. Elles initialisent les clés
suivantes :
- viewAttr va créer :
-
L_ATTRID
pour chaque attribut : le libellé (traduit) de l'attribut, -
V_ATTRID
pour chaque attribut : la valeur (au format html) de l'attribut, -
S_ATTRID
pour chaque attribut :true
si l'attribut est vide,false
sinon
-
- viewProp va créer :
-
ATTRID
pour chaque attribut : la valeur brute de l'attribut -
PROPID
pour chaque propriété : la valeur brute de la propriété -
V_TITLE
une ancre vers le document lui-même avec son titre
-
Note : Toutes ces clefs sont en majuscules.
Lors de l'utilisation d'un contrôleur personnalisé, il est possible d'appeler
ces méthodes afin de générer les clés correspondantes. Il est également possible
de définir d'autres clés en utilisant les différentes méthodes du Layout
.
Attention : Toutes ces clés respectent les visibilités : si la visibilité
d'un attribut est H
pour un utilisateur, les clés L_ATTRID
et V_ATTRID
seront des chaînes vides. S_ATTRID
, pour sa part, n'est pas affecté par les
visibilités.
Exemple d'un template d'attribut sans contrôleur :
MYAPP/Layout/mySpecialText.html
<h2> La valeur de [L_MY_TEXT] est <strong>[V_MY_TEXT]</strong> </h2>
Dans cet exemple le template est associé à l'attribut MY_TEXT
avec l'option
viewtemplate=MYAPP:mySpecialText.html
.
6.4.3.3 Utilisation d'un contrôleur d'attribut spécifique
Le contrôleur d'attribut est identique à un contrôleur de vue de documents.
La seule différence est qu'il ne contrôle qu'un attribut ou un ensemble d'attributs dans le cas d'un tableau ou d'un cadre.
Exemple :
Class.MyFamily.php
namespace My; class MyFamily extends \Dcp\Family\Documents { /** * Affiche le nombre sur 3 chiffres * @templateController affichage en rouge si négatif, en vert sinon */ public function mySpecialNumber($target = "_self", $ulink = true, $abstract = false) { $number=$this->getRawValue("my_number"); if ($number > 0) { $this->lay->set("color", "green"); } else { $this->lay->set("color", "red"); } $this->lay->set("theNumber", sprintf("%.03d",$number)); } }
MYAPP/Layout/mySpecialNumber.html
<h2> La valeur est <strong style="color:[color]">[theNumber]</strong> </h2>
Dans cet exemple le template est associé à l'attribut MY_NUMBER
avec l'option
viewtemplate=MYAPP:mySpecialNumber.html
.
La méthode mySpecialNumber()
est déclarée dans le fichier CLASS
de la famille.
6.4.4 Vue de modification d'attribut
La vue d'attribut remplace le champ de saisie d'un attribut du formulaire.
Elle s'insère à la place de la valeur d'un attribut depuis la zone
FDL:EDITBODYCARD
.
Extrait d'un formulaire de document avec la zone FDL:EDITBODYCARD
:
<table> <tr> <td>Label 1 :</td> <td><input value="Value 1"/> …</td> <td><input type="button"/> aide à la saisie/ extra link </td> </tr> </table> <table> <tr> <td>Label 2</td> <td><input value="Value 2">…</td> <td><input type="button"/> aide à la saisie/ extra link </td> </tr> </table>
Afin de spécifier la vue d'attribut à utiliser en modification, il faut utiliser
l'option edittemplate
.
La vue d'attribut remplace le champ de saisie de l'attribut.
Si l'attribut n°2 a une vue d'attribut le formulaire de saisie est :
<table> <tr> <td>Label 1 :</td> <td><input value="Value 1"/>…</td> <td><input type="button"/> aide à la saisie/ extra link </td> </tr> </table> <table> <tr> <td>Label 2</td> <td>ICI LE RESULTAT DE LA VUE D'ATTRIBUT</td> </tr> </table>
La vue d'attribut est présentée dans une cellule de tableau HTML comme représenté ci-dessus. Le template d'un champ doit retourner deux éléments :
- le champ de saisie,
- les éventuelle boutons de contrôle.
Ces éléments doivent être séparé par des éléments de cellule </td><td>
, car au
final le tableau doit comporter trois colonnes pour avoir un alignement correct.
6.4.4.1 Options des vues d'attribut en modification
Les options disponibles en modification sont les suivantes :
S
-
Signifie que le libellé de l'attribut ne est pas affiché et le template prend toute la largeur du document.
L'insertion se fait dans le fragment html suivant :
<table> <tr> <td>Label 1 :</td> <td><input value="Value 1"/> ...</td> <td><input type="button"/> aide à la saisie/ extra link </td> </tr> </table> <table> <tr> <td colspan="3">ICI LE RÉSULTAT DE LA VUE D'ATTRIBUT </td> </tr> </table>
U
-
Signifie que l'input généré par le mot-clef
[V_ATTRNAME]
prend toute la largeur disponible. Elle n'ajoute pas de</td><td>
supplémentaire. Cette option est à utiliser si les mots-clefs[V_ATTRNAME]
sont présents dans le template.<table> <tr> <td>Label 1 :</td> <td><input value="Value 1"/> ...</td> <td><input type="button"/> aide à la saisie/ extra link </td> </tr> </table> <table> <tr> <td>Label 2 :</td> <td>RÉSULTAT DE LA VUE SANS AUTRE TD : Tableau à 2 cellules</td> </tr> </table>
6.4.4.2 Utilisation des valeurs du document en modification
le contrôleur par défaut fait automatiquement appel
aux méthodes Doc::editAttr
et Doc::viewProp
. Elles initialisent les clés
suivantes :
- editAttr va créer :
-
L_ATTRID
pour chaque attribut : le libellé (traduit) de l'attribut, entouré d'une balise<b/>
si l'attribut est obligatoire), -
V_ATTRID
pour chaque attribut : un input pour l'attribut, -
W_ATTRID
pour chaque attribut :true
si l'attribut est visible,false
sinon.
-
- viewProp va créer :
-
ATTRID
pour chaque attribut : la valeur brute de l'attribut -
PROPID
pour chaque propriété : la valeur brute de la propriété -
V_TITLE
une ancre vers le document lui-même avec son titre
-
Lors de l'utilisation d'un contrôleur personnalisé, il est possible d'appeler
ces méthodes afin de générer les clés correspondantes. Il est également possible
de définir d'autres clés en utilisant les différentes méthodes du Layout
.
Les clefs V_ATTRID
fournies par Doc::editattr()
retournent par défaut les 2
élements champ de saisie et boutons de contrôle séparés par </td><td>
pour une insertion dans le formulaire. La méthode Doc::editAttr()
possède un
argument qui permet d'omettre le séparateur </td><td>
pour des constructions
de vues plus spécialisées.
Attention : toutes ces clés respectent les visibilités : si l'utilisateur
n'a pas le droit de voir un attribut, la clé V_ATTRID
génère un
<input type="hidden"/>
. Les clés L_ATTRID
ne sont pas affectées par la
visibilité.
Exemple :
Class.MyFamily.php
namespace My; class MyFamily extends \Dcp\Family\Documents { /** * Affiche le nombre sur 3 chiffres * @templateController affichage en rouge si négatif, en vert sinon */ public function myEditSpecialNumber($target = "_self", $ulink = true, $abstract = false) { $this->editAttr(); } }
MYAPP/Layout/myEditSpecialNumber.html
Nombre à saisir [V_MY_NUMBER]
Dans ce cas le résultat est :
<table> <tr> <td>Label 1 :</td> <td><input value="Value 1"/> ...</td> <td><input type="button"/> aide à la saisie/ extra link </td> </tr> </table> <table> <tr> <td>My number</td> <td>Nombre à saisir <input name=_"my_number" value="45"/></td><td></td> </tr> </table>
Ce qui donne la représentation suivante :
Label 1 : | ||
My number | Nombre à saisir |
6.4.5 Limitations
Les vues d'attribut ne sont pas gérées par Dynacase dans les vues de document
personnalisées. Elles ne sont utilisées que dans les vues FDL:VIEWBODYCARD
pour la consultation et FDL:EDITBODYCARD
pour la modification.
Chaque vue d'attribut utilise la même instance de l'objet Doc
correspondant au document en cours de consultation ou de modification.
Les vues d'attributs ne sont pas applicables aux attributs de type tab
, ni
aux attributs insérés dans un tableau. Dans ce dernier cas, il faut utiliser une
vue de tableau.