Vous pouvez me suivre sur : twitter linkedin rss feed google buzz

Blog : Développement

PHP, jQuery, symfony, CSS et plein d'autre chose...
28- 06- 2010

Symfony : Traduction des filtres de l'admin-generateur

Par le passé, j'avais écris un article sur comment traduire les derniers non traduit de modules générés par l'admin-generateur de symfony.

Avec sa dernière version, symfony 1.4 corrige la plupart de ces champs ne supportant pas l'internationalisation (i18n) sauf quelques irréductibles, tous situés dans les formulaires de filtre :

  • la case à cocher "is empty"
  • les dates "from XXX to YYY"
  • les booléens avec la liste déroulante contenant "yes or no", "yes" et "no"


[Lire la suite...]

10- 07- 2009

Mise en pratique du Design Pattern "Chain of responsibility"

Présentation

Le design pattern "Chain of Responsibility" est souvent peu connu et pourtant il peut être très utile dans la gestion des logs et erreurs.


Généralement, la liste des choix disponibles pour le traitement des problèmes se limite à :

  • générer des logs
  • envoyer un e-mail à l'administrateur
  • générer une exception.
Bien qu'il existe différents composants disponibles répondant unitairement à ces besoins, le développeur doit souvent mixer les solutions, comme par exemple sur détection d'un comportement utilisateur invasif et non-autorisé alors il faut avertir l'administrateur par e-mail, tracer les informations dans un log et générer une exception pour stopper le traitement.


Le design pattern "Chain of Responsibility" permet de réduire cette complexité en créer une seule entité chargée de gérer tous les niveaux d'alerte et d'affecter ceux-ci au niveau de responsabilité correspondant.

[Lire la suite...]

03- 07- 2009

Class PHP : Assert

Aujourd'hui, je vais vous proposer une petite classe utile.
Elle ne révolutionne rien et n'a rien de bien compliquer, je ne m'étendrais donc pas sur les explications.


Objectif


La classe Assert permet de mettre en place le principe des assertions du C++.
Une assertion est un prédicat vérifiant une expression ou des critères devant toujours être rempli au moment où on déclenche la vérification, si le prédicat se revèle faux il faut alors arrêter l'exécution du programme.

Régulièrement dans mon code, j'effectue plusieurs contrôles et si la vérification échoue je lève une exception :

  • contrôle du type des variables passées en paramètre des fonctions
  • code retour d'un appel de méthode
  • présence d'un élément dans un tableau

J'en avais un peu marre de toujours recopier ces contrôles surtout avec le lancement de l'exception, j'ai donc voulu mutualiser ce traitement en reprenant le concpets des Assert() du C++.

[Lire la suite...]

25- 06- 2009

Classe PHP : Conteneur d'objet

Objectif

Pour mes développements, je cherchais à étendre les fonctionnalités des tableaux en PHP pour y intégrer :

  • des contrôles d'intégrité afin que le contenu soit homogène, c'est à dire que chaque élément du tableau appartienne à la même classe d'objet
  • des raccourcis d'utilisation pour les traitements en masse du contenu


J'en suis finalement arrivé à implémenter un nouveau conteneur PHP que j'ai appelé "Collection".


A la base d'un super-tableau.... un tableau !

Avant de construire un nouveau conteneur, il faut partir de la base à savoir un conteneur simple.
Comme il n'est pas possible en PHP d'hériter du type "Array", il faut que notre conteneur contienne un tableau.
Le résultat sera donc une sur-couche aux tableaux et non une véritable extension de ceux-ci.

[Lire la suite...]

08- 04- 2009

Comment attraper/catcher une "Fatal error: Class 'XXX' not found" en PHP

Avant toute chose, posons le contexte qui a conduit à cette astuce.


Je venais de commencer un nouveau projet en PHP et l'une des premières choses que j'avais réalisé était le traitement des exceptions afin que celles-ci soient correctement tracées et, selon la criticité, arrêtent proprement le traitement.
Dans la foulée, je venais de finir de coder la fonction __autoload() de la manière suivante :


function __autoload($class)A
{
  if( is_file($GLOBALS['obj_path'].'Controller/'.$class.'.php' ) )  require_once($GLOBALS['obj_path'].'Controller/'.$class.'.php' );
  else if( is_file( $GLOBALS['obj_path'].'Model/'.$class.'.php' ) ) require_once($GLOBALS['obj_path'].'Model/'.$class.'.php' );
  else if( is_file( $GLOBALS['obj_path'].'View/'.$class.'.php' ) )  require_once($GLOBALS['obj_path'].'View/'.$class.'.php' );
  else if( is_file( $GLOBALS['obj_path'].'Util/'.$class.'.php' ) )  require_once($GLOBALS['obj_path'].'Util/'.$class.'.php' );
  else throw new Exception('Unknown Class ['.$class.']',0001);
}

[Lire la suite...]

18- 03- 2009

Evaluation du contrôle des paramètres en PHP sur les performances

Dernièrement, je me suis remotivé à poursuivre et surtout reprendre le développement de eXodus, mon projet de jeu de stratégie par navigateur.


Les derniers développements datant maintenant de 9 mois, j'ai décidé qu'il fallait mieux repartir sur des bases neuves et saines en :

  • reprenant tout depuis le début
  • capitalisant sur ce qui avait bien marché
  • appliquant un refactoring nécessaire
  • introduisant des bonnes pratiques WEB comme l'accessibilité ou l'emploi de javascript non-obstrusif
  • renforçant la sécurité (le hack du forum myBB d'eXodus m'a convaincu).


[Lire la suite...]

04- 03- 2009

ExternalLink : plugin jQuery

Pour continuer avec jQuery, j'essaie au fur et à mesure d'étendre des bouts de code et voir s'ils peuvent devenir des plugins à part entière.
Sur un de me site, j'utilisais jQuery pour rechercher les liens externes à mon site et ajouter à côté de ces liens une petite icône permettant d'ouvrir le lien dans une nouvelle fenêtre.

$(document).ready(function() 
  {
    $("a[@href^=\"http\"]").each(function(i){$(this).not("[@href*=\""+document.domain+"\"]").not(":has(img)").after(" \"\"");});
  }
);

[Lire la suite...]

10- 02- 2009

AutoMenu : plugin jQuery

La réalisation de mon premier plugin jQuery "Lettrine" s'étant bien passée, j'ai voulu enchaîné avec un second plugin.
Pour cela, j'ai cherché une idée pouvant être utile et originale, et si possible n'existant déjà pas en X exemplaire.
Après pas mal d'heures à me creuser la tête sans grand succès, l'esprit du fainéant en moi m'a fourni la réponse.

Régulièrement, je suis amené à créer des pages Web avec du contenu et souvent en complément un menu de navigation interne.

[Lire la suite...]

15- 01- 2009

Plugin jQuery : Effet Lettrine

Aujourd'hui, je viens de réaliser mon premier plugin jQuery.

Ce plugin réalise l'effet "Lettrine" qui a sur ce site pour la première lettre de chaque paragraphe.
Cet effet permet de remplacer le premier caractère de paragraphe ciblé par une image stylisée de ce caractère.

[Lire la suite...]