Archive pour la ‘Magento’ catégorie

Magento : Module Dataflow avancés

Magento propose nativement des fonctionnalités d’imports / exports avancées qui ne sont pas forcément connues de tous les développeurs, ce sont les “Profils avancés” , ceux-ci sont disponible directement depuis l’administration dans le menu “Système — Importer/Exporter — Flux de données – Profils avancés”
Par défaut, aucun profil n’existe, mais ces profils vous permettent d’importer/exporter rapidement et facilement des objets magento.

J’avais déjà fait plusieurs articles sur le sujet :
Magento : Importer / Exporter les commentaires et les notes des produits via les profils avancés
Magento : Importer / Exporter les produits complémentaires ( upsell , crossell , related ) via les profils avancés

Afin de boucler la boucle, j’ai donc réalisé un module de gestion de ces profils avancés.

Celui-ci vous permets d’importer/exporter les éléments magento suivants  directement depuis l’administration.

  • Blocks cms
  • Pages cms
  • Commentaires et notes produits
  • Produits complémentaires
  • Emails transactionnels ( en base de données )

Le module est disponible sur github : https://github.com/nenes25/magento_dataflow
Pour ceux qui souhaitent étendre les possibilités du module, nous allons voir rapidement comment celui-ci fonctionne.…

Pas de commentaires

Magento : Ajouter des filtres dans la grid des produits d’une catégorie

J’ai récemment fait face aux limites de la gestion des produits des catégories dans l’administration de Magento.

En effet, dans l’onglet “Produits de la catégories” l’ensemble des produits associés sont listés, et il n’est pas possible de filtrer ceux qui ne sont pas visibles en front office ( Produits désactivés, produits non visibles individuellement, ou uniquement dans la recherche )

Pour optimiser cela, nous allons donc rajouter les possibilités suivantes à la grid :

  • Filtrer par status ( Actif / Non actif )
  • Filtrer par visibilité ( Non visible individuellement, Catalogue … )

Pour faire cela nous allons réaliser un nouveau module.
Je ne détaille pas la création du module ni tout ce qui est générique car cet exemple est le même que pour le cas suivant : https://www.h-hennes.fr/blog/2015/06/29/magento-ajouter-un-attribut-personnalise-a-la-grid-des-produits-via-les-observers/

Le module qui réalise les 2 actions  est disponible sur github : https://github.com/nenes25/magento_productGridFilter)

Il serait possible de surcharger directement la grid Mage_Adminhtml_Block_Catalog_Category_Tab_Product  pour faire cela, mais magento permets de le faire plus proprement via des Observers.…

Pas de commentaires

Magento 2 : Mise en place d’un environnement de développement local

L’année 2016 devrait marquer la montée en puissance de la plateforme Magento2.
Voici comment mettre en place rapidement un environnement de développement local pour Magento 2
Nous allons passer par la création d’une machine virtuelle qui utilisera Vagrant et virtualbox.
Je suppose donc que vous savez vous servir de ces technologies.

Installation du serveur et récupération des fichiers

  • Faites un clone du github :https://github.com/IamSwap/MageBox  ( Cette image est un stack lamp avec Mysql 5.6 obligatoire pour magento 2
  • Exécutez la commande vagrant “vagrant up” pour lancer la vm
  • Télécharger ensuite l’archive de Magento 2 depuis la page des download Magento et placer la dans le dossier “public”
  • (Optionnel ) Ajouter un nom de domaine local vers l’adresse ip : 192.168.20.10 , ( ex : www.magento2.dev )

Une fois tous ces éléments effectués, les conditions sont en place pour passer à l’installation de Magento 2

Installation de Magento2

Pour procéder rapidement nous allons l’installer via la ligne de commande.
Connectez-vous à la machine virtuelle dans le dossier /var/www/public/ et exécuter le code suivant :

php -d xdebug.max_nesting_level=500 -f bin/magento setup:install --base-url=http://www.magento2.dev/ \
--db-host=localhost --db-name=magebox --db-user=root --db-password=mysql \
--admin-firstname=Magento --admin-lastname=User --admin-email=user@example.com \
--admin-user=admin --admin-password=admin123 --language=en_US \
--currency=USD --timezone=America/Chicago --use-rewrites=0

Vous pouvez personnaliser les différents éléments pour les adapter à vos besoins, mais ceux-ci sont directement fonctionnels sur la machine virtuelle.…

Pas de commentaires

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

Magento : Ajouter des nouveaux attributs aux formulaires de création de compte

Une mise à jour de cet article pour Magento 2 est disponible : Magento 2 : Ajouter des nouveaux attributs aux formulaires de création de compte
Dans cet article nous allons voir ensemble comment ajouter proprement un nouvel attribut client qui sera affiché dans les formulaires suivants

  • Création de compte ( normal )
  • Création de compte ( checkout )
  • Création de compte ( admin )

Pour l’exemple nous allons créer un attribut “website_know”, qui permettra de demander au client via quel source il a connu le site.

Le tout va être géré via un module nommé “Hhennes_Customer”.
Je ne détaillerais pas toutes les étapes de création du module mais uniquement les points particuliers.

Partie Code :

Pour commencer voici le fichier de configuration de notre module.

 <?xml version="1.0"?>
 
