Magento

Tout sur la solution e-commerce Magento

Baobaz à Meet Magento Pologne

Pour la première fois, la communauté Magento en Pologne a l'occasion de se réunir et de partager leurs expériences avec la solution e-commerce dont l'évolution est la plus dynamique au monde lors de la conférence Meet Magento Pologne, qui se tiendra à Varsovie les 23-24 Novembre (programme).

Meet Magento Polska

Baobaz a rejoint ce projet en tant que l'un des partenaires, nous seront aussi présents parmi les orateurs. Les auteurs de la présentation au titre tompeur "Mais chez moi ça marche ... - à propos des dépots de code source et du déploiement automatique de projets Magento», Maciej Krasuski et Kamil Węgrzynowicz, sont tous les deux titulaires d'un certificat "Magento Certified Developer Plus".

Tout le monde est invité à assister à cet évenement et à nous y rencontrer!

Baobaz "Innovator of the Year - Europe"

Baobaz s'est vu remettre la récompense de « Innovator of the year – Europe » à Imagine eCommerce, conférence mondiale sur l’eCommerce organisée par Magento à Los Angeles, en Février dernier.

Yoav Kutner et Roy Rubin récompense Baobaz en remettant le prix à Bertrand Fredenucci
Yoav Kutner (CTO Magento) et Roy Rubin (CEO Magento)  félicitent Baobaz
en remettant à Bertrand Fredenucci (PDG Baobaz) l'award de "Innovator of the Year - Europe"

Pour récompenser ses meilleurs partenaires sur l’année 2010, MAGENTO a délivré 5 prix lors de son « Solution Partner Summit » en clôture d’IMAGINE ecommerce, dont celui d’ « Innovator of the Year - Europe » (prix de l’Innovation) à BAOBAZ pour son exceptionnel travail en matière d’innovation comme ses modules exclusifs au service du eCommerce pour les marques et du milieu de la mode en général :

  • MyDressing (dressing virtuel)
  • Shop-by-look
  • Fashion Merchandising

Un prix qui confirme que Baobaz est devenu un acteur incontournable du e-commerce pour les marques et enseignes de prêt-à-porter.

L'année 2011 s'annonce pleine de promesses ! 

Les nouvelles fonctionnalités de Magento 1.5

Après la sortie de la version 1.9 de Magento Enterprise, c'est au tour de Magento Community de voir une nouvelle version, avec la version 1.5 alpha.

Cette version 1.5 présente 3 nouvelles fonctionnalités qui peuvent s'avérer bien utiles lors de la mise en place de votre site Magento :

  1. Un module d'import/export de clients

    Vous pouvez désormais exporter vos clients et les produits de votre catalogue depuis le back-office, avec une gestion de filtre relativement évoluée. Notez que la gestion par profil est toujours bien présente.
    Magento 1.5 product export
    Magento 1.5 customer export

  2. La gestion des états et statuts de commande directement dans le back-office

    Il n'est désormais plus nécessaire d'avoir à modifier des fichiers XML pour gérer les états et statuts de vos commandes, cela est possible directement dans le back-office.
    Magento 1.5 order status
    Magento 1.5 order status edit

  3. La modification d'adresses de commande a posteriori

    Voici une fonction qui ravira les services après-vente : il est désormais possible de modifier l'adresse d'une commande sans avoir à en recréer une nouvelle.
    Attention toutefois : si le changement d'adresse aurait eu un impact sur les frais de port, ceux-ci ne seront pas recalculés.
    Magento 1.5 order edit
    Magento 1.5 order address edit

Plus d'info sur Magento 1.5 sur le site de Magento

Extension Magento : Baobaz Automatic Orders Cancel

Baobaz - Automatic Orders CancelNous sommes fiers de vous annoncer la publication de Baobaz Automatic Orders Cancel sur Magento Connect. Il s'agit de la première extension Baobaz publiée sur Magento Connect.

Le but de cette extension est d'annuler automatiquement les vieilles commandes non payées. Il est possible de paramétrer dans le back office les statuts d'annulation ainsi que le délai avant l'annulation d'une commande.

Pour plus de détails rendez vous sur la page de l'extension : http://www.magentocommerce.com/extension/3156

Https + cache Magento + Internet Explorer = Pas d'images

Magento propose nativement un système de cache avancé afin d'afficher le contenu des templates plus rapidement. La configuration par défaut de ce cache peut cependant poser problème dans certaines situations.

