Création d’un module Magento de formulaire d’abonnement Mailjet

Cet article explique comment créer un module Magento de formulaire d’abonnement à une newsletter pour Mailjet.

Le module Feub Mailjetform dans l'interface d'admin de Magento
Le module Feub Mailjetform dans l’interface d’admin de Magento

Cette semaine j’ai du effectuer une migration (c’est un bien grand mot) de Mailchimp vers Mailjet, le leader européen en matière de service pour l’emailing marketing, principalement pour des raisons de coût, car il faut l’avouer, il n’y a pas photo avec Mailchimp qui est vite cher pour des petits/moyens volumes.

Bref, après la configuration du back office, une des choses les plus naturelles à faire est d’intégrer un formulaire d’abonnement, et bien qu’elle ne fut pas ma surprise de ne rien trouver du côté de Mailjet. Il existe bien un petit générateur de widget très minimaliste qui crée un bout de code iframe à insérer dans son code, un peu léger car pas moyen de personnaliser l’apparence du formulaire. L’autre solution, c’est de taper dans l’API et d’écrire son propre code.

J’ai donc cherché pas mal en ligne pour trouver un module pour Magento, en vain. Je me suis rabattu sur du PHP lambda à intégrer, un bout de code pour ajouter un banal formulaire de souscription à une newsletter Mailjet. Rien, même après plusieurs heures.

J’ai donc décidé que j’allais écrire mon propre module Magento en utilisant l’API de Mailjet.

Continue reading « Création d’un module Magento de formulaire d’abonnement Mailjet »

Problème de nom de répertoire avec GIT

J’ai fait face à ce petit problème agaçant développant sous Windows avec GIT pour Windows et pushant mes modifications sur un serveur de staging sous CentOS : dans un projet Zend après avoir renommé un répertoire, en l’occurence feubapp en Feubapp – sous Windows donc – celui-ci était toujours vu comme feubapp pour GIT, cela semble un peu tordu, mais en gros GIT avait toujours l’ancienne version feubapp dans sa base même si un ls me montrait que le répertoire était renommé Feubapp. Ceci du à l’insensibilité de la casse sous Windows.
Après un push, je me retrouvais avec deux répertoires feubapp et Feubapp sur mon serveur GNU/Linux.

La solution consiste à renommer ces répertoires depuis GIT en 2 temps :

git mv feubapp Feubapp2
git mv Feubapp2 Feubapp

Le tour est joué, un git status montre bien que des répertoires ont été renommés. A noter que directement faire ce qui suit ne fonctionne bien entendu pas :

git mv feubapp Feubapp

Merci au post de msysgit.

L’aide de vue headTitle() du framework Zend

L’aide de vue headTitle() permet de placer dynamiquement la balise title du document. Voici une de ses utilisations classiques, on ajoute une méthode _initTitle() au bootstrap :

public function _initTitle()
{
    $view = $this->bootstrap('view')->getResource('view');
    $view->headTitle('Mon site');
    $view->headTitle()->setSeparator(' / ');
}

Le titre est mis à « Mon site » et un séparateur est ajouté. Puis dans la méthode init() du contrôleur on ajoute « Mon contrôleur » grace à la méthode append() :

public function init()
{
	$this->view->headTitle()->append('Mon contrôleur');
}

On peut pousser le bouchon plus loin en ajoutant la partie de l’action :

public function indexAction()
{
	$this->view->headTitle()->append('Mon action');
}

Ce qui donne :

Mon site / Mon contrôleur / Mon action

Zend : Utiliser UNION dans une requête

Petit mémo directement prit de la documentation officielle du framework Zend pour combiner les résultats de deux requêtes en utilisant UNION avec Zend_Db_Select :

$sql1 = $db->select();
$sql2 = "SELECT ...";

$select = $db->select()
	->union(array($sql1, $sql2))
	->order("id");

Pour un UNION ALL, il suffit de passer la constante Zend_Db_Select::SQL_UNION_ALL en second paramètre :

$select = $db->select()
	->union(array($sql1, $sql2), Zend_Db_Select::SQL_UNION_ALL)
	->order("id");

Et en passant, pour aider à débugguer un peu les requêtes Zend_Db_Select, il est possible d’utiliser la méthode __toString() pour afficher la requête exécutée. En exemple, il suffit d’ajouter ceci en fin du code ci-dessus :

echo $select->__toString();