doc/devmanual_fr/chap_visualisation_donnees.txt
changeset 0 b97547f5f1fa
child 24 b5303abf484a
equal deleted inserted replaced
-1:000000000000 0:b97547f5f1fa
       
     1 .. -*- coding: utf-8 -*-
       
     2 
       
     3 
       
     4 Définition de vues
       
     5 ==================
       
     6 
       
     7 Les classes de base des vues
       
     8 ----------------------------
       
     9 
       
    10 La class `View` (`ginco.common.view`)
       
    11 `````````````````````````````````````
       
    12 Un vue écrit dans son flux de sortie via son attribut `w` (`UStreamIO`).
       
    13 
       
    14 L'interface de base des vues est la suivante :
       
    15 
       
    16 * `dispatch(**context)`, appelle ("rend") la vue en appellent `call` ou
       
    17   `cell_call` en fonction des arguments passé
       
    18 * `call(**kwargs)`, appelle la vue pour un result set complet ou nul
       
    19 * `cell_call(row, col, **kwargs)`, appelle la vue pour une cellule donnée d'un
       
    20   result set
       
    21 * `url()`, retourne l'url permettant d'obtenir cette vue avec le result set en
       
    22   cours 
       
    23 * `view(__vid, rset, __fallback_vid=None, **kwargs)`, appelle la vue
       
    24   d'identificant `__vid` sur le result set donné. Il est possible de données un
       
    25   identificant de vue de "fallback" qui sera utilisé si la vue demandée n'est
       
    26   pas applicable au result set
       
    27   
       
    28 * `wview(__vid, rset, __fallback_vid=None, **kwargs)`, pareil que `view` mais
       
    29   passe automatiquement le flux en argument
       
    30   
       
    31 * `html_headers()`, retourne une liste d'en-tête HTML à placer par le template
       
    32   principal 
       
    33 
       
    34 * `page_title()`, retourne le titre à utiliser dans l'en tête HTML `title`
       
    35 
       
    36 * `creator(eid)`, retourne l'eid et le login du créateur de l'entité ayant
       
    37   l'eid passé en argument
       
    38 
       
    39 Autres classes de base :
       
    40 
       
    41 * `EntityView`, vue s'appliquant à aux lignes ou cellule contenant une entité
       
    42   (eg un eid)
       
    43 * `StartupView`, vue de départ n'ayant pas besoin de result set
       
    44 * `AnyRsetView`, vue s'appliquant à n'importe quelle result set
       
    45 
       
    46 
       
    47 Les templates ou patron
       
    48 -----------------------
       
    49 
       
    50 Les patrons (ou *template*) sont des cas particulier de vue ne dépendant a
       
    51 priori pas d'un result set. La classe de base `Template` (`ginco.common.view`)
       
    52 est une classe dérivée de la classe `View`.
       
    53 
       
    54 Pour construire une page HTML, un *template principal* est utilisé. Généralement
       
    55 celui possédant l'identifiant 'main' est utilisé (ce n'est pas le cas lors
       
    56 d'erreur dans celui-ci ou pour le formulaire de login par exemple). Ce patron
       
    57 utilise d'autres patrons en plus des vues dépendants du contenu pour générer la
       
    58 page à renvoyer.
       
    59 
       
    60 C'est ce template qui est chargé :
       
    61 
       
    62 1. d'éxécuter la requête RQL des données à afficher le cas échéant
       
    63 2. éventuellement de déterminer la vue à utiliser pour l'afficher si non
       
    64    spécifiée
       
    65 3. de composer la page à retourner
       
    66 
       
    67 
       
    68 Le patron principal par défaut (`ginco.web.views.basetemplates.TheMainTemplate`)
       
    69 --------------------------------------------------------------------------------
       
    70 
       
    71 Le template principal par défaut construit la page selon la décomposition
       
    72 suivante :
       
    73 
       
    74 .. image:: main_template_layout.png
       
    75 
       
    76 Le rectancle contenant le `view.dispatch()` représente l'emplacement où est
       
    77 inséré la vue de contenu à afficher. Les autres représentent des sous-templates
       
    78 appelé pour construire la page. Les implémentations par défaut de tout ces
       
    79 templates sont dans le module `ginco.web.views.basetemplates`. Vous pouvez
       
    80 évidemment surcharger l'un des sous-templates pour modifier l'aspect visuel
       
    81 d'une partie désirée de la page.
       
    82 
       
    83 On peut également contrôler certains comportements du template principal à
       
    84 l'aide des paramètres de formulaire suivante :
       
    85 
       
    86 * `__notemplate`, si présente (quelque soit la valeur associée), seule la vue de
       
    87   contenu est renvoyée
       
    88 * `__force_display`, si présente et contient une valeur non nulle, pas de
       
    89   navigation quelque soit le nombre d'entités à afficher
       
    90 * `__method`, si le result set à afficher ne contient qu'une entité et que ce
       
    91   paramètre est spécifié, celui-ci désigne une méthode à appeler sur l'entité
       
    92   en lui donnant en argument le dictionnaire des paramètres de formulaire, avant
       
    93   de reprendre le comportement classique (s'insère entre les étapes 1. et
       
    94   2. décrites ci-dessus)
       
    95 
       
    96 
       
    97 .. include:: sect_stdlib_vues.txt
       
    98 
       
    99 
       
   100 Vues xml, binaires...
       
   101 ---------------------
       
   102 Pour les vues générants autre que du html  (une image générée dynamiquement par
       
   103 exemple), et qui ne peuvent donc généralement pas être incluse dans la page
       
   104 HTML générée par le template principal (voir ci-dessus), il faut :
       
   105 
       
   106 * placer l'attribut `templatable` de la classe à `False`
       
   107 * indiquer via l'attribut `content_type` de la classe le type MIME généré par la
       
   108   vue 'application/octet-stream'
       
   109 
       
   110 Pour les vues générants un contenu binaire (une image générée dynamiquement par
       
   111 exemple), il faut également placer l'attribut `binary` de la classe à `True` (ce
       
   112 qui implique `templatable == False` afin que l'attribut `w` de la vue soit
       
   113 remplacé par un flux binaire plutôt que unicode.
       
   114 
       
   115 
       
   116 Quelques trucs (X)HTML à respecter
       
   117 ----------------------------------
       
   118 Certains navigateurs (dont firefox) n'aime pas les `<div>` vides (par vide
       
   119 j'entend sans contenu dans la balise, il peut y avoir des attributs), faut
       
   120 toujours mettre `<div></div>` même s'il n'y a rien dedans, et non `<div/>`.