Récemment, nous avons eu le problème de certaines images qui ne s'affichait pas dans le menu du haut lorsque nous passions d'une page http à une page https et ce uniquement sur Internet Explorer. Les images dans ce menu restait en effet avec une url non sécurisé (http). Celà ne plait pas trop à Internet Explorer qui par défaut n'affiche pas le contenu non sécurisé sur une page sécurisé. On a en effet le message suivant lorsque certaines images ont une adresse http alors que la page est en https:

Internet Explorer Security Warning

Le block affichant le menu avec les catégories était mis en cache et son cache n'était pas regénéré si l'on passait d'une page http à une page https. Ce qui explique pourquoi les images restaient avec une adresse http sur un page https.

Pour corriger cela, il faut réécrire la méthode getCacheKey de la classe Mage_Catalog_Block_Navigation. Il faut en effet inclure dans la clé du cache un paramètre indiquant si l'url est en https ou en http. Le cache sera alors différent pour ces 2 types de pages. Ce paramètre est ajouté avec la méthode getSkinUrl

Le code par défaut de getCacheKey

public function getCacheKey()
{
    return 'CATALOG_NAVIGATION_' . Mage::app()->getStore()->getId()
        . '_' . Mage::getDesign()->getPackageName()
        . '_' . Mage::getDesign()->getTheme('template')
        . '_' . Mage::getSingleton('customer/session')->getCustomerGroupId()
        . '_' . md5($this->getTemplate() . $this->getCurrenCategoryKey());
}

est donc remplacé par le code suivant

public function getCacheKey()
{
    return 'CATALOG_NAVIGATION_' . Mage::app()->getStore()->getId()
        . '_' . Mage::getDesign()->getPackageName()
        . '_' . Mage::getDesign()->getTheme('template')
        . '_' . Mage::getSingleton('customer/session')->getCustomerGroupId()
        . '_' . md5($this->getTemplate() . $this->getCurrenCategoryKey())
        . '_' . md5($this->getSkinUrl()); /*** FIX IN THIS LINE ***/
}

Et voilà, vous pouvez désormais utiliser sereinement https sur Internet Explorer

Pour plus d'infos concernant la gestion des caches sous Magento vous pouvez consulter cet article.

Gérer des règles de ventes croisées automatiques avec Magento Enterprise Edition 1.7

La gestion des ventes croisées sous Magento Community Edition peut s'avérer complexe à gérer si vous disposez d'un catalogue qui contient un grand nombre de références.

Gérer les ventes croisées avec Magento Community Edition

En effet, Magento, dans sa version Community Edition, vous oblige à gérer les liens entre produits (ventes croisées mais aussi vente incitative et produits apparentés) manuellement, produit par produit. L'automatisation de règle nécessitait donc un développement spécifique ou l'import de liens de ventes croisées depuis un système tiers.

Gérer des règles de ventes croisées automatique avec Magento Enterprise Edition 1.7

Aujourd'hui, Magento Enterprise Edition 1.7 vous permet de créer des règles de relations dynamiques entre les produits de votre catalogue.

Gérer des règles de ventes croisées automatique avec Magento Enterprise Edition 1.7

Il est possible de créer plusieurs règles, un ordre de priorité permettant d'appliquer une règle plutôt qu'une autre en cas de conflits.

Les règles peuvent s'appliquer de manière permanente ou sur une période donnée.

Ces règles peuvent s'appliquer pour les trois relations standard : vente croisée, vente incitative et produits apparentés.

Gérer des règles de ventes croisées automatique avec Magento Enterprise Edition 1.7

On définit ensuite si la règle s'appliquera à tout ou partie du catalogue. Il s'agit là du moteur de règle classique dans Magento, il permet de filtrer sur n'importe quels attributs ou combinaisons de valeurs d'attributs du catalogue.

Gérer des règles de ventes croisées automatique avec Magento Enterprise Edition 1.7

On précise enfin les produits qui seront affichés. Le moteur de règle est ici quelque peu différent dans la mesure où il permet, sur la fiche d'un produit A, de n'afficher que les produits X pour lesquels une valeur d'attribut est semblable à la valeur d'attribut du produit A.

Il suffit alors d'enregistrer la règle pour que celle-ci soit appliquée et que les produits liés soient affichés dans les blocs correspondants (blocs de ventes croisées, de vente incitative ou de produits apparentés) sur la fiche produit, sur la page panier, etc.

Bargento 4 annoncé

Bargento

Bargento 4 a été annoncé. L'évènement se déroulera le lundi 22 mars 2010 lundi 24 mai 2010 vendredi 28 mai 2010 (le 24 était un jour férié) à Paris.

Le programme et le lieu du Bargento seront dévoilés prochainement.

