Catégorie : Code

Flux Rss
1 | 2 | next >>
 

checkbox helper et son label dans cakephp

By esion - the 2008-02-08 11:32:00 - in Code

(6) Comments

Cakephp offre beaucoup de possibilités permettant de générer du code html, cela permet de se soucier un peu moins de la validité au w3c et d'utiliser si l'on veut une sémantique approuvée par des développeurs chevronés.

Ici j'utilise des objets de cakephp pour créer des formulaires (d'accord je pourrai les écrire en html pur et dur mais de cette manière cake automatise pas mal de chose). Parcontre je viens de me rendre compte que lorsque l'on utilise l'helper checkbox dans cakephp ou plus précisement FormHelper::input avec l'option checkbox celui-ci génère le code suivant d'une manière synthétique :

<div><input type="checkbox" /><label>Ma checkbox</label></div>

Les tags <input/> et <label/>auraient du être inversés cela peut poser des problèmes avec un css par exemple :

label { float : left; width : 5em; } 

Je suis allé fouiller dans les libs de cake et pour mettre l'ordre des tags que l'on aurait dû avoir il faut éditer le fichier cake/libs/view/helpers/form à la ligne 660 et modifier le cas "checkbox" :

case 'checkbox':
//hack : change order of html tags display
//$out = $before . $this->checkbox($fieldName, $options) . $between . $out; //default
$out = $before . $out . $this->checkbox($fieldName, $options) . $between;
break;

Je ne sais pas pourquoi l'ordre en a été décidé ainsi néanmoins on peut voir le résultat suivant :

Cakephp bug checkboxavant

Cakephp checkbox hackaprès

 
 

L10n, un début de globalisation sur cakephp

By esion - the 2007-11-21 10:06:00 - in Code

(0) Comments

Bien sûr que c'est possible et plus facilement encore avec cakephp 1.2.

Ce que j'entends par globalisation :

  • Globalisation : rendre une application accessible dans différentes langues.
  • L10n (Localization) : le contenant (les éléments de présentation) sont traduits.
  • i18n (internationalization) : le contenu (les articles, etc.) sont traduits

De quoi est-il question ici :

