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