diff -r 000000000000 -r b97547f5f1fa doc/devmanual_fr/chap_visualisation_donnees.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/doc/devmanual_fr/chap_visualisation_donnees.txt Wed Nov 05 15:52:50 2008 +0100 @@ -0,0 +1,120 @@ +.. -*- coding: utf-8 -*- + + +Définition de vues +================== + +Les classes de base des vues +---------------------------- + +La class `View` (`ginco.common.view`) +````````````````````````````````````` +Un vue écrit dans son flux de sortie via son attribut `w` (`UStreamIO`). + +L'interface de base des vues est la suivante : + +* `dispatch(**context)`, appelle ("rend") la vue en appellent `call` ou + `cell_call` en fonction des arguments passé +* `call(**kwargs)`, appelle la vue pour un result set complet ou nul +* `cell_call(row, col, **kwargs)`, appelle la vue pour une cellule donnée d'un + result set +* `url()`, retourne l'url permettant d'obtenir cette vue avec le result set en + cours +* `view(__vid, rset, __fallback_vid=None, **kwargs)`, appelle la vue + d'identificant `__vid` sur le result set donné. Il est possible de données un + identificant de vue de "fallback" qui sera utilisé si la vue demandée n'est + pas applicable au result set + +* `wview(__vid, rset, __fallback_vid=None, **kwargs)`, pareil que `view` mais + passe automatiquement le flux en argument + +* `html_headers()`, retourne une liste d'en-tête HTML à placer par le template + principal + +* `page_title()`, retourne le titre à utiliser dans l'en tête HTML `title` + +* `creator(eid)`, retourne l'eid et le login du créateur de l'entité ayant + l'eid passé en argument + +Autres classes de base : + +* `EntityView`, vue s'appliquant à aux lignes ou cellule contenant une entité + (eg un eid) +* `StartupView`, vue de départ n'ayant pas besoin de result set +* `AnyRsetView`, vue s'appliquant à n'importe quelle result set + + +Les templates ou patron +----------------------- + +Les patrons (ou *template*) sont des cas particulier de vue ne dépendant a +priori pas d'un result set. La classe de base `Template` (`ginco.common.view`) +est une classe dérivée de la classe `View`. + +Pour construire une page HTML, un *template principal* est utilisé. Généralement +celui possédant l'identifiant 'main' est utilisé (ce n'est pas le cas lors +d'erreur dans celui-ci ou pour le formulaire de login par exemple). Ce patron +utilise d'autres patrons en plus des vues dépendants du contenu pour générer la +page à renvoyer. + +C'est ce template qui est chargé : + +1. d'éxécuter la requête RQL des données à afficher le cas échéant +2. éventuellement de déterminer la vue à utiliser pour l'afficher si non + spécifiée +3. de composer la page à retourner + + +Le patron principal par défaut (`ginco.web.views.basetemplates.TheMainTemplate`) +-------------------------------------------------------------------------------- + +Le template principal par défaut construit la page selon la décomposition +suivante : + +.. image:: main_template_layout.png + +Le rectancle contenant le `view.dispatch()` représente l'emplacement où est +inséré la vue de contenu à afficher. Les autres représentent des sous-templates +appelé pour construire la page. Les implémentations par défaut de tout ces +templates sont dans le module `ginco.web.views.basetemplates`. Vous pouvez +évidemment surcharger l'un des sous-templates pour modifier l'aspect visuel +d'une partie désirée de la page. + +On peut également contrôler certains comportements du template principal à +l'aide des paramètres de formulaire suivante : + +* `__notemplate`, si présente (quelque soit la valeur associée), seule la vue de + contenu est renvoyée +* `__force_display`, si présente et contient une valeur non nulle, pas de + navigation quelque soit le nombre d'entités à afficher +* `__method`, si le result set à afficher ne contient qu'une entité et que ce + paramètre est spécifié, celui-ci désigne une méthode à appeler sur l'entité + en lui donnant en argument le dictionnaire des paramètres de formulaire, avant + de reprendre le comportement classique (s'insère entre les étapes 1. et + 2. décrites ci-dessus) + + +.. include:: sect_stdlib_vues.txt + + +Vues xml, binaires... +--------------------- +Pour les vues générants autre que du html (une image générée dynamiquement par +exemple), et qui ne peuvent donc généralement pas être incluse dans la page +HTML générée par le template principal (voir ci-dessus), il faut : + +* placer l'attribut `templatable` de la classe à `False` +* indiquer via l'attribut `content_type` de la classe le type MIME généré par la + vue 'application/octet-stream' + +Pour les vues générants un contenu binaire (une image générée dynamiquement par +exemple), il faut également placer l'attribut `binary` de la classe à `True` (ce +qui implique `templatable == False` afin que l'attribut `w` de la vue soit +remplacé par un flux binaire plutôt que unicode. + + +Quelques trucs (X)HTML à respecter +---------------------------------- +Certains navigateurs (dont firefox) n'aime pas les `
` vides (par vide +j'entend sans contenu dans la balise, il peut y avoir des attributs), faut +toujours mettre `
` même s'il n'y a rien dedans, et non `
`.