<config>
 
    <!-- Configuration de base du Module -->
    <modules>
        <Hhennes_Customer>
            <version>0.1.0</version>    
        </Hhennes_Customer>
    </modules>
 
    <!-- Configuration globale -->
    <global>
        <helpers>
            <hhennes_customer>
                <class>Hhennes_Customer_Helper</class>    
            </hhennes_customer>
        </helpers>
       <!-- Configuration de l'installation -->
        <resources>
            <hhennescustomer_setup>
                <setup>
                    <module>Hhennes_Customer</module>
                    <class>Mage_Customer_Model_Entity_Setup</class>
                </setup>
                <connection>
                    <use>core_setup</use>
                </connection>
            </hhennescustomer_setup>
        </resources>
        <!-- Nouveau champ de création de compte dans le checkout -->
        <fieldsets>
            <customer_account>
                <website_know>
                    <create>1</create>
                    <update>1</update>
                    <to_quote>*</to_quote>
                </website_know>
            </customer_account>
            <checkout_onepage_quote>
                <website_know>
                    <to_customer>*</to_customer>>
                </website_know>
            </checkout_onepage_quote>
        </fieldsets>
    </global>
    <frontend>
        <layout>
            <updates>
                <hhennes_customer>
                    <file>hhennes_customer.xml</file>
                </hhennes_customer>
            </updates>
        </layout>
    </frontend>
</config>

Nous reviendrons plus tard sur la signification de l’ensemble des noeuds.…

Pas de commentaires

Magento : Application du patch SUPEE-6788

Le dernier patch de sécurité releasé par Magento le 27 octobre dernier à apporté de nombreuses corrections.
Mais il entraine également des effets de bords relativement nombreux sur les modules tiers.

J’ai trouvé sur github un outil très pratique qui m’a permis de réaliser l’application de ce patch plus facilement :

Magento® SUPEE-6788 Developer Toolbox :  https://github.com/rhoerr/supee-6788-toolbox

Les scripts doivent être exécutés dans le dossier shell/
Pour commencer il faut analyser les problèmes rencontrés via la commande :

php -f fixSUPEE6788.php -- analyze

Les résultats de l’analyse sont disponibles dans le fichier var/log/fixSUPEE6788.log

Plusieurs types de problèmes sont relevés :

  • Ancienne configuration du router adminhtml des modules
  • Déplacement des controllers admin pour éviter les confit ( avec changement du nom des classes )
  • Blocks qui ne sont pas dans la withelist.
  • Variables qui ne sont pas dans la withelist
  • Modules / fichiers / impactés ou qui posent problèmes.

Si vous souhaitez appliquer directement les correctifs listé dans le fichier de log, vous pouvez lancer la commande suivante :

php -f fixSUPEE6788.php -- fix

Personnellement je ne l’ai pas fait, car cela impactait des modules Tiers dont j’attends la mise à jour officielle.…

Pas de commentaires

Magento : Gestion des attributs EAV du catalogue via un module

Le grand avantage de Magento par rapport aux solutions concurrentes réside dans l’utilisation du modèle EAV, qui apporte une grande souplesse dans la gestion de votre boutique.
Ce qui vous permets de rajouter à la volée des paramètres à vos produits ( entre autre )

Pour cet article je souhaite réaliser les éléments suivants :

  • Création d’un nouveau jeu d’attribut “Vélo”
  • Création d’un groupe d’attributs “vélo”
  • Création de nouveaux attributs ” wheel_size”,”supension”
  • Afficher ces attributs dans l’administration, et dans le front office

Le tout bien évidement sans toucher à l’administration 🙂
C’est donc parti pour la création d’un module qui va gérer tout ça , il va s’appeller Specific_Catalog et qui sera en version 0.1.0

Je ne détaille pas les éléments standards de la création du module, mais uniquement les éléments spécifiques à la problématique.

Pour commencer dans le fichier config.xml de notre module il faut créer insérer le code suivant ( dans la balise global )
Celui-ci va nous permettre de définir les ressources d’installation de notre module.…

Pas de commentaires

Magento : Widget lien ajout au panier

Voici comment créer un widget pratique qui vous permettra d’afficher un lien d’ajout de produit au panier, il pourra s’afficher :
– sous forme de texte
– sous forme de bouton

Nous allons pour cela créer un nouveau module, dans mon exemple je vais l’appeler Hhennes_Test.
( Je ne détaille pas la création totale du module mais uniquement les points spécifiques à la problématique )

Pour commencer il est nécessaire de créer un fichier widget.xml dans le dossier etc/ du module.
Dans celui-ci, il est possible de déclarer tous les widgets de votre module ainsi que tous leurs paramètres.

Dans mon cas je souhaite les possibilités suivantes :

  • Choisir le produit concerné par le lien d’ajout au panier
  • Choisir le mode d’affichage ( texte ou bouton )
  • Saisir un texte pour le lien
<?xml version="1.0" encoding="UTF-8"?>
<widgets>
    <!-- Déclaration de mon widget "Lien d'ajout au panier"  et du block qui lui est associé -->
    <hhennes_test type="hhennes_test/widget_addtocart" translate="name description" module="hhennes_test">
        <name>Hhennes Add To Cart Link</name>
        <description type="desc">Add link to add product in cart</description>
        <!-- Paramètres de configuration du widget -->
        <parameters>
            <!-- Choix du produit : Basé sur la fonctionnalité déjà existante pour le widget product-link -->
            <product_id translate="label">
                <visible>1</visible>
                <required>1</required>
                <label>Product</label>
                <type>label</type>
                <!-- On réutilise la fonctionnalité du widget product link -->
                <helper_block>
                    <type>adminhtml/catalog_product_widget_chooser</type>
                    <data>
                        <button translate="open">
                            <open>Select Product...
Pas de commentaires


Compte Github