Je ne vais pas montrer comment changer la langue sur une appli cake, celui-ci se charge très bien tout seul de trouver d'où vient l'utilisateur. Non, je vais essayer de présenter les outils pratiques pour démarrer une application ayant un support de langue ou nécessitant une telle mise à jours ou dans le cas comme le mien où on développe sa petite appli chez soi au fur et à mesure. Et je ne parlerai pour l'instant que du contenant (L10n). Dernière chose, je suis sur le système d'exploitation Ubuntu (pour ceux qui n'ont pas l'habitude d'écouter mes déblaterrations)... (ça aura sa petite importance plus tard).

1 - Quelque chose à traduire

Votre appli est déjà bien avancée et vous avez plein de messages (flash ou dans le style), là il n'existe pas beaucoup de solutions, il faut tous les entourer de la fontion "__('My text')". Notez bien qu'il y a 2 underscores (tiret-bas : _ ). Aussi je mets mon texte entre guillemets simples, j'imagine qu'il n'y aura pas de traitement serveur en plus. Ensuite mon texte contient des espaces, pourtant celui-ci est considéré comme identifiant (msgid) : peu importe cela fonctionne aussi et c'est plus agréable pendant la programmation. Mon texte est en anglais, et bien ça j'avais prévu le coup, on ne sait jamais avec qui on va bosser.

//file : app/controllers/pages_controller.php //[...]  
function add(){
    if(!empty($this->data)){
 	$this->Page->save();
 	//La page a été sauvegardée
 	//"true" indique  que la chaîne a traduire n'est pas directement liée à un "echo"
 	$this->Session->setFlash(__('Page has been saved', true));  
}  
//[...] 
?>
file : app/views/pages/index.ctp
// pas  besoin de "echo" ni de "true" 
 __('Home'); 
// on peut ici integrer une variable dans la chaîne à traduire
// petite astuce qui peut être utilisé pour la pluralisation 
 echo sprintf(__('Hello %s', true), $username);
?>

Ce n'est que le début !

Il faut indiquer à cake que l'on veut utiliser L10n. On peut soit le spécifier dans le controller en question (page) soit dans app_controller pour l'avoir n'importe où dans l'application :

//file : app/app_controller.php
uses('L10n'); 
class AppController extends Controller{
 //[...]
 }
 ?> 

Ensuite pour que cake puisse traduire l'application, il nous faut un fichier contenant toutes les chaines de caractères. Pour ce faire il suffit de creer l'arborescence suivante :

app/locale/{LANG}/LC_MESSAGES/

{LANG} étant une des localisation que l'on veut traduire, cela peut être fr, fr_FR, fre, en, en_US, eng ... et c'est grand choix à faire parmis les multitudes de langues et des déclinaisons. la liste des déclinaisons est disponible dans l'API de cakephp.

Pour ma part j'ai choisis les localisation : "eng" et "fre" qui permet de passer de l'un à l'autre sans se prendre la tête selon ce que demande le navigateur et qui sied à la norme ISO-639-3. J'ai donc les arborescences suivantes:

  • app/locale/eng/LC_MESSAGES/
  • app/locale/fre/LC_MESSAGES/

Je mets de coté "eng" car l'appli est déjà en anglais. Il nous suffit maintenant de créer un fichier default.po qui contiendra nos traductions :

#file : app/locale/fre/LC_MESSAGE/default.po
msgid "Page has been saved" 
msgstr "La page a été sauvée"  

Et ça y est, la traduction fonctionne!

Ok, mais j'ai une centaine de messages à traduire!

[edit] Extract est bien intégré par défaut sur la pre-beta 1.2.0.5875 de cakephpC'est maintenant qu'on se marre. À l'heure où j'écris cette article, cakephp incorpore un outil qui permet d'extraire les chaînes à traduire.

D'abord il nous faut interpreteur php en ligne de commande pour pouvoir cuisiner (et non je ne pouvais pas mettre "bake" dans ma phrase).

Sur un OS à base de debian (Jor Ubuntu) :

[edit] En installant php5-cli vous n'aurez plus à faire modification sur le script de cake.

sudo apt-get install php5-cgi 

On se place ensuite dans le dossier de scripts de cake et on lance le bake :

cd mon_appli/cake/console 
./cake

Soit on a du bol et tout se lance sans problème et on accès à extract soit "yarien".

J'ai du modifier l'executable "cake" car il ne trouvait pas l'interpreteur php :

#file mon_appli/cake/console/cake
echo "Hello $USER,"

exec php-cgi -q ${LIB}cake.php -working "${APP}" "$@"

Cette modifications n'altère pas le fonctionnement de cake en principe néanmoins je décline toutes responsabilités ^^.

Lancez alors la manipulation suivante pour extraire dans un fichier .pot les messages à traduires :

./cake i18n
>[E]xtract POT file...
>Merge : y
>File Name : default
>[Q]uit 

Mettre à jours les traductions.

Oui, on a commencé à traduire l'appli, on va pas le refaire.

Ceci peut être réalisé grâce à l'excellent poedit (que j'ai découvert il y a peu et qui me semble très pouissant).

sudo apt-get install poedit

poEdit est alors accessible dans le menu Application>Développement>poEdit. C'est grâce à lui que l'on va faire nos traductions. Je note parcontre qu'il enregistre par défaut les fichiers sur la norme iso-8859-1. Pour le modifier : menu "catalogue>configuration" Jeux de caractères : utf-8.

On ouvre notre premier fichier de traduction qui se trouve dans app/locale/fre/LC_MESSAGES/default.po et on découvre la première qui a été réalisé. Maintenant on peut le mettre à jours avec notre default.pot que extract a généré. Menu "Catalogue>Mettre à jours depuis fichier .POT" et lui donne notre app/locale/default.pot.

Et ... Il ne reste plus qu'à!

Bien sûr je suis ouvert quand aux astuces et autres améliorations, je viens tout juste de me mettre à la globalisation sur cake et comme je n'ai pas la science infuse, j'ai beaucoup de chance de passer à coté de pas mal de petits trucs bien pratiques. Enfin je dis ça commme ça.

 
 

Conception web2.0 pour débutant

By esion - the 2007-11-15 10:38:00 - in Code

(1) Comments

J'ai réalisé ce petit document pour résumer quelques bonnes pratiques de conception de pages web. Celui-ci est destiné essentiellement aux débutants et quelques anciens de l'air html4.01 qui veulent se mettre à jours.

 
 

Nouveau blog ?

By esion - the 2007-10-14 21:03:00 - in Code

(2) Comments

Le blog qui parle du blog

Hop je me jette direct un peu à l'aveuglette. Je mets donc en production mon über niou blog et pour les quelques adeptes du rss (3 peut être ?!), vous remarquerez que le flux a quelque peu bougé.

En principe la migration s'est faite en douceur, redirection de la page d'accueil et du flux xml. J'ai réussis sans trop de peine à récuperer mes anciens billets (xml is cool) mais pas les commentaires, heureusement on est pas sur myspace et encore moins skyblog, ça n'a donc pas trop d'importance. J'espère quand même que l'essence de ces modestes pages web reste mes élucubrations hautement interressantes et atteignant les sommets de l'autosatisfaction éphemère _o/. (Mais c'est quand même sympa de pouvoir discutailler entre deux billets, je l'accorde).

Bref, ce blog issu tout droit du principe de la réinvention de la roue à été codé en php grâce au framework cakephp. (Uuwi je code un enième blog, mais il faut bien comprendre comment est faite la roue pour pouvoir la faire tourner, s'pas ?!!). Aussi j'ai mis les sources en libre accès sur un serveur svn, dans le cas où j'ai des fans de code sources parmis vous : x6tm-cms@googlecode.

Le blog qui parle de ma vie

Trop bien, je suis en formation web developpeur.... Je sais maintenant que je suis capable de coder en pur xhtml strict une dizaine de page web en environ 8h ... Franchement l'éclate totale. Et aussi je tente de comprendre par mes proprs moyens comment faire de l'asp.net. J'ai pas le droit d'avoir la doc, faudrait pas que j'avance trop vite dans la formation (vive le proprio).

Le blog cynique

Ah bin ouais un peu quand même.

 
 

[ruby]Typo installation svn

By esion - the 2007-09-10 12:43:00 - in Code

(0) Comments

Ruby on rail c'est marrant, ça c'est dit. Un des concepts de ce framework est de ne pas réinventer la roue (peut être est-ce une évidence?! Captain Obvious). Ce qui m'a ammené à tester Typo et ainsi le selectionner comme support pour de futurs applications. Typo est un moteur de blog (weblog engine ... suis-je clair ?).

Je débute alors sur la version stable 4.1.1. Aujourd'hui j'ai quelque bout de code à intégrer, le problème c'est que la nouvelle version risque de chambvouler tout ça et de fortement limiter les futurs migrations. Le système de plugins n'est pas très souple. Alors autant bosser sur la version SVN qui integre une nouvelle gestion des plugins.

Mais ... woops pourquoi ça marcheupas?!

La méthode :


Tirée d'un blog nippon

Prérequis


* Ruby et Ruby on Rails installés et fonctionnels
-> tuto : la totale sur serveur dédié verifier les versions des softs.
-> tuto : Environnement de développement sur ubuntu

Downloading =====> |


On récupère la dernière version de typo sur le serveur SVN (sur linux c'est plus facile ^_^)
$ mkdir mytypo && cd mytypo
$ svn checkout http://svn.typosphere.org/typo/trunk typo

Configuration


Ensuite on configure l'accès à la base de donnée :
$ gedit config/database.yml

login: &login
adapter: mysql
host: localhost
username: mon_nom
password: mon_password
Il suffira de remplir avec les bons paramètres.

Par défaut les applications rails utilisent l'environnement de développement, on creer la base de données qui va bien :
$ sudo mysql> create database typo_dev;

Et maintenant on install les tables :
$ rake db:migrate

no such file to load -- rcov/rcovtask
...

Whooops !
Et oui il manque un petit truc :

$ sudo gem install rcov
Optez pour le premier choix : 1. rcov 0.8.0.2 (ruby)

Et maintenant la migration fonctionne :
$ rake db:migrate

Fight Oh


Il ne reste qu'à lancer le serveur et à configurer le blog :
$ ruby script/server

Si tout s'est bien passé, le serveur est lancé : http://localhost:3000
 
| 1 | 2 | next >>