Superbe travail


Je viens juste de découvrir le travail de Soh Tanaka et je dois dire que je suis tout simplement admiratif... du beau boulot, fait par quelqu'un de talentueux qui sait toutefois ne pas se prendre la tête.

Bravo.



Commentaires Aucun commentaire pour le moment

Faire un print_r dans un template Smarty


J'avais besoin ce matin de voir ce que contenait précisément l'objet $blockCategTree des catégories de Prestashop, et j'ai trouvé ça :

{$blockCategTree|print_r}

Pratique ? Indispensable !!!



Commentaires 2 commentaires

Rails 3.0 et Ruby 1.9


Quelques trucs assez surprenants (Mais... pourquoi donc changer la notation des Hash ??!), et plein de bonne choses en perspectives : http://www.slideshare.net/arrrrcamp/ruby-19-and-rails-30



Commentaires Aucun commentaire pour le moment

Envoyer des Mails chez Orange depuis Prestashop


Vous l'avez peut être remarqué à vos depends, mais la boite Mail d’Orange filtre les Spams sur le return-path (entre autre) des headers de chaque E-Mail et le problème, c’est que par défaut ce header est à “www-data” lorsque les Mails sont envoyés à partir de la fonction Mail() de PHP. Du coup, vos Mails n'arrivent même pas dans la boite Spams, ils sont tout simplement ignorés.

Prestashop utilise quant à lui une librairie (Swift), pour gérer l'envoie des Mails, et il n’a pas été facile de m’y retrouver afin de fixer ce problème de header, et donc de pouvoir envoyer des Mails aux destinataires Orange. A ma grande surprise, ce sujet -pourtant crucial- n'est que peu abordé dans les différents forums, alors je vous donne une soluce un peu “brutale”, mais qui a le mérite de fonctionner rapidement et sans beaucoup de code.

Une fois dans le répertoire de votre boutique, éditez /tools/swift/Swift/Plugin/MailSend.php, et rendez vous autour des ligne 158 à 161 qui doivent ressembler à ça :

$headers = $headers->build();
if (!ini_get("safe_mode")) $success = mail($to, $subject, $message, $headers, $params);
else $success = mail($to, $subject, $message, $headers);

Tout est dans le cinquième argument de la fonction Mail, où pour l’instant $params n’est pas initialisé. On va donc le faire directement ici :

$headers = $headers->build();
$params = "-f" . "administrateur@mon_nom_de_domaine.com";
if (!ini_get("safe_mode")) $success = mail($to, $subject, $message, $headers, $params);
else $success = mail($to, $subject, $message, $headers);

Voila, c’est tout. Je vous conseil aussi d’ajouter un SPF dans votre config de bind, si vous y avez accès, ainsi que valider votre domaine auprès du “sender-ID program” de chez Microsoft, si en prime vous voulez que les destinataires de chez Hotmail reçoivent eux aussi vos messages.

Pfiouuu…contourner les Anti spam maison des uns et des autres, franchement, c’est l’enfer.



Commentaires 2 commentaires

Calendar_date_select en français et au format 24h


Obtenir des dates correctement formatées dans une interface “user-friendly” est très souvent utile au sein d’une application. Pour arriver à vos fins facilement, rapidement et efficacement, il existe de nombreux Plugins pour Rails. Après en avoir testé plusieurs, j’ai fini par m’arrêter sur Calendar Date Select . Un bon plugin, bien fichu, basé sur la librairie Prototype. Le seul “petit” problème, c’est que la documentation est assez foutraque, les formats de date par défaut sont au format américain “mois/jour/année” et les heures en deux cadrans (5 PM et 5 AM). J’ai donc du me battre avec la doc et creuser dans le code pour arriver à mes fins. Tant qu’à faire, autant partager mes résultats, si ça peut profiter à d’autres…

Note : Ceci n’est probablement pas la solution la plus élégante ni la plus “propre”, mais cela à le mérite de fonctionner parfaitement, et d’être déployable rapidement.

# Installation :

Il est possible d’installer calendar date select via un Gem, mais je préfère le Plugin, afin d’accéder sans souci aux différents fichiers :

