JavaScript window.open et Internet Explorer

En JavaScript, l’instruction « window.open(String url [, String nom] [, String options] ) » permet d’ouvrir une nouvel fenêtre ou un nouvel onglet (cela dépend de la configuration du navigateur). Cependant sous Internet Explorer, vous pouvez être confronté à un problème lors de l’exécution de cette instruction si cette dernière est appelée avec en second paramètre une chaine contenant un espace. Dans ce cas Internet Explorer ne crée pas la popup demandée.

Pour y remédier, un simple remplacement des espaces dans ce second paramètre par un underscore « _ » et le tour est joué.

Ruby on Rails test checkbox

Attention, un comportement différent du HTML standard en ce qui concerne les checkbox et Ruby on Rails. Vous avez sûrement déjà tester la présence d’un « name » de checkbox dans votre variable $_POST en php afin de savoir si cette checkbox avait été cochée (par sa simple présence vous saviez qu’elle l’était et en son absence vous saviez qu’elle n’était pas cochée). Et bien cela n’est plus possible en Ruby on Rails, en effet, Rails créé un hidden et il y a donc un passage obligatoire dans la variable params il faut donc faire le test sur la valeur plutôt que la présence.

Liaison de 1 à 1 en Ruby on Rails

Pour réaliser une telle liaison, il est simple de s’apercevoir que l’on peut mettre l’identifiant de l’un dans la table de l’autre et ceci sans contrainte si ce n’est le sens même de cette liaison, exemple :
Prenons une personne qui possède une voiture, il est simple de penser que la personne possède une voiture et non que la voiture possède une personne. On peut donc indiquer que la voiture est une caractéristique de la personne (Objet avec plus d’importance). On va donc stocker la liaison dans la table personne avec l’identifiant de la voiture.

En Ruby on Rails, 2 liaisons belongs_to ne fonctionne pas, il faut donc ajouter une colonne voiture_id dans la table personne puis indiquer une liaison :

belongs_to :voiture

dans le model de Personne et une liaison :

has_one :personne

dans le model de Voiture.

Ainsi, vous venez de créer une liaison de un à un entre une personne et une voiture.

GIT et mise à jour auto du dépôt privé

Nous allons configurer Git pour un workflow proche d’une simple mise à jour via ftp d’un serveur depuis un client, par exemple un serveur Web depuis les postes de développement. Cela nécessite qu’il mette à jour automatiquement un dépôt privé, sur le serveur, lorsqu’une modification a été réalisée dans le dépôt public.

Pour cela, une fois que git est installé et que vos dépôts public et privé sont en place sur le même serveur, il suffit d’ajouter, dans le fichier « hooks/post-update » de votre dépôt public, avant « exec git-update-server-info » :

Ceci entraînera une action après chaque mise à jour de ce dépôt public. L’action appelée entraînera la mise à jour de votre dépôt privé en faisant un « git pull ». Pour que cette action puisse s’exécuter, il vous faut donner au fichier « hooks/post-update » les droits en exécution avec un chmod.

Et voilà, une synchronisation entre votre dépôt public et privé via Git.

Nombre de pages d’un PDF avec ImageMagick et Ruby

Pour connaître le nombre de pages d’un pdf, on peut utiliser ImageMagick et la commande :

No more IE 6 en Ruby

Internet Explorer 6 est bien ancien et ne respecte pas énormément de standards du web, il convient donc de ne plus continuer à intégrer son site internet pour ce genre de navigateur. Il est donc possible de proposer à un utilisateur possédant une telle version d’Internet Explorer de changer et mettre à jour vers un navigateur plus récent. Pour cela il suffit de détecter que le navigateur utilisé est bien IE 6. Ruby propose cette détection via le code suivant :

<% if request.user_agent.try(:include?, « MSIE 6.0 ») %>
Votre message et un lien pour mettre à jour le navigateur.
<% end %>

Comme vous pouvez le remarquer le code proposé vous permet donc de détecter le navigateur utilisé par l’internaute, il suffira de changer la chaine à rechercher pour les autres navigateurs. Ensuite, une fois que la détection est vérifiée, il vous suffi d’afficher un joli message invitant l’internaute à modifier la version de son navigateur avec un lien vers cette nouvelle version et le tour est joué.

Tri « Sort » avec plusieurs paramètres sur un array en ruby

Ruby permet de réaliser des tris sur les tableaux d’objets de manière simple et rapide :

