diff -r c243c0f65f17 -r 2b3fa6fb647b doc/book/fr/01-introduction.fr.txt --- a/doc/book/fr/01-introduction.fr.txt Thu Oct 14 00:01:04 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,343 +0,0 @@ -.. -*- coding: utf-8 -*- - -.. _Overview: - -Aperçu rapide de `CubicWeb` -=========================== - -`CubicWeb` nous permet de développer des instances d'applications web -basées sur un ou plusieurs `cube`. - -Ce à quoi nous réferrons en parlant de `cube` est un modèle définissant -des types de données et des vues. Un `cube` est un composant re-utilisable -regroupé avec d'autres cubes sur le système de fichiers. - -Un `instance` réferre à une installation spécifique d'un ou plusieurs cubes -où sont regroupés tous les fichiers de configuration de l'application web finale. - -Dans ce document, nous allons vous montrer comment créer un cube et l'utiliser -dans une instance pour votre application web. - -Créez votre cube ----------------- - -Après avoir installé votre environement de développement `CubicWeb`, vous pouvez -commencer à construire votre premier cube: :: - - cubicweb-ctl newcube blog - -Cela va créer dans ``/path/to/forest/cubes`` une répertoire contenant :: - - blog/ - | - |-- data/ - | |-- cubes.blog.css - | |-- cubes.blog.js - | |-- external_resources - | - |-- debian/ - | |-- changelog - | |-- compat - | |-- control - | |-- copyright - | |-- cubicweb-blog.prerm - | |-- rules - | - |-- entities.py - | - |-- i18n/ - | |-- en.po - | |-- fr.po - | - |-- __init__.py - | - |-- MANIFEST.in - | - |-- migration/ - | |-- postcreate.py - | |-- precreate.py - | - |-- __pkginfo__.py - | - |-- schema.py - | - |-- setup.py - | - |-- site_cubicweb.py - | - |-- sobjects.py - | - |-- test/ - | |-- data/ - | |-- bootstrap_cubes - | |-- pytestconf.py - | |-- realdb_test_blog.py - | |-- test_blog.py - | - |-- views.py - -Toute modification apportée à votre modele de données devra -etre effectué dans ce répertoire. - - - -Définissez votre schéma de données ----------------------------------- - -Le modèle de données ou schéma est au coeur d'une application `CubicWeb`. -C'est là où vous allez devoir définir le type de contenu que votre application -devra gérer. - -Votre modele de données est défini dans le fichier ``schema.py`` de votre cube -``blog`` comme suit. - -:: - - from cubicweb.schema import format_constraint - class Blog(EntityType): - title = String(maxsize=50, required=True) - description = String() - - class BlogEntry(EntityType): - title = String(required=True, fulltextindexed=True, maxsize=256) - publish_date = Date(default='TODAY') - content = String(required=True, fulltextindexed=True) - entry_of = SubjectRelation('Blog', cardinality='?*') - -Un ``Blog`` a un titre et une description. Le titre est une chaîne -de caractères requise par la classe parente EntityType et ne doit -pas excéder 50 caractères. La description est une chaîne de -caractères sans contraintes. - -Une ``BlogEntry`` a un titre, une date de publication et du texte -étant son contenu. Le titre est une chaîne de caractères qui ne -doit pas excéder 100 caractères. La date de publication est de type Date et a -pour valeur par défaut TODAY, ce qui signifie que lorsqu'une -``BlogEntry`` sera créée, sa date de publication sera la date -courante a moins de modifier ce champ. Le texte est une chaîne de -caractères qui sera indexée en plein texte et sans contraintes. - -Une ``BlogEntry`` a aussi une relation nommée ``entry_of`` qui la -relie à un ``Blog``. La cardinalité ``?*`` signifie que BlogEntry -peut faire partie de zero a un Blog (``?`` signifie `zero ou un`) et -qu'un Blog peut avoir une infinité de BlogEntry (``*`` signifie -`n'importe quel nombre incluant zero`). -Par soucis de complétude, nous rappellerons que ``+`` signifie -`un ou plus`. - - -Créez votre instance --------------------- - -:: - - cubicweb-ctl create blog blogdemo - -Cette commande va créer un répertoire ``~/etc/cubicweb.d/blogdemo`` -contenant tous les fichiers de configuration nécessaire au lancement -de votre application web. - -L'instance ``blogdemo`` est construite sur le cube ``blog``. - -Bienvenue dans votre application web ------------------------------------- - -Lancez votre application en exécutant : :: - - cubicweb-ctl start -D blogdemo - - -Vous pouvez à présent accéder à votre application web vous permettant de -créer des blogs et d'y poster des messages en visitant l'URL http://localhost:8080/. -Un premier formulaire d'authentification va vous être proposé. Par défaut, -l'application n'autorisera pas d'utilisateur anonyme à accéder a votre -application. Vous devrez donc utiliser l'utilisateur administrateur que -vous aurez crée lors de l'initialisation de votre base de données via -``cubicweb-ctl create``. - -.. image:: images/login-form.png - - -Une fois authentifié, vous pouvez commencer à jouer avec votre -application et créer des entités. Bravo ! - -.. image:: images/blog-demo-first-page.png - - -Rappelez-vous que pour le moment, tout a été géré par la plate-forme -`CubicWeb` et que la seule chose qui a été fournie est le schéma de -données. - -Créons des entités ------------------- - -Nous allons maintenant créer quelques entités dans notre application. - -Créez un Blog -~~~~~~~~~~~~~ - -Créons à présent quelques entités. Cliquez sur `[+]` sur la -droite du lien Blog. Appelez cette nouvelle entité Blog ``Tech-Blog`` -et tapez pour la description ``everything about technology``, -puis validez le formulaire d'édition en cliquant sur le bouton -``Validate``. - -.. image:: images/cbw-create-blog.fr.png - :alt: from to create blog - -En cliquant sur le logo situé dans le coin gauche de la fenêtre, -vous allez être redirigé vers la page d'accueil. Ensuite, si vous allez -sur le lien Blog, vous devriez voir la liste des entités Blog, en particulier -celui que vous venez juste de créer ``Tech-Blog``. - -.. image:: images/cbw-list-one-blog.fr.png - :alt: displaying a list of a single blog - -Si vous cliquez sur ``Tech-Blog`` vous devriez obtenir une description -détaillée, ce qui dans notre cas, n'est rien de plus que le titre -et la phrase ``everything about technology`` - -Maintenant retournons sur la page d'accueil et créons un nouveau -Blog ``MyLife`` et retournons sur la page d'accueil, puis suivons -le lien Blog et nous constatons qu'à présent deux blogs sont listés. - -.. image:: images/cbw-list-two-blog.fr.png - :alt: displaying a list of two blogs - -Créons un article -~~~~~~~~~~~~~~~~~ - -Revenons sur la page d'accueil et cliquons sur `[+]` à droite du lien -`articles`. Appellons cette nouvelle entité ``Hello World`` et introduisons -un peut de texte avant de ``Valider``. Vous venez d'ajouter un article -sans avoir précisé à quel Blog il appartenait. Dans la colonne de gauche -se trouve une boite intitulé ``actions``, cliquez sur le menu ``modifier``. -Vous êtes de retour sur le formulaire d'édition de l'article que vous -venez de créer, à ceci près que ce formulaire a maintenant une nouvelle -section intitulée ``ajouter relation``. Choisissez ``entry_of`` dans ce menu, -cela va faire apparaitre une deuxième menu déroulant dans lequel vous -allez pouvoir séléctionner le Blog ``MyLife``. - -Vous auriez pu aussi, au moment où vous avez crée votre article, sélectionner -``appliquer`` au lieu de ``valider`` et le menu ``ajouter relation`` serait apparu. - -.. image:: images/cbw-add-relation-entryof.fr.png - :alt: editing a blog entry to add a relation to a blog - -Validez vos modifications en cliquant sur ``Valider``. L'entité article -qui est listée contient maintenant un lien vers le Blog auquel il -appartient, ``MyLife``. - -.. image:: images/cbw-detail-one-blogentry.fr.png - :alt: displaying the detailed view of a blogentry - -Rappelez-vous que pour le moment, tout a été géré par la plate-forme -`CubicWeb` et que la seule chose qui a été fournie est le schéma de -données. D'ailleurs pour obtenir une vue graphique du schéma, visitez -le lien `Application schema`` a l'URL suivante : -http://localhost:8080/view?vid=schema - -.. image:: images/cbw-schema.fr.png - :alt: graphical view of the schema (aka data-model) - - -Définissez les vues de vos données ----------------------------------- - -Le principe de sélection des vues -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Une vue est une classe Python qui inclut: - - - un identifiant (tous les objets dans `CubicWeb` sont listés - dans un registre et cet identifiant est utilisé comme la clé) - - - un filtre de sélection de `result sets` auxquels il - peut s'appliquer - -`CubicWeb` fournit un ensemble de vues standard pour le type d'objet -`EntityView`. vous poubez les trouver listées dans ``cubicweb/web/views``. - -Une vue est appliquée sur un `result set` qui représente l'ensemble -des entités que nous cherchons à appliquer. `CubicWeb` utilise un -sélecteur qui permet de calculer un score et d'identifier la vue -la plus adaptée au `result set` que nous voulons afficher. La librarie -standard des sélecteurs se trouve dans ``cubicweb.common.selector`` -et une librairie des méthodes utilisées pour calculer les scores -est dans ``cubicweb.vregistry.vreq``. - - -Il est possible de définir plusieurs vues ayant le meme identifiant -et d'y associer des sélecteurs et des filtres afin de permettre à -l'application de s'adapter au mieux aux données que nous avons -besoin d'afficher. Nous verrons cela plus en détails dans :ref:`DefinitionVues`. - -On peut citer l'exemple de la vue nommée ``primary`` qui est celle utilisée -pour visualiser une entité seule. Nous allons vous montrer comment modifier -cette vue. - -Modification des vues -~~~~~~~~~~~~~~~~~~~~~ -Si vous souhaitez modifier la manière dont est rendue un article (`Blogentry`), -vous devez surcharger la vue ``primary`` définie dans le module ``views`` de -votre cube, ``cubes/blog/views.py``. - -Nous pourrions par exemple ajouter devant la date de publication un préfixe -indiquant que la date visualisée est la date de publication. - -Pour cela appliquez les modifications suivantes: - -:: - - from cubicweb.web.views import baseviews - - - class BlogEntryPrimaryView(baseviews.PrimaryView): - - accepts = ('BlogEntry',) - - def render_entity_title(self, entity): - self.w(u'

%s

' % html_escape(entity.dc_title())) - - def content_format(self, entity): - return entity.view('reledit', rtype='content_format') - - def cell_call(self, row, col): - entity = self.rset.get_entity(row, col) - - # display entity attributes with prefixes - self.w(u'

%s

' % entity.title) - self.w(u'

published on %s

' % entity.publish_date.strftime('%Y-%m-%d')) - self.w(u'

%s

' % entity.content) - - # display relations - siderelations = [] - if self.main_related_section: - self.render_entity_relations(entity, siderelations) - -.. note:: - Lors qu'une vue est modifiée il n'est pas nécessaire de relancer - l'application. Sauvez juste le fichier Python et rechargez la page - dans votre navigateur afin de visualiser les modifications. - - -Nous pouvons voir que la date de publication est préfixée comme souhaitée. - - -.. image:: images/cbw-update-primary-view.fr.png - :alt: modified primary view - - - -Le code que nous avons modifié définit une vue primaire pour une entité de -type `BlogEntry`. - -Etant donné que les vues sont appliquées sur des `result sets` et que -les `result sets` peuvent être des tableaux de données, il est indispensable -de récupérer l'entité selon ses coordonnées (row,col). - -La méthode ``self.w()`` est utilisée pour afficher des données. En particulier -dans notre exemple, nous l'utilisons pour afficher des tags HTML et des valeurs -des attributs de notre entité. - -