git clone git://github.com/timcharper/calendar_date_select.git vendor/plugins/calendar_date_select && rm -rf vendor/plugins/calendar_date_select/.git

Il faut ensuite inclure les fichiers JS dans votre header. Rajoutez la ligne suivante dans votre layout :

<%= calendar_date_select_includes "default" %>

Le “default” représente la skin utilisé, vous pouvez aussi choisir parmi les skins présentes dans votre répertoire “/public/stylesheets/calendar_date_select”

Ajoutez maintenant la ligne suivante dans votre template, en lieu et place de l’emplacement de votre champ date

<%= calendar_date_select_tag "le_nom_de_mon_champ_date", "", :time => true, :style=>'width:220px;' %>

… et hop, vous devriez pouvoir afficher le calendrier au clic sur l’icone à droite du champ. Il ne nous reste “plus qu’à” afficher une date en Français et au format 24h

 

#configuration des jours et des mois :

Nous allons nous baser sur le format “Euro_24h”, le plus proche de celui qu’il nous faut. Ajoutez la ligne suivante dans votre “environmement.rb”

CalendarDateSelect.format = :euro_24hr

Avec ça, le helper que vous avez placé plus haut dans votre header va automatiquement inclure le fichier “/public/javascripts/calendar_date_select/format_euro_24h.js”

Ok, il s’agit maintenant de renseigner les noms des mois et des jours. Editez le fichier “/javascript/calendar_date_select/format_euro_24h” et ajoutez les tableaux suivants :

Date.full_weekdays = $w("Dimanche Lundi Mardi Mercredi Jeudi Vendredi Samedi");
Date.weekdays = $w("Di Lu Ma Me Je Ve Sa");
Date.months = $w("Janvier Fevrier Mars Avril Mai Juin Juillet Aout Septembre Octobre Novembre Decembre" );

… on ajoute aussi le nom du jour dans le champ date. Remplacez la première ligne de la fonction par celle ci :

str = Date.full_weekdays[this.getDay()] + " " + Date.padded2(this.getDate()) + " " + Date.months[this.getMonth()] + " " + this.getFullYear();

Votre fichier “/javascript/calendar_date_select/format_euro_24h” ressemble donc à ça :

Date.prototype.toFormattedString = function(include_time)
{
  //alert(this.getDay());
   str = Date.full_weekdays[this.getDay()] + " " + Date.padded2(this.getDate()) + " " + Date.months[this.getMonth()] + " " + this.getFullYear();
   if (include_time) { str += " " + this.getHours() + ":" + this.getPaddedMinutes() }
   return str;
}

Date.full_weekdays = $w("Dimanche Lundi Mardi Mercredi Jeudi Vendredi Samedi");
Date.weekdays = $w("Di Lu Ma Me Je Ve Sa");
Date.months = $w("Janvier Fevrier Mars Avril Mai Juin Juillet Aout Septembre Octobre Novembre Decembre" );

Si vous testez comme tel, vous devriez obtenir un calendrier avec des jours de de type “Lu, Ma, Me…”, et qui vous retourne une date du type “Mardi 1 juin 2010 11:20. C’est déja bien, mais le champ de selection de l’heure est -lui- toujours au format anglo-saxon “AM/PM”. (note : c’est là que ce tuto dérape un peu et est à mon avis un peu “intrusif”, mais bon… si quelqu’un a une solution plus élégante, je suis preneur). Ouvrez maintenant le fichier “/public/javascript/calendar_date_select/calendar_date_select.js”, et éditez les deux méthodes suivante, autour de la ligne 30 :

Date.prototype.getAMPMHour = function() { var hour = this.getHours(); return (hour == 0) ? 12 : (hour > 12 ? hour - 12 : hour ) }
Date.prototype.getAMPM = function() { return (this.getHours() < 12) ? "AM" : "PM"; }

… modifiez les afin d’obtenir ça :

Date.prototype.getAMPMHour = function() { var hour = this.getHours(); return (hour == 0) ? 0 : (hour > 24 ? hour - 24 : hour ) }
Date.prototype.getAMPM = function() { return (this.getHours() < 12) ? "" : ""; }

… et voila !



Commentaires Aucun commentaire pour le moment