BastNic's blog

Tag :

PHP

Fil des billets

Jelix c'est le bien

Ce billet sonne le glas d'une période aride pour ce blog... 17 jours sans y retourner (même pour les commentaires).

Jelix !

jelix est un framework PHP5 qui bien qu'à défaut d'être aussi complet et fourni que ce que peuvent être des Symphony ou ZF, propose un modèle objet qui me satisfait au plus haut point. Par exemple les objets réponses et request si utiles au quotidien d'un développeur Jelix ne sont pas encore disponibles partout.

logo_jelix_moyen.pngLa version 1.0 considérée comme stable est sortie il y a quelques jours. Voici donc le communiqué de presse rédigé par Laurent, le principal développeur de ce framework. Mais il ne faut pas se relâcher car rien n'est jamais acquis, à fortiori la stabilité d'un framework PHP. Etre en version stable ne veut pas dire exempt de défaut et la communauté veille à continuer son travail sur Jelix malgré cette première sortie stable : déjà 3 bugs corrigés sur 5 depuis cette sortie[1].

Jelix m'a déjà permis de réaliser très très agréablement deux applis que j'utilise en interne et à utilisation restreinte, et me permet de préparer un webservice qui sera dans quelques mois destiné à un marché bien particulier qui ne concerne quasiment personne dans les lecteurs de ce blog (à part mes clients bien entendu). Ce projet est de loin le plus gros sur lequel j'ai était amené à travailler.

Jelix ne m'apporte pas beaucoup de contrariétés, beaucoup de plaisir dont celui non négligeable de ne pas me sentir à des milliers de lieux des développeurs (même si techniquement c'est le cas). En effet malgré son caractère de cochon (no offense) Laurent est abordable et est très très très très très compétent. S'en est même impressionnant. De même pour les contributeurs qui ont permis que cette version sorte.

J'essaye tant bien que mal d'apporter une pierre à l'édifice avec quelques bugs corrigés (vraiment pas beaucoup :s) et (je fais une requête rapide) 21 bugs/features/enhancement rapportés dont 14 corrigés et implémentés. Et je ne compte pas m'arrêter à si peu. Ce framework vivra !

Pour mes amis qui ont joyeusement quitté le monde PHPien, je ne peux que vous apporter crédit. Mais Jelix rends le monde PHP bien plus agréable à vivre.

ps : Je reprends là (le titre) une expression habituellement usitée par un camarade que je ne vois que très peu mais que j'ai toujours considéré comme un mec bien.. C'est d'ailleurs lui qui m'a fait découvrir Jelix pour la première fois. A l'époque il était considéré comme un framework en version béta mais prometteur. Gilles Fabio, soit de retour ! (je te met en lien d'avance).

Notes

[1] dont deux sont miens et ne sont pas mortels, comme tous les autres d'ailleurs.


Last.fm recrute

J'ai parlé trois fois de Last.fm à des gens susceptibles d'être intéressé par le service apporté rien que sur les deux derniers jours. J'en ai profité ce soir pour mieux voir ce que le site web proposait (personnellement j'utilise le logiciel client mais certains n'ont pas toujours leurs machines persos avec eux).

red_logo.jpg

Bref, dans mes pérégrinations je constate l'existence d'une section Recrutement, je regarde à tout hasard (pour le fun) et le fun ils n'en manquent pas :

lastfm_recrute.png

Devinez les points qui me plaisent le plus ;)

Lire la suite...


Colorisation syntaxique du code sous Dotclear 2