Mais il peut arriver que ce simple tri ne suffise pas s’il est effectué sur un attribut non unique, par exemple un libellé ou un nom, il faut dans ce cas ajouter un second paramètre pour les cas « d’égalité ».

Ruby permet facilement cela :

Et voilà, votre tableau sera en premier lieu trier par le premier paramètre puis en cas d’égalité l’ordre se fera via le second paramètre.

Redirections 301 de vos anciennes urls

Votre url ne vous plaisez plus, vous avez décidé de la modifier. Oui mais sans perdre le référencement que celle-ci avait engendrée, c’est pourquoi vous avez choisi la fameuse redirection 301 qui indique aux moteurs (notamment notre cher ami Google) que votre page a définitivement « déménagée ».

Il existe différentes façons de réaliser cette redirection 301 :

  • via le htaccess
  • via le langage de programmation utilisé

Htaccess

Le fichier .htaccess est la solution de base et à mon sens la plus propre car interprétée avant toutes autres choses.

Pour cela vous pouvez réaliser la redirection 301 de 3 manières différentes. Si votre url est de la forme http://www.mon-site.com/mon-ancienne-url, le plus simple est d’utiliser :

RedirectPermanent /mon-ancienne-url http://www.mon-site.com/ma-nouvelle-url

Si votre url est de la forme http://www.mon-site.com/mon-ancienne-url mais que cette dernière sera réécrite pour que le moteur de votre site puisse la comprendre, vous ne pouvez plus utiliser la méthode ci-dessus mais celle-ci :

RewriteRule ^mon-ancienne-url(.*)$ http://www.mon-site.com/ma-nouvelle-url.html$1 [QSA,L,E,R=301]

Enfin si votre url contient des paramètres (indications placées derrière le ? de l’url) déterminants pour la redirection vous pouvez utiliser la méthode qui suit :

RewriteCond  %{QUERY_STRING} ^le-parametre-a-matcher$
RewriteRule ^le-nom-du-fichier-execute\.son-extension$ http://www.mon-site.com/ma-nouvelle-url [L,E,R=301]

Remarque 1 : RedirectPermanent n’utilise pas d’expressions régulières donc pas besoin d’échapper les caractères spéciaux (« . », « ? », …). Cependant RewriteCond et RewriteRule utilisent tous les deux les expressions régulières donc pensez bien à échapper vos caractères spéciaux avec « \ » devant.

Remarque 2 : Suivant où est placé votre site internet et votre configuration de serveur vous devrez peut-être ajouter ces trois lignes :

Options +FollowSymLinks
RewriteEngine On
RewriteBase /sous-dossier-du-site/

Le langage de programmation utilisé

Une seconde solution consiste à laisser « passer » la page aux niveaux du htaccess pour mieux la rediriger lors de votre première instruction du langage que vous utilisez (Ruby on Rails, PHP, …). Nous vous indiquerons ici 2 exemples, en Ruby on Rails et en PHP.

Ruby on Rails

Le framework Ruby on Rails permet, entre bien d’autres choses, de réaliser ces redirections 301. Il suffit pour cela d’indiquer l’ancienne url dans les routes et de l’envoyer vers une action de votre contrôleur qui redirigera la page de façon élégante en 301 (3 manières possibles suivant les cas).

Dans le fichier routes.rb indiquez :

map.connect '/mon-ancienne-url',
:controller => 'mon-controller-s', :action => 'redirector', :id => '/ma-nouvelle-url'

Attention à l’ordre des routes pour que celle-ci soit bien prise en compte.

Puis dans votre contrôleur indiquez l’action redirector :

ou encore :

ou bien :

PHP

Pour le php, le système est légèrement différent pas de routes donc il faut placer le code qui va suivre avant toutes insertions de code HTML, au risque de ne pas pouvoir effectuer la redirection 301.

Pour cela le mieux est de se placer juste après l’ouverture de la balise php et d’insérer dans votre condition (et oui à vous de regarder l’url pour savoir si vous devez la rediriger ou pas et vers quelle nouvelle adresse) :

ou bien :

La deuxième écriture étant plus complète que la première.

Voilà bon courage.

Envoyer un email avec pièce jointe en PHP

Vous voulez envoyer un pdf, une image ou tout autre document en pièce jointe d’un email dans un script PHP. Pour cela nous allons utiliser la classe PHP mailer : class.phpmailer.php .

Tout d’abord, vous devez inclure la classe phpmailer dans votre script puis l’utiliser comme ci-après :

Ceci fonctionne plutôt bien, elle a été trouvée sur developpez.com.