Changeset 173

Show
Ignore:
Timestamp:
04/09/07 13:32:19 (2 years ago)
Author:
bermiferrer
Message:

Fixing french tutorial translation encoding and correcting errors. Posted as issue #39 by Jerome Loyet

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/docs/tutorial-fr.markdown

    r137 r173  
    1 Comment cr�er une application simple gr�ce au framework Akelos 
     1Comment créer une application simple grâce au framework Akelos 
    22========================================================= 
    33 
     
    55-------------------------- 
    66 
    7 Ce tutoriel va vous permettre de cr�er une application � l'aide du framework Akelos. 
    8 Nous allons donc crer **booklink**, une application de gestion de livres et de leurs auteurs. 
    9  
    10 Configuration ncessaire 
     7Ce tutoriel va vous permettre de créer une application à l'aide du framework Akelos. 
     8Nous allons donc créer **booklink**, une application de gestion de livres et de leurs auteurs. 
     9 
     10Configuration nécessaire 
    1111--------------------------- 
    1212 
    13  - Une base de donnes de type MySQL ou SQLite 
     13 - Une base de données de type MySQL ou SQLite 
    1414 - Un serveur web Apache 
    15  - Un acc�s shell � votre serveur ('cmd' sur Windows) 
     15 - Un accès shell à votre serveur ('cmd' sur Windows) 
    1616 - PHP4 or PHP5 
    1717 
    18 Cette configuration est plutt commune et se retrouve sur la plupart des serveurs web ou machines *NIX. 
    19 Bien sr, Akelos fonctionne sur plusieurs types de configuration, mais pour ce tutoriel, nous nous concentrerons sur celle-ci. 
    20  
    21 T�l�chargement et installation 
     18Cette configuration est plutôt commune et se retrouve sur la plupart des serveurs web ou machines *NIX. 
     19Bien sûr, Akelos fonctionne sur plusieurs types de configuration, mais pour ce tutoriel, nous nous concentrerons sur celle-ci. 
     20 
     21Téléchargement et installation 
    2222--------------------------- 
    2323 
    24 Tant qu'Akelos n'est pas sorti dans sa version finale (1.0), nous vous recommandons de toujours utiliser la derni�re r�vision SVN. 
    25 Pour cela, il vous faudra possder un client [subversion](http://subversion.tigris.org). 
    26  
    27 Pour r�cup�rer la derni�re r�vision d'Akelos, tapez la commande : 
     24Tant qu'Akelos n'est pas sorti dans sa version finale (1.0), nous vous recommandons de toujours utiliser la dernière révision SVN. 
     25Pour cela, il vous faudra posséder un client [subversion](http://subversion.tigris.org). 
     26 
     27Pour récupérer la dernière révision d'Akelos, tapez la commande : 
    2828 
    2929    svn co http://akelosframework.googlecode.com/svn/trunk/ akelos 
    3030 
    31 Si jamais vous ne pouvez ou ne voulez pas utiliser subversion, vous pouvez toujours t�l�charger la [derni�re version stable](http://www.akelos.org/akelos_framework-dev_preview.tar.gz). 
     31Si jamais vous ne pouvez ou ne voulez pas utiliser subversion, vous pouvez toujours télécharger la [dernière version stable](http://www.akelos.org/akelos_framework-dev_preview.tar.gz). 
    3232Vous pouvez ensuite l'extraire en tapant : 
    3333 
    3434    tar zxvf akelos_framework-dev_preview.tar.gz ; mv akelos_framework-dev_preview akelos 
    3535 
    36 Il faut maintenant s'assurer qu'Akelos sera capable d'utiliser PHP sur votre systme. Tapez donc : 
     36Il faut maintenant s'assurer qu'Akelos sera capable d'utiliser PHP sur votre système. Tapez donc : 
    3737 
    3838    /usr/bin/env php -v 
     
    4444    Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies 
    4545     
    46 alors vous �tes pr�ts � utiliser Akelos, vous pouvez donc passer au paragraphe suivant. 
    47  
    48 Cependant, si ce n'est pas le cas, il vous faudra trouver le chemin complet vers votre binaire PHP. En g�n�ral, il suffit de taper : 
     46alors vous êtes prêts à utiliser Akelos, vous pouvez donc passer au paragraphe suivant. 
     47 
     48Cependant, si ce n'est pas le cas, il vous faudra trouver le chemin complet vers votre binaire PHP. En général, il suffit de taper : 
    4949 
    5050    which php 
    5151 
    52 Ensuite, changez le chemin dans le shebang `#!/usr/bin/env php` par le votre, et ce, au dbut de chacun de ces fichiers : 
     52Ensuite, changez le chemin dans le shebang `#!/usr/bin/env php` par le votre, et ce, au début de chacun de ces fichiers : 
    5353 
    5454 * script/console 
     
    6666--------------------------------------------- 
    6767 
    68 A ce point, vous devez avoir Akelos mis en place, et devez �tre capable de lancer les scripts PHP depuis une console. Bien que ces scripts ne soient pas absolument n�cessaires au fonctionnement d'Akelos, ils le seront pour ce tutoriel. 
    69  
    70 Vous avez maintenant deux possibilits : 
    71  
    72  1. Cr�er une application Akelos dans un dossier diff�rent et lier ce dernier aux librairies du Framework. 
    73  2. Commencer � travailler directement depuis le dossier t�l�charg�, avec la s�curit� que cela implique : il n'est jamais recommand� de rendre visibles les sources de votre application. 
    74  
    75 Vous l'aurez s�rement devin�, nous utiliserons la premi�re m�thode qui consiste � cr�er un lien (symbolique par exemple) vers le dossier `public` de notre application. Il est aussi tr�s simple de configurer les dossiers du framework, puisqu'il suffit de d�finir l'emplacement de chacun des composants. Cependant, ce n'est pas le sujet de cette explication, et laissons cette partie � un prochain tutoriel expliquant la mise en place et en production d'une application. 
    76  
    77 Nous supposerons que vous avez t�l�charg� Akelos dans le dossier `HOME_DIR/akelos` et que vous vous situez � la racine du dossier `akelos`. 
    78 D'ici, vous pouvez obtenir les diffrentes options d'installation du framework en tapant : 
     68A ce point, vous devez avoir Akelos mis en place, et devez être capable de lancer les scripts PHP depuis une console. Bien que ces scripts ne soient pas absolument nécessaires au fonctionnement d'Akelos, ils le seront pour ce tutoriel. 
     69 
     70Vous avez maintenant deux possibilités : 
     71 
     72 1. Créer une application Akelos dans un dossier différent et lier ce dernier aux librairies du Framework. 
     73 2. Commencer à travailler directement depuis le dossier téléchargé, avec la sécurité que cela implique : il n'est jamais recommandé de rendre visibles les sources de votre application. 
     74 
     75Vous l'aurez sûrement deviné, nous utiliserons la première méthode qui consiste à créer un lien (symbolique par exemple) vers le dossier `public` de notre application. Il est aussi très simple de configurer les dossiers du framework, puisqu'il suffit de définir l'emplacement de chacun des composants. Cependant, ce n'est pas le sujet de cette explication, et laissons cette partie à un prochain tutoriel expliquant la mise en place et en production d'une application. 
     76 
     77Nous supposerons que vous avez téléchargé Akelos dans le dossier `HOME_DIR/akelos` et que vous vous situez à la racine du dossier `akelos`. 
     78D'ici, vous pouvez obtenir les différentes options d'installation du framework en tapant : 
    7979 
    8080    ./script/setup -h 
     
    9898    Utilisation: setup [-sqphf --dependencies] <-d>  
    9999 
    100     -deps --dependencies      Inclut une copie du framework dans le rpertoire de 
     100    -deps --dependencies      Inclut une copie du framework dans le répertoire de 
    101101                              l'application. (true) 
    102102    -d --directory=<value>    Dossier d'installation de l'application. 
    103     -f --force                craser les fichiers existants. (false) 
     103    -f --force                Écraser les fichiers existants. (false) 
    104104    -h --help                 Affiche cette aide. 
    105     -p --public_html=<value>  Dossier par lequel le serveur web va acc�der � 
     105    -p --public_html=<value>  Dossier par lequel le serveur web va accéder à 
    106106                              l'application. 
    107107    -q --quiet                N'affiche rien. (false) 
    108     -s --skip                 Ne copie pas les fichiers d�j� existants. (false) 
     108    -s --skip                 Ne copie pas les fichiers déjà existants. (false) 
    109109 
    110110Voici un exemple de commande d'installation : (remplacez `/www/htdocs` par le chemin vers votre serveur web) 
     
    112112    ./script/setup -d ~/booklink -p /www/htdocs/booklink 
    113113 
    114 Cela va g�n�rer l'architecture suivante pour l'application **booklink** : 
     114Cela va générer l'architecture suivante pour l'application **booklink** : 
    115115 
    116116    booklink/ 
    117         app/ << L'application (mod�les, vues, contr�leurs, et installeurs) 
     117        app/ << L'application (modèles, vues, contrôleurs, et installeurs) 
    118118        config/ << Des machins de configuration, mais tout sera fait via navigateur. 
    119119        public/ << Le seul dossier rendu public 
    120         script/ << Outils de g�n�ration de code, de lancement de tests, etc. 
    121  
    122 **Pour les utilisateurs de Windows :** Les liens symboliques ne fonctionnent pas non plus sous Windows. Il va donc falloir renseigner Apache sur le chemin vers votre application. �ditez le fichier `httpd.conf` et rajoutez ceci (en modifiant, bien entendu, au pr�alable selon votre configuration) : 
     120        script/ << Outils de génération de code, de lancement de tests, etc. 
     121 
     122**Pour les utilisateurs de Windows :** Les liens symboliques ne fonctionnent pas non plus sous Windows. Il va donc falloir renseigner Apache sur le chemin vers votre application. Éditez le fichier `httpd.conf` et rajoutez ceci (en modifiant, bien entendu, au préalable selon votre configuration) : 
    123123 
    124124    Alias /booklink "/chemin/vers/booklink/public" 
     
    131131    </Directory> 
    132132 
    133 N'oubliez pas de redmarrer le serveur Apache. 
    134  
    135 ### Cr�ation de la base de donn�es (MySQL) ### 
    136  
    137 **/!\ Si vous comptez utiliser SQLite, sautez cette tape /!\\** 
    138  
    139 La prochaine �tape consiste � cr�er la base de donn�es relative � votre application. 
    140  
    141 Le but de ce tutoriel n'est bien �videmment pas de vous apprendre � cr�er une base de donn�es. Si vous ne savez pas comment faire, faites des recherches sur Google, vous trouverez s�rement quelquechose :). 
    142  
    143 Cependant, vous pouvez tout simplement essayer de cr�er 3 bases diff�rentes, pour chacun des 3 environnements (production, d�veloppement, tests) 
     133N'oubliez pas de redémarrer le serveur Apache. 
     134 
     135### Création de la base de données (MySQL) ### 
     136 
     137**/!\ Si vous comptez utiliser SQLite, sautez cette étape /!\\** 
     138 
     139La prochaine étape consiste à créer la base de données relative à votre application. 
     140 
     141Le but de ce tutoriel n'est bien évidemment pas de vous apprendre à créer une base de données. Si vous ne savez pas comment faire, faites des recherches sur Google, vous trouverez sûrement quelquechose :). 
     142 
     143Cependant, vous pouvez tout simplement essayer de créer 3 bases différentes, pour chacun des 3 environnements (production, développement, tests) 
    144144 
    145145    $> mysql -u root -p 
     
    152152    mysql> exit 
    153153 
    154 Vous pouvez bien �videmment passer par une interface graphique, telle phpMyAdmin, pour cr�er ces tables. 
    155  
    156 ### Cration des fichiers de configuration ### 
    157  
    158 #### l'aide de l'installeur #### 
    159  
    160 Vous pouvez ouvrir votre navigateur et vous rendre sur le script d'installation en allant l'adresse `http://localhost/booklink`. 
    161  
    162 Vous allez donc pouvoir configurer votre base de donn�es, vos diff�rents langages, et les permissions de vos fichiers. Le fichier de configuration sera enfin g�n�r�. Pendant que bermi s'occupe de prendre un caf� en attendant que les Anglais et les Espagnols configurent leur application **booklink**, je pencherais plut�t pour un p'tit chocolat chaud. 
    163  
    164 #### Configuration manuelle (non, pas le prnom) #### 
    165  
    166 Copiez les fichiers `config/DEFAULT-config.php` et `config/DEFAULT-routes.php` en tant que `config/config.php` et `config/routes.php`, respectivement, et �ditez-les � vos soins. 
    167  
    168 Il vous faudra probablement aussi d�finir le dossier � partir duquel s'effectue la r�-�criture d'URL (afin de pouvoir utiliser des URL propres). �ditez donc le fichier `public/.htaccess`, et changez la valeur de RewriteBase : 
     154Vous pouvez bien évidemment passer par une interface graphique, telle phpMyAdmin, pour créer ces tables. 
     155 
     156### Création des fichiers de configuration ### 
     157 
     158#### À l'aide de l'installeur #### 
     159 
     160Vous pouvez ouvrir votre navigateur et vous rendre sur le script d'installation en allant à l'adresse `http://localhost/booklink`. 
     161 
     162Vous allez donc pouvoir configurer votre base de données, vos différents langages, et les permissions de vos fichiers. Le fichier de configuration sera enfin généré. Pendant que bermi s'occupe de prendre un café en attendant que les Anglais et les Espagnols configurent leur application **booklink**, je pencherais plutôt pour un p'tit chocolat chaud. 
     163 
     164#### Configuration manuelle (non, pas le prénom) #### 
     165 
     166Copiez les fichiers `config/DEFAULT-config.php` et `config/DEFAULT-routes.php` en tant que `config/config.php` et `config/routes.php`, respectivement, et éditez-les à vos soins. 
     167 
     168Il vous faudra probablement aussi définir le dossier à partir duquel s'effectue la ré-écriture d'URL (afin de pouvoir utiliser des URL propres). Éditez donc le fichier `public/.htaccess`, et changez la valeur de RewriteBase : 
    169169 
    170170    RewriteBase /booklink 
    171171 
    172 Une fois votre application installe, vous pouvez ouvrir un navigateur et aller sur `http://localhost/booklink`. Un message d'accueil s'affichera, et vous pourrez alors supprimer les fichiers d'installation du framework. 
    173  
    174 Structure de la base de donnes 
     172Une fois votre application installée, vous pouvez ouvrir un navigateur et aller sur `http://localhost/booklink`. Un message d'accueil s'affichera, et vous pourrez alors supprimer les fichiers d'installation du framework. 
     173 
     174Structure de la base de données 
    175175--------------------------------- 
    176176 
    177 Il va maintenant falloir dfinir les tables que **booklink** va utiliser pour stocker les informations sur les livres et leurs auteurs. 
    178  
    179 La plupart du temps, lorsque l'on travaille avec d'autres d�veloppeurs, le sch�ma de la base de donn�es est susceptible de changer. Il devient alors compliqu� de maintenir cette base identique pour chaque personne du projet. Akelos propose donc une solution � ce probl�me, appel�e *installer*, ou *migration*. 
    180  
    181 Gr�ce � cet outil de migration, vous allez non seulement pouvoir cr�er vos bases de donn�es, mais aussi g�n�rer un installeur, qui pourra �tre utilis� pour enregistrer tous les diff�rents changements que vous effectuerez sur la base. 
    182  
    183 Pour ce tutoriel, crez le fichier `app/installers/booklink_installer.php`, et copiez-y le contenu suivant : 
     177Il va maintenant falloir définir les tables que **booklink** va utiliser pour stocker les informations sur les livres et leurs auteurs. 
     178 
     179La plupart du temps, lorsque l'on travaille avec d'autres développeurs, le schéma de la base de données est susceptible de changer. Il devient alors compliqué de maintenir cette base identique pour chaque personne du projet. Akelos propose donc une solution à ce problème, appelée *installer*, ou *migration*. 
     180 
     181Grâce à cet outil de migration, vous allez non seulement pouvoir créer vos bases de données, mais aussi générer un installeur, qui pourra être utilisé pour enregistrer tous les différents changements que vous effectuerez sur la base. 
     182 
     183Pour ce tutoriel, créez le fichier `app/installers/booklink_installer.php`, et copiez-y le contenu suivant : 
    184184  
    185185     <?php 
     
    190190              
    191191             $this->createTable('books', 
    192                 'id,'.          // La cl primaire 
     192                'id,'.          // La clé primaire 
    193193                'title,'.       // Le titre du livre 
    194194                'description,'. // La description du livre 
    195                 'author_id,'.   // L'identifiant de l'auteur. C'est gr�ce � cela qu'Akelos va pouvoir faire le lien entre les deux. 
     195                'author_id,'.   // L'identifiant de l'auteur. C'est grâce à cela qu'Akelos va pouvoir faire le lien entre les deux. 
    196196                'published_on'  // La date de publication 
    197197            ); 
    198198             
    199199             $this->createTable('authors',  
    200                 'id,'.      // La cl primaire 
     200                'id,'.      // La clé primaire 
    201201                'name'      // Le nom de l'auteur 
    202202                ); 
     
    210210     ?> 
    211211 
    212 Ce peu de donn�es suffit � Akelos pour cr�er la base de donn�es. En ne sp�cifiant que le nom des colonnes, Akelos choisira lui-m�me leur type en se basant sur les conventions de nommage des tables SQL. Cependant, vous avez bien �videmment la possibilit� de d�finir vous-m�me le typages des colonnes gr�ce � la [syntaxe de PHP Adodb](http://phplens.com/lens/adodb/docs-datadict.htm) 
    213  
    214 Maintenant que nous avons d�fini les tables, il ne reste plus qu'� les installer. Tapez la commande : 
     212Ce peu de données suffit à Akelos pour créer la base de données. En ne spécifiant que le nom des colonnes, Akelos choisira lui-même leur type en se basant sur les conventions de nommage des tables SQL. Cependant, vous avez bien évidemment la possibilité de définir vous-même le typages des colonnes grâce à la [syntaxe de PHP Adodb](http://phplens.com/lens/adodb/docs-datadict.htm) 
     213 
     214Maintenant que nous avons défini les tables, il ne reste plus qu'à les installer. Tapez la commande : 
    215215 
    216216    ./script/migrate Booklink install 
    217217 
    218 Et pouf ! Les tables sont installes automagiquement ! Avec MySQL, vous devriez obtenir quelque chose du genre : 
     218Et pouf ! Les tables sont installées automagiquement ! Avec MySQL, vous devriez obtenir quelque chose du genre : 
    219219 
    220220**TABLE "BOOKS"** 
     
    240240 
    241241 
    242 Modles, Vues, et Controlleurs 
     242Modèles, Vues, et Controlleurs 
    243243------------------------------------------------------ 
    244244 
    245 Pour faire fonctionner vos applications, Akelos utilise le [motif de conception appel MVC](http://fr.wikipedia.org/wiki/Motif_de_conception). 
     245Pour faire fonctionner vos applications, Akelos utilise le [motif de conception appelé MVC](http://fr.wikipedia.org/wiki/Motif_de_conception). 
    246246 
    247247### Les conventions de nommage dans Akelos ### 
    248248 
    249 Le nommage de chaque objet dans Akelos est trs important, puisqu'il permet l'automatisation de son fonctionnement. 
    250  
    251 #### Modles #### 
     249Le nommage de chaque objet dans Akelos est très important, puisqu'il permet l'automatisation de son fonctionnement. 
     250 
     251#### Modèles #### 
    252252 
    253253 * **Dossier :** /app/models/ 
    254254 * **Nom des classes :** au singulier, au format [CamelCase](http://fr.wikipedia.org/wiki/CamelCase) *(BankAccount, User, etc.)* 
    255  * **Nom des fichiers :** au singulier, s�par� par des underscore *(bank_account.php.php, user.php, etc.)* 
    256  * **Nom des tables :** au pluriel, s�par� par des underscore *(bank_accounts, users)* 
    257  
    258 #### Contrleurs #### 
     255 * **Nom des fichiers :** au singulier, séparé par des underscore *(bank_account.php.php, user.php, etc.)* 
     256 * **Nom des tables :** au pluriel, séparé par des underscore *(bank_accounts, users)* 
     257 
     258#### Contrôleurs #### 
    259259 
    260260 * **Dossier :** */app/controllers/* 
    261261 * **Nom des classes :** Au singulier ou au pluriel, au format CamelCase, fini par `Controller` *(AccountController, UserController)* 
    262  * **Nom des fichiers :** Au singulier ou au pluriel, s�par� par des underscore, fini par `_controller` *(account_controller.php, user_controller.php)* 
     262 * **Nom des fichiers :** Au singulier ou au pluriel, séparé par des underscore, fini par `_controller` *(account_controller.php, user_controller.php)* 
    263263 
    264264#### Vues #### 
     
    271271------------------------------------------ 
    272272 
    273 Akelos fournit une m�thode de **scaffold**, � savoir une g�n�rateur de code qui vous fera non seulement gagner du temps, mais pourra aussi servir de point de d�part � la construction de votre application, ou � votre apprentissage. 
     273Akelos fournit une méthode de **scaffold**, à savoir une générateur de code qui vous fera non seulement gagner du temps, mais pourra aussi servir de point de départ à la construction de votre application, ou à votre apprentissage. 
    274274 
    275275### La magie du scaffold ### 
    276276 
    277 �l'aide du scaffolding, vous allez g�n�rer le squelette d'une interface d'administration pour **booklink**, ce qui va vous permettre d'ajouter/�diter/supprimer des entr�es dans la base de donn�es. 
     277À l'aide du scaffolding, vous allez générer le squelette d'une interface d'administration pour **booklink**, ce qui va vous permettre d'ajouter/éditer/supprimer des entrées dans la base de données. 
    278278Tapez ces deux commandes : 
    279279 
     
    281281    ./script/generate scaffold Author 
    282282 
    283 Cela va cr�er une multitude de fichiers l� o� il le faut, et le tout va fonctionner directement ! Sceptique ? 
    284 Allez donc sur [http://localhost/booklink/author](http://localhost/booklink/author) et sur [http://localhost/booklink/books](http://localhost/booklink/books), et vous pourrez d'ores et d�j� g�rer les livres et les auteurs dans votre base de donn�es. 
    285 Allez, je vous laisse un peu de temps pour vous amuser, et revenez me voir d�s que vous �tes pr�ts � continuer. 
     283Cela va créer une multitude de fichiers là où il le faut, et le tout va fonctionner directement ! Sceptique ? 
     284Allez donc sur [http://localhost/booklink/author](http://localhost/booklink/author) et sur [http://localhost/booklink/books](http://localhost/booklink/books), et vous pourrez d'ores et déjà gérer les livres et les auteurs dans votre base de données. 
     285Allez, je vous laisse un peu de temps pour vous amuser, et revenez me voir dès que vous êtes prêts à continuer. 
    286286 
    287287Le fonctionnement d'Akelos 
    288288------------------------------------------ 
    289289 
    290 Voici une description rapide de comment Akelos r�agi lorsqu'il r�pond � l'adresse : `http://localhost/booklink/book/show/2` 
     290Voici une description rapide de comment Akelos réagi lorsqu'il répond à l'adresse : `http://localhost/booklink/book/show/2` 
    291291   
    292  1. Akelos va r�cup�rer trois param�tres, en fonction de ce que vous avez d�fini dans le fichier `/config/routes.php` (tutoriel est � venir) : 
    293  
    294   * contrleur : *book* 
     292 1. Akelos va récupérer trois paramètres, en fonction de ce que vous avez défini dans le fichier `/config/routes.php` (tutoriel est à venir) : 
     293 
     294  * contrôleur : *book* 
    295295  * action : *show* 
    296296  * id : 2 
     
    298298 2. Il va ensuite chercher le fichier `/app/controllers/book_controller.php`. S'il existe, il instanciera la classe `BookController`. 
    299299 
    300  3. Le contr�leur instanci� va chercher le mod�le lui correspondant, ici `/app/models/book.php`. Si le mod�le existe, il en cr�e une instance, disponible ici via l'attribut `$this->Book`. Il va ensuite chercher dans la base de donn�es Books l'entr�e avec un `id = 2` qui �crasera l'attribut `$this->Book`. 
     300 3. Le contrôleur instancié va chercher le modèle lui correspondant, ici `/app/models/book.php`. Si le modèle existe, il en crée une instance, disponible ici via l'attribut `$this->Book`. Il va ensuite chercher dans la base de données Books l'entrée avec un `id = 2` qui écrasera l'attribut `$this->Book`. 
    301301 
    302302 4. Akelos appelle enfin l'action `show` de la classe `BookController`. 
    303303 
    304  5. A la fin de l'action, Akelos chercher le fichier de vue `/app/views/book/show.tpl` et cr�e le rendu de ce fichier, ce dernier �tant aussi disponible dans la variable `$content_for_layout` dans les layouts. 
    305  
    306  6. Akelos va enfin chercher le fichier layout appel� `/app/views/layouts/book.tpl`. Si ce fichier est trouv�, Akelos cr�e le rendu du layout, et assigne le contenu de la vue dans `$content_for_layout`. Le tout est enfin envoy� au navigateur. 
    307  
    308 Si vous avez compris ce fonctionnement, je pense que vous pouvez d'ores et d�j� commencer � modifier votre application. 
     304 5. A la fin de l'action, Akelos chercher le fichier de vue `/app/views/book/show.tpl` et crée le rendu de ce fichier, ce dernier étant aussi disponible dans la variable `$content_for_layout` dans les layouts. 
     305 
     306 6. Akelos va enfin chercher le fichier layout appelé `/app/views/layouts/book.tpl`. Si ce fichier est trouvé, Akelos crée le rendu du layout, et assigne le contenu de la vue dans `$content_for_layout`. Le tout est enfin envoyé au navigateur. 
     307 
     308Si vous avez compris ce fonctionnement, je pense que vous pouvez d'ores et déjà commencer à modifier votre application. 
    309309 
    310310Faire la relation entre *Books* et *Authors* 
    311311---------------------------- 
    312312 
    313 Il va maintenant falloir crer le lien entre la classe *Book* et la classe *Author*. Pour cela, il vous faudra utiliser la colonne `author_id` dans la base *books* 
    314  
    315 Pour renseigner chacun des modles sur la relation entre *books* et *authors*, il vous suffit de faire : 
     313Il va maintenant falloir créer le lien entre la classe *Book* et la classe *Author*. Pour cela, il vous faudra utiliser la colonne `author_id` dans la base *books* 
     314 
     315Pour renseigner chacun des modèles sur la relation entre *books* et *authors*, il vous suffit de faire : 
    316316 
    317317`/app/models/book.php` 
     
    321321    class Book extends ActiveRecord 
    322322    { 
    323         var $belongs_to = 'author'; // Un livre correspond un auteur 
     323        var $belongs_to = 'author'; // Un livre correspond à un auteur 
    324324    } 
    325325     
     
    332332    class Author extends ActiveRecord 
    333333    { 
    334         var $has_many = 'books'; // Un auteur peut possder plusieurs livres 
     334        var $has_many = 'books'; // Un auteur peut posséder plusieurs livres 
    335335    } 
    336336     
    337337    ?> 
    338338 
    339 Les mod�les savent maintenant comment ils sont li�s, mais il faut que le contr�leur `BookController` puisse charger les deux mod�les, `author` et `book`. 
     339Les modèles savent maintenant comment ils sont liés, mais il faut que le contrôleur `BookController` puisse charger les deux modèles, `author` et `book`. 
    340340 
    341341`/app/models/author.php` 
     
    345345    class BookController extends ApplicationController 
    346346    { 
    347         var $models = 'book, author'; // Cette ligne suffit � indiquer quels mod�les utiliser 
     347        var $models = 'book, author'; // Cette ligne suffit à indiquer quels modèles utiliser 
    348348         
    349349        // ... code du controlleur 
     350         
     351        function show() 
     352        { 
     353            // Remplacer "$this->book = $this->Book->find(@$this->params['id']);" 
     354            // par celle-ci 
     355            $this->book = $this->Book->find(@$this->params['id'], array('include' => 'author')); 
     356        } 
     357 
     358        // suite et fin du code du controlleur 
    350359    } 
    351360 
    352 La prochaine �tape consiste � afficher les auteurs disponibles dans la base lors de l'ajout/�dition d'un livre. Il suffit pour cela d'utiliser, dans la vue, 
     361La prochaine étape consiste à afficher les auteurs disponibles dans la base lors de l'ajout/édition d'un livre. Il suffit pour cela d'utiliser, dans la vue, 
    353362la variable `$form_options_helper`. 
    354363 
    355 Juste aprs `<?=$active_record_helper->error_messages_for('book');?>`, dans le fichier */app/views/book/_form.tpl*, rajoutez le code suivant : 
     364Juste après `<?=$active_record_helper->error_messages_for('book');?>`, dans le fichier */app/views/book/_form.tpl*, rajoutez le code suivant : 
    356365 
    357366`/app/views/book/_form.tpl` 
     
    362371    </p> 
    363372 
    364 Si vous n'avez pas encore ajout� d'auteurs dans votre base de donn�es (vilain garnement), c'est le moment de le faire. 
    365  
    366 Vous pouvez donc d�sormais choisir l'auteur de chaque livre. C'est magnifique ! Mais vous avez s�rement remarqu� que vous ne voyez pas l'auteur des livres dans la liste des livres. 
    367 Ouvrez donc le fichier `app/views/book/show.tpl`, et juste aprs `<? $content_columns = array_keys($Book->getContentColumns()); ?>`, rajoutez : 
     373Si vous n'avez pas encore ajouté d'auteurs dans votre base de données (vilain garnement), c'est le moment de le faire. 
     374 
     375Vous pouvez donc désormais choisir l'auteur de chaque livre. C'est magnifique ! Mais vous avez sûrement remarqué que vous ne voyez pas l'auteur des livres dans la liste des livres. 
     376Ouvrez donc le fichier `app/views/book/show.tpl`, et juste après `<? $content_columns = array_keys($Book->getContentColumns()); ?>`, rajoutez : 
    368377 
    369378    <label>_{Author}:</label> <span class="static">{book.author.name?}</span><br /> 
    370379 
    371 Vous vous demandez s�rement ce que ces `_{Author}` ou autre `{book.author.name?}`. C'est en fait la syntaxe utilis�e par [Sintags](http://www.bermi.org/projects/sintags) dans les templates d'Akelos. 
     380Vous vous demandez sûrement ce que ces `_{Author}` ou autre `{book.author.name?}`. C'est en fait la syntaxe utilisée par [Sintags](http://www.bermi.org/projects/sintags) dans les templates d'Akelos. 
    372381 
    373382 
     
    375384-------------------- 
    376385 
    377 C'est tout pour le moment. Ce tutoriel continuera bien s�r d'�voluer, et il y en aura d'autres, car ce ne sont pas l� les seules fonctionnalit�s d'Akelos ! 
    378 Si vous voyez une faute de frappe ou de fran�ais, n'h�sitez pas � me le faire savoir ! 
     386C'est tout pour le moment. Ce tutoriel continuera bien sûr d'évoluer, et il y en aura d'autres, car ce ne sont pas là les seules fonctionnalités d'Akelos ! 
     387Si vous voyez une faute de frappe ou de français, n'hésitez pas à me le faire savoir ! 
  • trunk/docs/tutorial.markdown

    r146 r173  
    258258    ./script/generate scaffold Author 
    259259 
    260 This will generate a brunch of files and folder with code that really works!. Don't trust me? Try it yourself. Point your browser to [http://localhost/booklink/author](http://localhost/booklink/author) and [http://localhost/booklink/books](http://localhost/booklink/books) to start adding authors and books. Create some records and come back for an explanation of what is going under the hood. 
     260This will generate a bunch of files and folders with code that really works!. Don't trust me? Try it yourself. Point your browser to [http://localhost/booklink/author](http://localhost/booklink/author) and [http://localhost/booklink/books](http://localhost/booklink/books) to start adding authors and books. Create some records and come back for an explanation of what is going under the hood. 
    261261 
    262262 
     
    316316Now that you made the models aware of each other you will need to modify the book controller so it loads the `author` and the `book` model instances 
    317317 
    318 */app/models/author.php* 
     318*/app/controllers/book_controller.php* 
    319319 
    320320    <?php 
     
    325325         
    326326        // ... more BookController code 
     327         
     328         // ... more BookController code 
     329  
     330        function show() 
     331        { 
     332            // Replace "$this->book = $this->Book->find(@$this->params['id']);" 
     333            // with this in order to find related authors. 
     334            $this->book = $this->Book->find(@$this->params['id'], array('include' => 'author')); 
     335        } 
     336         
     337        // ... more BookController code 
     338    } 
    327339 
    328340Next step is to show available authors when creating or editing a book. This can be achieved using the `$form_options_helper` by inserting the following code 
  • trunk/lib/AkActiveRecord.php

    r161 r173  
    861861        switch ($args[0]) { 
    862862            case 'first': 
    863             $result =& $this->find('all', array_merge($options, array('limit'=>1))); 
     863 
     864            $options = array_merge($options, array((!empty($options['include']) && $this->hasAssociations() ?'virtual_limit':'limit')=>1)); 
     865            $result =& $this->find('all', $options); 
     866 
    864867            if(!empty($result) && is_array($result)){ 
    865868                $_result =& $result[0]; 
     
    926929 
    927930                case 1 : 
    928  
    929                 if(empty($options['include'])){ 
    930                     $result =& $this->find('first', array_merge($options, array('conditions' => $this->getTableName().'.'.$this->getPrimaryKey().' = '.$ids[0].$conditions))); 
    931                     if(is_array($args[0]) && $result !== false){ 
    932                         //This is a dirty hack for avoiding PHP4 pass by reference error 
    933                         $result_for_ref = array(&$result); 
    934                         $_result =& $result_for_ref; 
    935                     }else{ 
    936                         $_result =& $result; 
    937                     } 
    938                     return  $_result; 
    939  
    940                     break; 
    941                 } 
     931                $table_name = !empty($options['include']) && $this->hasAssociations() ? '__owner' : $this->getTableName(); 
     932                $result =& $this->find('first', array_merge($options, array('conditions' => $table_name.'.'.$this->getPrimaryKey().' = '.$ids[0].$conditions))); 
     933                if(is_array($args[0]) && $result !== false){ 
     934                    //This is a dirty hack for avoiding PHP4 pass by reference error 
     935                    $result_for_ref = array(&$result); 
     936                    $_result =& $result_for_ref; 
     937                }else{ 
     938                    $_result =& $result; 
     939                } 
     940                return  $_result; 
     941 
     942                break; 
     943 
    942944                default: 
    943945 
  • trunk/lib/AkActiveRecord/AkAssociatedActiveRecord.php

    r132 r173  
    280280        } 
    281281 
    282         $result =& $this->_findBySqlWithAssociations($sql, $limit, $offset, $options['include']); 
     282        $result =& $this->_findBySqlWithAssociations($sql, $limit, $offset, $options['include'], empty($options['virtual_limit']) ? false : $options['virtual_limit']); 
    283283 
    284284        return $result; 
     
    336336     * @todo Refactor in order to increase performance of associated inclussions 
    337337     */ 
    338     function &_findBySqlWithAssociations($sql, $limit = null, $offset = null, $included_associations = array()
     338    function &_findBySqlWithAssociations($sql, $limit = null, $offset = null, $included_associations = array(), $virtual_limit = false
    339339    { 
    340340        if(is_array($sql)){ 
     
    345345        $this->setConnection(); 
    346346        $objects = array(); 
     347        $_included_results = array(); // Used only in conjuntion with virtual limits for doing find('first',...include'=>... 
    347348        if(is_integer($limit)){ 
    348349            if(is_integer($offset)){ 
     
    386387                $e = null; 
    387388                $object_id = $this_item_attributes[$this->getPrimaryKey()]; 
     389                 
     390                if(!empty($virtual_limit)){ 
     391                    $_included_results[$object_id] = $object_id; 
     392                    if(count($_included_results) > $virtual_limit){ 
     393                        continue; 
     394                    } 
     395                } 
     396                 
    388397                if(!isset($ids[$object_id])){ 
    389398                    $ids[$object_id] = $i; 
     
    395404                    $i = $ids[$object_id]; 
    396405                } 
    397  
     406                 
    398407                foreach ($associated_items as $association_id=>$attributes){ 
    399408                    if(count(array_diff($attributes, array(''))) > 0){ 
  • trunk/test/unit/lib/AkActiveRecord.php

    r161 r173  
    2323'AkActiveRecord_accessible_attributes', 
    2424'AkActiveRecord_calculations', 
     25'AkActiveRecord_associated_inclusion', 
    2526); 
    2627