Pour mémoire et pour votre information (au cas où vous l'ignoriez) : le package dcGeshi est là pour ça et fonctionne tout seul[1], j'adore.

Exemple avec du code PHP.

Comme son nom l'indique il se sert du code générique Geshi.

Notes

[1] A condition de mettre son code en "pre"


Gérer une table de jointures super facilement avec Jelix

logo_jelix_moyen.pngJe ne l'ai pas encore dit publiquement, mais je suis maintenant un grand amateur du framework PHP5 Jelix. Ce framework est principalement développé par Laurent Jouanneau (son blog) qui est une des personnes que je suis depuis longtemps en cachette et avec qui j'apprécie maintenant de voir l'efficacité au quotidien.

Jelix, c'est redoutable !

Tenez, j'ai récemment eu un problème avec une table de jointure. J'ai trois tables : ressource, typeRessource et cleRessource. La dernière est composé de clés des deux premières.

L'interface ressemble à :

listemenu.png

Moi tout bêtement, pour enregistrer le tout je code ça (à la va vite sans aucune sûreté pour le moment) :

[PHP]
// instanciation de la factory
$maFactory = jDao::get($this->dao_cleRessource);

// recupération des données sélectionnées
$array_type_sel = $form->getData("typeressource");

// boucle sur tous les ids sélectionnés.
foreach ($array_type_sel as $id_type)
{
	// création d'un record correspondant au dao foo
	$record = jDao::createRecord($this->dao_cleRessource);

	// on remplie le record
	$record->id_typeRessource = $id_type;
	$record->code_Ressource = $id;

	// on le sauvegarde dans la base
	$maFactory->insert($record);

}

Mais non, il suffisait de faire ça :

[PHP]
$form->saveControlToDao("typeressource",$this->dao_cleRessource, $id,array("code_Ressource", "id_typeRessource"));

Bon d'accord ce n'est pas non plus la ligne la plus facile à deviner mais wauow ! UNE LIGNE !

Pour charger les valeurs sélectionnées quand on est en mode vue ou édition du formulaire, il suffit de :

[PHP]
$form->initControlFromDao("typeressource", $this->dao_cleRessource, $form->id, array("code_Ressource", "id_typeRessource"));

Vu que dans mes projets j'ai forcément plein de tables de jointure, ça va me faciliter la vie de manière exceptionnelle.

Pour info, pour charger le contenu de

A venir, de nombreux mini-tutos sur l'utilisation de Jelix.

Bon code, je m'en vais ne pas écrire des tonnes de lignes de code à tout va :p.


Franciser phpLDAPadmin

phpLDAPadmin est une interface web d'administration d'annuaires LDAP. Vous pouvez l'installer par la commande

sudo aptitude install phpldapadmin

Et la documentation sur les annuaires OpenLDAP se trouve sur le wiki ubuntu-fr. Néanmoins je ne parlerais ici que de sa traduction et non de son utilisation.

 46 /* The language setting. If you set this to 'auto', phpLDAPadmin will attempt
 47    to determine your language automatically. Otherwise, available lanaguages
 48    are: 'ct', 'de', 'en', 'es', 'fr', 'it', 'nl', and 'ru'
 49    Localization is not complete yet, but most strings have been translated.
 50    Please help by writing language files. See lang/en.php for an example. */
 51 //$config->custom->appearance['language'] = 'auto';

D'après l'aide, pour passer l'interface en français il faut décommenter la ligne et mettre fr. Mais tel quel, ça ne marche pas !

Analysons le problème : Sur Ubuntu, le paquet installe par défaut les fichiers dans /etc/phpldapadmin/ pour les fichiers de conf et templates et dasn /usr/share/phpldapadmin/ pour les fichiers systèmes. Le passage que j'ai cité ci-dessus se trouve dans /etc/phpldapadmin/config.php.

Fichier /usr/share/phpldapadmin/lib/common.php, ligne 121 :

121     # Grab the language file configured in config.php
122     if ($language != null) {
123         if (strcmp($language,'english') == 0)
124             $language = 'en_GB';
125         $language_file = LANGDIR.$language ;
126         
127         # Set language
128         putenv('LANG='.$language); # e.g. LANG=de_DE
129         setlocale(LC_ALL,$language.".UTF-8"); # set LC_ALL to de_DE
130         bindtextdomain('messages',LANGDIR);
131         bind_textdomain_codeset('messages','UTF-8');
132         textdomain('messages');
133         header('Content-type: text/html; charset=UTF-8', true);
134     }

On constate dans ce bout de code que les instructions sur la langue doit-être du type 'fr_FR' plutôt que 'fr'.

Fichier /etc/phpldapadmin/config.php, ligne 51

  51  $config->custom->appearance['language'] = 'fr_FR';

Update du 3/06 : En fait il existe une méthode auto_lang justement pour passer la langue de "fr" à "fr_FR". Du coup la modification devient.

Fichier /usr/share/phpldapadmin/lib/common.php, ligne 125 :

125         $language = auto_lang($language);

Malgrès cette correction, phpLDAPadmin n'est toujours pas en français.
Heureusement, bien que ce soit assez peu documenté sur Internet, on trouve assez facilement qu'il manque ligne 129 une précision sur le codage du texte. phpLDAPadmin est tout en UTF-8, on en conclut donc qu'il faut ajouter :

Fichier /usr/share/phpldapadmin/lib/common.php, ligne 129 :

129         setlocale(LC_ALL,$language.".UTF-8"); # set LC_ALL to de_DE

On recharge la page, et tout est maintenant en français.

Rapport de bug : Bug 118322 signalé sur le launchpad.


Multi-site avec Code Igniter

Avec quelques projets purs php qui pointent le bout de leurs nez, je me remets doucement à mon framework préféré : Code Igniter.

Il m'avait à l'époque était conseillé par Gilles Fabio (ex aka Play) et je l'ai moi-même conseillé à ma chérie, Kurt et Cyril. Je l'apprécie beaucoup mais il me faut le temps de m'y remettre. En attendant je me forme un peu à mélanger CI et du Javascript. Si si, je me force à m'essayer au Web 2.0... Pour faire des applis webs agréables à utiliser j'y suis bien obligé.

Drupal et Dotclear, mes deux moteurs de CMS/Blogs préférés utilisent tous deux JQuery je vais peut-être m'y intéresser. Pour le moment j'en utilise d'autres qui sont aussi connues mais un peu moins "à la mode". On verra ! De toute manière là n'est pas le sujet, ce post est là pour vous divulguer comment j'organise mon dossier Code Igniter.

Tout d'abord il faut vous apprendre/rappeler comment est organisé par défaut un dossier CI :

  • index.php
  • system
    • application
      • config
      • controllers
      • errors
      • hooks
      • libraries
      • models
      • views
    • cache
    • codeigniter
    • database
    • fonts
    • helpers
    • language
    • libraries
    • logs
    • plugins
    • scaffolding
  • user_guide

En gras les dossiers dans lequel on met tous les fichiers que l'on crée. Je pars du principe que l'on créera plus de fichiers MVC que de librairies ou de plug-ins. Sinon votre application serait bizarre.

En tout cas parcourir une telle profondeur pour éditer mes fichiers ne me va pas. De plus la manière suggérée par la documentation officielle de Code Igniter pour gérer le multi-site ne réponds pas à mon problème de profondeur. De plus, comme Thesa me le rappelle si gentiment, il ne faut pas mettre les fichiers persos avec les fichiers systèmes susceptibles d'être mis-à-jour et donc potentiellement supprimable.

Je décide donc de séparer les dossiers systèmes du dossier application où sont mes fichiers. Mon arborescence devient donc :

  • application1
    • index.php
    • config
    • [...]
    • views
  • application2
    • index.php
    • config
    • [...]
    • views
  • application3
  • ci_default_application
    • index.php
    • config
    • [...]
    • views
  • ci_system
  • ci_user_guide

Le dossier application qui était dans system est monté d'un cran et se nomme maintenant ci_default_application. Le fichier index.php qui était à la racine est déplacé dans ce même dossier. Ensuite chaque dossier applicationX n'est qu'une recopie du ci_default_application. Il suffit ensuite de changer les paramètres dans les fichiers du dossier config pour spécifier la création de la nouvelle application.

Pour que CI comprenne qu'on lui a tout chamboulé son organisation, il faut adapter les fichiers index.php :

$system_folder = "../ci_system";
[...]
$application_folder = ".";

Et le tour est joué. Dorénavant, pour chaque mise-à-jour de Code Igniter, il suffira de modifier le contenu du dossier system.


Module Flexinode sur Drupal 4.7

Avis aux gens qui utilisent ce fabuleux CMS qu'est Drupal, si jamais à l'installation de Flexinode vous avez cette erreur là:

"Warning: Invalid argument supplied for foreach() in
.../modules/flexinode/flexinode.module on line 571."

Ne vous arrachez pas les cheveux à essayer de chercher la solution par vous-même (Y en a qui ont essayé ils ont eu des problèmes) faites plutôt ceci (trouvé ici):

Dans le fichier modules/flexinode/flexinode.module

Trouver

<?php
     // load the field select form up into $form_values. formapi is teh r0x0rZ.
     flexinode_field_select();
     $output = flexinode_field_form($form_values'field_type', $form_values'ctype_id');
?>

Et le remplacer par

<?php
     $output = flexinode_field_form($_REQUEST'edit''field_type', $_REQUEST'edit''ctype_id');
?>

Le temps que j'ai perdu avec cette erreur...

Ajout: mémo pour moi-même, penser à changer le css du code et ajouter la coloration syntaxique.


page 2 de 2 -