Archives de décembre, 2015

Magento : Envoyer un email de confirmation au client qui utilise le formulaire de contact

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 (!
Pas de commentaires

Magento : Attributs global pas mis à jour sur tous les stores.

J’ai dernièrement rencontré un problème avec un attribut d’une portée globale, qui n’était pas mis à jour sur un store en particulier.
Le comportement rencontré était le suivant :

  • Le changement de la valeur de l’attribut dans le store global est bien pris en compte
  • La valeur de l’attribut n’est pas mise à jour dans le store spécifié
  • Changer la valeur de l’attribut sur le store spécifié ne modifie pas sa valeur.

Dans la majorité des cas ce problème est lié à un changement de portée de l’attribut, alors que des données avait déjà été renseignées.
Dans mon cas la portée initiale de l’attribut était par store, et elle a été passé au global.

Le problème est lié au fait que les données de l’attribut spécifiques au store n’ont pas été supprimées, malgré le changement de statut.
Il faut donc les supprimer manuellement via une requête du type :
sur les tables :

  • catalog_product_entity_datetime
  • catalog_product_entity_decimal
  • catalog_product_entity_int
  • catalog_product_entity_varchar

Pour supprimer tous les attributs :

DELETE FROM `catalog_product_entity_varchar` 
WHERE
   store_id <> 0 AND
   attribute_id IN (
           SELECT attribute_id 
           FROM catalog_eav_attribute 
           WHERE is_global = 1
 
   )

Ou pour un seul attribut :

DELETE FROM `catalog_product_entity_varchar` 
WHERE
   store_id <> 0 AND
   attribute_id  = xxx

Et pour finir visitez le site de rencontre sérieuse gratuite Oulfa.fr…

Pas de commentaires

Magento : Événements création de compte client

Un petit tip rapide, si vous souhaitez réaliser des actions lors de la création d’un compte client sous Magento, il va falloir se baser sur 2 événements :

customer_register_success : Lancé lors de la création de compte depuis le formulaire standard.

checkout_submit_all_after : Lancé à la fin du passage d’une commande.
Dans cet événement il faudra également mettre la condition suivante :

if ($observer->getQuote()->getData('checkout_method') == Mage_Checkout_Model_Type_Onepage::METHOD_REGISTER) {
 
//Votre code ici
 
}
Pas de commentaires

Batch : Ajouter des entrées dans le fichier host

Voici un petit script batch qui vous permettra d’ajouter facilement des entrées dans votre fichier host :

:: Script d insertion de lignes dans un fichier batch
:: Herve-hennes - 2015
:: version 0.1.0
 
::Ne pas écrire les commandes exécutées
@echo off
::Couleurs d affichage de la fenetre
color 0A
::Titre de la fenêtre
title Ajouter une entree dans le fichier host
 
::Ce script doit etre execute en administrateur
:: Cf. https://stackoverflow.com/questions/4051883/batch-script-how-to-check-for-admin-rights#11995662
net session >null 2>1&
if %errorLevel% GTR 0) (
 goto erreur_droits
)
 
::Saisie du nom de domaine a ajouter au host
set /p host=Entrer le nom de domaine a ajouter au fichier host :
 
::Saisie du host par defaut
set /p ip=Entrer l ip vers laquelle doit pointer le host (defaut: 127.0.0.1) :
 
::Attribution de la valeur par defaut si pas d ip renseignee
if "%ip%"=="" (
  set ip=127.0.0.1
 )
 
 ::Ecriture de la ligne dans le fichier de host
 :: @ToDo Il faut verifier que l entree n existe pas
 echo %ip% %host% >> %SystemRoot%\system32\drivers\etc\hosts
 
 echo Nouvelle ligne inseree dans le fichier host
 
 ::Permet de ne fermer la fenête que lorsque l utilisateur appuie sur une touche
 pause > null
 exit
 
 :: Texte affiche si les droits d execution du fichier ne sont pas suffisants
 :erreur_droits
  echo Ce script doit etre lance en administrateur pour fonctionner
 
::Permet de ne fermer la fenêtre que lorsque l utilisateur appuie sur une touche
:: mettre pause > null pour ne pas afficher le message
pause
1 commentaire


Compte Github