L'annonce officielle sur le site bargento.fr

Bargento 4 se déroulera finalement le 24/05/2010

Les options du backoffice (Admin panel) de Magento - 2ème partie

Maintenant que vous êtes un peu plus familier avec les options du backoffice de Magento (voir Les options du backoffice (Admin panel) de Magento - 1ère partie), soyons un peu plus créatif. Vous souvenez-vous que dans la première partie nous avons dit qu’il est possible d’ajouter vos propres rubriques ? Cela s’avère très utile si vous voulez contrôler votre module (bien sur cette nouvelle entrée ne permettra pas d’administrer un nouveau module mais de gérer une fonctionnalité déjà existante.). Regardons donc comment faire :

Tout d’abord, il faut créer un nouveau module. Sinon, vous pouvez télécharger le code source du module que j’ai créé pour cet article et auquel je vais me référer. Il permet d’afficher la date. C’est vous qui paramétrez le format. Il doit être un argument valide de la fonction date() de PHP.

L’ajout d’un menu se fait sur le fichier config.xml. Vous aurez besoin des lignes suivantes :

<adminhtml>
    <menu>
        <example translate="title" module="adminhtml">
            <title>Set Time Format</title>
            <sort_order>60</sort_order>
            <children>
                <set_time>
                    <title>Set It!</title>
                    <action>example/index</action>
                </set_time>
            </children>
        </example>
    </menu>
</adminhtml>

Ce code ajoutera la rubrique « Set Time Format » et la sous rubrique « Set It! » Et il se réfère au module identifié dans example controller index, action index. C’est en gros ce dont vous aurez besoin pour ajouter votre nouvelle rubrique dans le menu. Regardez le résultat dans le backoffice – La nouvelle rubrique devrait apparaître entre Catalogue et Clients. Si ce n’est pas le cas, pensez à vider votre cache.

Le reste du module est composé de fichiers définissant le formulaire utilisé pour entrer le format de la date, et le controller responsable de l'affichage du formulaire et de l'enregistrement des données. Vous remarquerez que j’ai stocké les données avec les config values de Magento. Cette solution n’est pas très propre mais je voulais éviter de créer plus que ce qui est essentiel à cette courte démonstration.

Vous pouvez également ajouter votre rubrique dans la page Système->Configuration. C’est une approche un peu différente que nous verrons dans la prochaine partie.

Les options du backoffice (Admin panel) de Magento - 1ère partie

Magento Admin Panel

Si vous êtes encore novice avec Magento, vous pouvez avoir du mal à vous retrouver avec toutes les options disponibles dans le backoffice (également appelé Admin panel).

Après une installation « classique » on obtient :

  • Tableau de bord
  • Ventes
  • Catalogue
  • Clients
  • Promotions
  • Newsletter
  • CMS
  • Rapports
  • Système

Si vous ne voyez pas ces rubriques dans le menu, vérifiez que vous êtes bien connecté en tant qu’administrateur. Il est possible d’ajouter d’autres rubriques par la suite (nous en parlerons dans les prochaines parties). Toutes ces rubriques, excepté le tableau de bord, contiennent des sous-rubriques. Regardons-en quelques-unes de plus prêt.

Le tableau de bord est la page d’accueil du backoffice. On y trouve une vue d’ensemble de la boutique : les dernières commandes ainsi que les montants par tranche de temps, les meilleures ventes, les produits les plus consultés, les nouveaux clients… Il s’agit essentiellement de ce qu’on s’attend à trouver sur sa page d’accueil.

Ventes contient tout ce qui concerne les modules de gestion de commandes, les factures, l’expédition, la TVA… C’est là que l’on gère toutes les commandes faites par le client. On peut les consulter, les annuler, les traiter, et les imprimer. Moins logique, on y trouve aussi les Conditions générales ’utilisation.

Système contient certains éléments importants à retenir.

Dans le sous-menu Outils, on a la possibilité de créer un backup (ce qui peut s’avérer très utile). On y trouve aussi la Gestion du cache. Et enfin, le dernier mais non le moindre : Configuration. Regardons l’onglet Design : c’est là qu’on détermine l’habillage du site, qu’on choisit son template et le thème par défaut. Magento reviendra au thème par défaut s’il ne trouve pas celui qui a été sélectionné. C’est aussi là qu’on ajoute l’image qui sera utilisée comme filigrane d’images de produits pour sa boutique. Et pour finir Configuration qui est la partie que j'utilise le plus.

Regardons maintenant l’onglet Développeur, toujours sous Configuration.

Choisissez votre boutique dans « Portée de la configuration courante » sur la gauche.

