Voici un petit article qui vous permettra d’ajouter simplement une fonctionnalité toute bête mais qui peut être très pratique.
L’envoi d’un message de confirmation à l’utilisateur qui vient d’envoyer un message via le formulaire de contact.

Pour cet exemple, je me suis fixé les contraintes suivantes :

  • Cet envoi doit être lié via un module spécifique
  • Ne pas réaliser de surcharge du module “Contacts” existant
  • Le contenu de l’email doit pouvoir être géré depuis les emails transactionnels.

C’est parti, pour cela on va donc créer un module qu’on va appeler Hhennes_Contacts.
Avec le fichier de configuration suivant : ( Hhennes_Contacts/etc/config.xml )

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <modules>
        <Hhennes_Contacts>
            <version>0.1.0</version>
        </Hhennes_Contacts>
    </modules>
    <global>
        <models>
            <hhennes_contacts>
                <class>Hhennes_Contacts_Model</class>
            </hhennes_contacts>
        </models>
        <!-- Configuration de l'email transactionnel -->
        <template>
            <email>
                <contacts_email_recipient_email_template translate="label" module="hhennes_contacts">
                    <label>Formulaire de contact destinataire</label>
                    <file>contact_form_recipient.html</file>
                    <type>html</type><!-- format : text | html -->
                </contacts_email_recipient_email_template>
            </email>
        </template>
    </global>
    <frontend>
        <events>
           <!-- Evenement qui est exécuté APRES le traitement du controller contacts_index_post -->
            <controller_action_postdispatch_contacts_index_post>
                <observers>
                    <hhennes_contacts>
                        <class>hhennes_contacts/observer</class>
                        <method>sendEmailToRequester</method>
                    </hhennes_contacts>
                </observers>
            </controller_action_postdispatch_contacts_index_post>
        </events>
    </frontend>
    <!-- Valeur par défaut pour l'email transactionnel -->
    <default>
        <contacts>
            <email>
                <recipient_email_template>contacts_email_recipient_email_template</recipient_email_template>
            </email>
        </contacts>
    </default>
</config>

Ce fichier de configuration, permet de déclarer les paramètres suivants de notre module:

  • Ajout d’une action sur l’événement controller_action_postdispatch_contacts_index_post ( qui est exécuté après l’action contacts_index_post )
  • Définition d’un email transactionnel, configurable depuis l’administration, ainsi que sa valeur par défaut

Passons à présent au fichier system.xml, ( Hhennes_Contacts/etc/system.xml )
Celui-ci va nous permettre de choisir l’email associé depuis la configuration dans l’administration (via l’onglet de configuration “contacts” de magento )

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <sections>
        <contacts>
            <groups>
                <email>
                    <fields>
                    <recipient_email_template translate="label">
                        <label>Email Template Recipient</label>
                        <frontend_type>select</frontend_type>
                        <source_model>adminhtml/system_config_source_email_template</source_model>
                        <sort_order>40</sort_order>
                        <show_in_default>1</show_in_default>
                        <show_in_website>1</show_in_website>
                        <show_in_store>1</show_in_store>
                    </recipient_email_template>
                </fields>
                </email>
            </groups>
        </contacts>
    </sections>
</config>

La logique du module sera placé dans le fichier Hhennes_Contacts/Model/Observer.php

<?php
/**
 * Description of Observer
 *
 * @author herve
 */
class Hhennes_Contacts_Model_Observer {
    
    const XML_PATH_EMAIL_TEMPLATE_RECIPIENT = 'contacts/email/recipient_email_template';
     
    /**
     * Envoi d'un email au demandeur
     * @return type
     * @throws Exception
     */
    public function sendEmailToRequester($observer)
    {   
        //Récupération des données envoyées et validation     
        $post = $observer->getControllerAction()->getRequest()->getPost();
 
        if ( $post ) {
            $translate = Mage::getSingleton('core/translate');
            $translate->setTranslateInline(false);
            try {
                $postObject = new Varien_Object();
                $postObject->setData($post);
 
                $error = false;
 
                if (!Zend_Validate::is(trim($post['name']) , 'NotEmpty')) {
                    $error = true;
                }
 
                if (!Zend_Validate::is(trim($post['comment']) , 'NotEmpty')) {
                    $error = true;
                }
 
                if (!Zend_Validate::is(trim($post['email']), 'EmailAddress')) {
                    $error = true;
                }
 
                if ($error) {
                    throw new Exception();
                }
                $mailTemplate = Mage::getModel('core/email_template');
                $mailTemplate->setDesignConfig(array('area' => 'frontend'))
                    ->setReplyTo(Mage::getStoreConfig(Mage_Contacts_IndexController::XML_PATH_EMAIL_SENDER))
                    //->setTemplateSubject('Test sujet')   //Le sujet de l'email peut etre fixé en dur ici, ou via les variables dans le template de l'email 
                    ->sendTransactional(
                        Mage::getStoreConfig(self::XML_PATH_EMAIL_TEMPLATE_RECIPIENT),
                        Mage::getStoreConfig(Mage_Contacts_IndexController::XML_PATH_EMAIL_SENDER),
                        $post['email'],
                        null
                    );
 
                if (!$mailTemplate->getSentSuccess()) {
                    throw new Exception();
                }
 
                $translate->setTranslateInline(true);
 
                return;
            } catch (Exception $e) {
                $translate->setTranslateInline(true);
                Mage::getSingleton('customer/session')->addError(Mage::helper('contacts')->__('Unable to submit your request. Please, try again later'));
                return;
            }
 
        }
    }
    
}

Pour finir il faut créer le fichier template par défaut de l’email dans le dossier app/code/locale/en_US/template/email/contact_form_recipient.html ( et dans les différentes langues)

<[email protected] Thanks for your request @-->
{{template config_path="design/email/header"}} 
{{inlinecss file="email-inline.css"}}
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td class="action-content">Hello,
 
Thanks, your contact request have been send to our team
 
We'll contact you as soon as possible
Regards,
Magento Team</td>
</tr>
</tbody>
</table>
{{template config_path="design/email/footer"}}

Vous pouvez ensuite vous rendre sur la page de contact de votre site, et envoyer un email.
Vous recevrez un email qui vous confirmera le bon envoi de votre demande 🙂