Nativement dans Magento, l’inscription à la newsletter se fait depuis une page Abonnements à la newsletter accessible depuis la navigation contextuelle du compte client.

standard-magento_newsletter_subscription
Capture #1

Le but de ce tuto est de déplacer la fonctionnalité directement dans la page Espace de travail du compte.

standard-magento_dashboard
Capture #2

Surcharger le template info.phtml du module Customer:

Le template app/design/frontend/base/default/template/customer/account/dashboard/info.phtml qui affiche la section informations du compte (cf. capture #2) est à copier en l’état et à coller sous app/design/frontend/rwd/[votre_theme]/template/customer/account/dashboard/info.phtml.

Créer un nouveau template form.phtml sur la base du template newsletter.phtml du module Customer :

Le template app/design/frontend/base/default/template/customer/form/newsletter.phtml qui affiche nativement la checkbox d’inscription à la newsletter dans la page Abonnements à la newsletter (cf. capture #1) est à copier en l’état et à coller sous app/design/frontend/rwd/[votre_theme]/template/customer/account/dashboard/newsletter/form.phtml.

Attention : dans ce cas, on change le chemin et le nom du fichier par rapport à l’original car ce dernier demeure exploité dans le site (page Abonnements à la newsletter) et ne doit pas faire l’objet de modifications de manière à continuer de s’afficher et de fonctionner correctement.
Le template form.phtml constitue ainsi un nouveau bloc qu’il conviendra de déclarer dans un fichier Layout.

Déclarer le template form.phtml nouvellement créé dans un fichier Layout :

Si il n’existe pas déjà, créer un fichier app/design/frontend/rwd/[votre_theme]/layout/local.xml et ajoutez-y le code suivant pour déclarer votre nouveau template /customer/account/dashboard/newsletter/form.phtml :

Modification des templates :

Dans info.phtml repérer la ligne <?php /* Extensions placeholder */ ?> (ligne 60 si vous partez bien du fichier sus-nommé) et, juste en dessous, placez le code suivant :

La valeur de getChildHtml() doit être la même que celle de l’attribut <block name="" /> correspondant au bloc déclaré dans le fichier layout (local.xml dans notre exemple) comme celui qui embarque le code du formulaire.

Dans form.phtml repérer la ligne <form action="<?php echo $this->getAction() ?>" method="post" id="form-validate"> (ligne 32 si vous partez bien du fichier susnommé) et la remplacer par :

standard-magento_dashboard-w_newsletter
Capture #3 – le résultat escompté 🙂