On trouve les champs « Astuce chemin des gabarits » et « Ajouter les noms des blocs aux astuces » dans la section Déboguage. Décochez « utiliser le site web » et indiquer « Yes ». Retournez maintenant sur le front office et rafraîchissez votre page. Vérifiez que vous êtes bien sur la même boutique que vous avez sélectionnée dans la portée de configuration dans l’admin panel. Vous obtenez le nom des templates utilisés, avec le nom des blocs correspondants. Les lignes pointillées montrent les bords du template. Croyez-moi, on a plutôt intérêt à se souvenir de cette option.

Traduction par Ahlem Mokrani

Magento Dataflow - parsers standard et valeurs de mapping [partie 4]

Comme promis dans le post Magento Dataflow - les Adapters par défaut [Partie 2], aujourd'hui je vais écrire à propos des parsers standards et des mappers disponibles dans le module Magento DataFlow.

  1. Définition des parsers

    Les parsers servent à transformer les données provenant des adapters. L'interface du parser Mage_Dataflow_Model_Convert_Parser_Interface définie 2 méthodes obligatoires pour chaque parser : parse() et unparse(). Définir un parser dans le XML d'actions du profil est aussi simple que ça :

    <action type="dataflow/convert_parser_serialize" method="parse" />

    Comme pour les adapters, nous définissons un tag d'action avec deux attributs: type qui indique quelle classe nous voulons utiliser et method qui indique la méthode à appeler. Nous pouvons également définir le parser en lui fournissant des variables à l'intérieur de l'action tag comme vous allez le voir dans la suite de ce post.

  2. Les parsers standards

    Magento Dataflow inclus quelques parsers standards que vous pouvez trouver dans le dossier app/code/core/Dataflow/Model/Convert/Parser.

    Le plus simple des parsers standards est le parser dataflow/convert_parser_serialize (Mage_Dataflow_Model_Convert_Parser_Serialize) qui n'a besoin d'aucune variable. Il a néanmoins besoin que l'une des actions précédentes du profil d'actions initialise les données. La méthode parse() délinéarise (avec la fonction unserialize) les données contenues dans le container du profile et les remplace avec le résultat. La méthode unparse() fait le contraire, elle linéarise (avec la fonction serialize) les données contenues dans le container du remplace et les remplace avec le résultat.

    Un des parsers standards le plus utilisé est le parser dataflow/convert_parser qui permet des transformations depuis (avec la méthode parse()) ou vers (avec la méthode unparse()) un fichier CSV. Exemple de définition :

    <action type="dataflow/convert_parser_csv" method="parse">
        <var name="delimiter"><![CDATA[,]]></var>
        <var name="enclose"><![CDATA["]]></var>
        <var name="fieldnames">true</var>
        <var name="store"><![CDATA[0]]></var>
        <var name="decimal_separator"><![CDATA[.]]></var>
        <var name="adapter">catalog/convert_adapter_product</var>
        <var name="method">parse</var>
    </action>

    Ce parser nécessite que vous appeliez au préalable un adapter io (par exemple, l'adapter dataflow/convert_adapter_io afin de lire un fichier csv) afin de pouvoir utiliser la méthod parse(). Si vous désirez enregistrer des données dans un fichier CSV, vous devez faire les deux : appeler une méthode qui va définir les données dans le container du profile avant l'exécution du parser et appeler un adapter io après l'exécution du parser afin d'enregistrer les données dans un fichier.

    Les variables suivantes vont vous permettre de personnaliser le parsing du fichier csv :

    • delimiter - définit le délimiteur utilisé dans le fichier csv ; le caractère virgule (,) est utilisé par défaut
    • enclose - définit le caractère utilisé pour encapsulées les données ; valeur vide par défaut.
    • escape - définit le caractère échappatoire pour le fichier csv ; caratère \\ par défaut
    • decimal_separator - définit le caractère pour séparer les décimales
    • fieldnames - si a la valeur true, il considère que la première ligne du fichier csv contient le nom de champs ; si a la valeur false, la variable map est utilisé
    • map - définit le nom des champs pour les fichier dont la première ligne ne contient pas le nom des champs ; pour voir comment définir une map regarder la section de cet article traitant des valeurs de mapping
    • adapter - indique quel adapter doit être appelé pour chaque ligne
    • method - indique quelle méthode de l'adapter doit être appelée pour chaque ligne ; par défaut saveRow

    Toutes les variables définies dans le parser sont transmises à l'adapter. Donc, si vous avez besoin de lui transmettre quelque chose, vous pouvez tout simplement définir les variables obligatoires dans le parser.

    Le dernier des parsers standards inclus dans le module Dataflow est le parser dataflow/convert_parser_xml_excel (Mage_Dataflow_Model_Convert_Parser_Xml_Excel), qui convertit les données depuis et vers un fichier Excel xml. Exemple de définition :

    <action type="dataflow/convert_parser_xml_excel" method="unparse">
        <var name="single_sheet"><![CDATA[products]]></var>
        <var name="fieldnames">true</var>
    </action>

    Les conditions d'utilisation de ce parser sont les mêmes que pour le parser dataflow/convert_parser_csv.

    Les variables suivantes vont vous permettre de personnaliser le parsing de votre fichier Excel :

    • fieldnames - si a la valeur true, il considère que la première ligne du fichier Excel contient le nom de champs ; si a la valeur false, la variable map est utilisé
    • map - définit le nom des champs pour les fichier dont la première ligne ne contient pas le nom des champs
    • single_sheet - indique si les données analysées proviennent d'une seule feuille ou de toutes ; doit contenir le nom de la feuiller à analyser
    • adapter - indique quel adapter doit être appelé pour chaque ligne
    • method - indique quelle méthode de l'adapter doit être appelée pour chaque ligne ; par défaut saveRow
  3. Les parsers standards pour les clients et les produits

    Pour échanger les entités les plus courantes - les clients et les produits - Magento fournit aussi des parsers standards : customer/convert_parser_customer (Mage_Customer_Model_Convert_Parser_Customer) et catalog/convert_parser_product (Mage_Catalog_Model_Convert_Parser_Product). Tous deux héritent de la classe Mage_Eav_Model_Convert_Adapter_Entity.

    Étant donné que les méthodes load() des adapters retournent uniquement un tableau contenant les identifiants des entités, il est nécessaire d'utiliser les méthodes unparse() des parsers afin d'obtenir plus de données. Les deux parsers prennent ce tableau d'identifiants et pour chaque entité retrouvent les données de ces entités tout en ignorant les champs du système, les objets et les champs qui ne sont pas des attributs. Ils créent finalement un tableau associatif avec les données récoltées. Le parser de produits ajoute également les données provenant de l'objet stock associé au produit. Le parser de clients ajoute quant à lui les données provenant des adresses de livraison et de facturation et les données provenant de l'inscription à la newsletter.

    Les deux parsers d'entités ont des méthodes parse() dépréciées depuis que leur fonctionnement est maintenant principalement réalisée par les actions de parser dans les méthodes des adapters standards appelées dans le contexte du parser. Exemple d'une définition d'un parser de produits, parsant uniquement les produits depuis le magasin sélectionné :

    <action type="catalog/convert_parser_product" method="unparse">
        <var name="store"><![CDATA[1]]></var>
    </action>

  4. Les valeurs de mapping

    Le module Dataflow apporte aussi un concept de mapper - une classe avec une méthode map() responsable de lier (mapper) les champs traités les uns avec les autres. La définition d'un mapper ressemble à ça par exemple :

    <action type="dataflow/convert_mapper_column" method="map">
        <var name="map">
            <map name="category_ids"><![CDATA[categorie]]></map>
            <map name="sku"><![CDATA[reference]]></map>
            <map name="name"><![CDATA[titre]]></map>
            <map name="description"><![CDATA[description]]></map>
            <map name="price"><![CDATA[prix]]></map>
            <map name="special_price"><![CDATA[special_price]]></map>
            <map name="manufacturer"><![CDATA[marque]]></map>
        </var>
        <var name="_only_specified">true</var>
    </action>

    Nous avons encore un tag d'action avec deux attributs : type pour définir la classe du mapper et method pour définir la méthode à appeler pour faire le mapping. Le mapper dataflow/convert_mapper_column est un mapper standard que vous pouvez trouver dans le module Magento Dataflow dans le dossier app/code/core/Dataflow/Model/Mapper/. Son but est de lier un tableau vers un autre en changeant le nom et en limitant les champs dans le résultat. L'attribut name du tag map indique le nom du champ qui doit être remplacé dans le nouveau tableau. Il est remplacé par le nom se trouvant dans le contenu du tag map. Si le nom du champ n'existe pas dans le tableau d'origine, la valeur du champ dans le tableau résultat est alors nulle. La variable _only_specified indique si uniquement les champs spécifiés dans la définition de map doivent être présents dans le tableau résultat.

Cet article devrait être l'article cloturant la présentation des spécifications standards du module Dataflow et les exemples basiques de son utilisation.

Traduction par Laurent Clouet