Posts Tagged ‘magento’

Magento : Liste des ressources utilisables dans system.xml

Un petit article rapide d’aide mémoire pour la gestion des fichiers system.xml dans magento 1 .
Ces fichiers peuvent utiliser souvent les éléments suivants :

 Source Model

Il doivent être utilisés pour des champs de types “select” ou “multiselect”

Ex :

<demo_field_source translate="label">
    <label>Demo Field source model</label>
    <frontend_type>select</frontend_type>
    <!-- Définition de la source -->
    <source_model>adminhtml/system_config_source_yesno</source_model>
    <!-- Fin Définition de la source -->
    <sort_order>1</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>1</show_in_store>
</demo_field_source>

Les plus utiles à retenir sont les suivants :

  • adminhtml/system_config_source_yesno ( Oui / Non )
  • adminhtml/system_config_source_country (Liste des pays )
  • adminhtml/system_config_source_cms_page ( Liste des pages cms )
  • adminhtml/system_config_source_email_template ( Listes des emails transactionnels )

Liste complète :

adminhtml/system_config_source_yesno
adminhtml/system_config_source_admin_page
adminhtml/system_config_source_catalog_gridPerPage
adminhtml/system_config_source_catalog_listMode
adminhtml/system_config_source_catalog_listPerPage
adminhtml/system_config_source_catalog_listSort
adminhtml/system_config_source_catalog_search_type
adminhtml/system_config_source_catalog_timeFormat
adminhtml/system_config_source_checktype
adminhtml/system_config_source_cms_page
adminhtml/system_config_source_cms_wysiwyg_enabled
adminhtml/system_config_source_country
adminhtml/system_config_source_cron_frequency
adminhtml/system_config_source_currency
adminhtml/system_config_source_currency_service
adminhtml/system_config_source_customer_address_type
adminhtml/system_config_source_customer_forgotpassword
adminhtml/system_config_source_customer_group
adminhtml/system_config_source_design_robots
adminhtml/system_config_source_email_identity
adminhtml/system_config_source_email_method
adminhtml/system_config_source_email_smtpauth
adminhtml/system_config_source_email_template
adminhtml/system_config_source_enabledisable
adminhtml/system_config_source_frequency
adminhtml/system_config_source_locale
adminhtml/system_config_source_locale_currency_all
adminhtml/system_config_source_locale_timezone
adminhtml/system_config_source_locale_weekdaycodes
adminhtml/system_config_source_locale_weekdaycodes
adminhtml/system_config_source_locale_weekdays
adminhtml/system_config_source_nooptreq
adminhtml/system_config_source_notification_frequency
adminhtml/system_config_source_order_status_new
adminhtml/system_config_source_order_status_newprocessing
adminhtml/system_config_source_order_status_processing
adminhtml/system_config_source_payment_allspecificcountries
adminhtml/system_config_source_payment_cctype
adminhtml/system_config_source_price_scope
adminhtml/system_config_source_price_step
adminhtml/system_config_source_product_thumbnail
adminhtml/system_config_source_reports_scope
adminhtml/system_config_source_security_domainpolicy
adminhtml/system_config_source_shipping_allspecificcountries
adminhtml/system_config_source_shipping_flatrate
adminhtml/system_config_source_shipping_tablerate
adminhtml/system_config_source_shipping_taxclass
adminhtml/system_config_source_storage_media_database
adminhtml/system_config_source_storage_media_storage
adminhtml/system_config_source_store
adminhtml/system_config_source_tax_apply_on
adminhtml/system_config_source_tax_basedon
adminhtml/system_config_source_watermark_position
adminhtml/system_config_source_web_redirect
adminhtml/system_config_source_yesno
adminhtml/system_config_source_yesnocustom
backup/config_source_type
captcha/config_font
captcha/config_form_backend
captcha/config_form_frontend
captcha/config_mode
catalog/product_attribute_source_msrp_type
cataloginventory/source_backorders
checkout/config_source_cart_summary
configurableswatches/system_config_source_catalog_product_configattribute
configurableswatches/system_config_source_catalog_product_configattribute_select
customer/config_share
downloadable/system_config_source_contentdisposition
downloadable/system_config_source_orderitemstatus
googleanalytics/system_config_source_type
googlebase/source_accounttype
googlebase/source_country
log/adminhtml_system_config_source_loglevel
pagecache/system_config_source_controls
paygate/authorizenet_source_cctype
paygate/authorizenet_source_cctype
paygate/authorizenet_source_paymentAction
payment/source_invoice
paypal/config::getApiAuthenticationMethods
paypal/config::getExpressCheckoutBASignupOptions
paypal/config::getExpressCheckoutButtonFlavors
paypal/config::getExpressCheckoutSolutionTypes
paypal/config::getPayflowproCcTypesAsOptionArray
paypal/config::getWppCcTypesAsOptionArray
paypal/config::getWppPeCcTypesAsOptionArray
paypal/system_config_source_bmlPosition::getBmlPositionsCCP
paypal/system_config_source_bmlPosition::getBmlPositionsCheckout
paypal/system_config_source_bmlPosition::getBmlPositionsCPP
paypal/system_config_source_bmlPosition::getBmlPositionsHP
paypal/system_config_source_bmlSize::getBmlSizeCCPC
paypal/system_config_source_bmlSize::getBmlSizeCCPS
paypal/system_config_source_bmlSize::getBmlSizeCheckoutC
paypal/system_config_source_bmlSize::getBmlSizeCheckoutN
paypal/system_config_source_bmlSize::getBmlSizeCPPC
paypal/system_config_source_bmlSize::getBmlSizeCPPN
paypal/system_config_source_bmlSize::getBmlSizeHPH
paypal/system_config_source_bmlSize::getBmlSizeHPS
paypal/system_config_source_buyerCountry
paypal/system_config_source_fetchingSchedule
paypal/system_config_source_logo
paypal/system_config_source_merchantCountry
paypal/system_config_source_paymentActions
paypal/system_config_source_paymentActions_express
paypal/system_config_source_requireBillingAddress
paypal/system_config_source_urlMethod
paypal/system_config_source_yesnoShortcut
salesrule/system_config_source_coupon_format
shipping/source_handlingAction
shipping/source_handlingType
tax/system_config_source_algorithm
tax/system_config_source_apply
tax/system_config_source_priceType
tax/system_config_source_tax_country
tax/system_config_source_tax_display_type
tax/system_config_source_tax_region
usa/shipping_carrier_abstract_source_mode
usa/shipping_carrier_abstract_source_requesttype
usa/shipping_carrier_dhl_international_source_contenttype
usa/shipping_carrier_dhl_international_source_method_doc
usa/shipping_carrier_dhl_international_source_method_freedoc
usa/shipping_carrier_dhl_international_source_method_freenondoc
usa/shipping_carrier_dhl_international_source_method_nondoc
usa/shipping_carrier_dhl_international_source_method_size
usa/shipping_carrier_dhl_international_source_method_unitofmeasure
usa/shipping_carrier_dhl_source_dutypaymenttype
usa/shipping_carrier_dhl_source_freemethod
usa/shipping_carrier_dhl_source_method
usa/shipping_carrier_dhl_source_protection_rounding
usa/shipping_carrier_dhl_source_protection_value
usa/shipping_carrier_dhl_source_shipmenttype
usa/shipping_carrier_fedex_source_dropoff
usa/shipping_carrier_fedex_source_freemethod
usa/shipping_carrier_fedex_source_method
usa/shipping_carrier_fedex_source_packaging
usa/shipping_carrier_fedex_source_unitofmeasure
usa/shipping_carrier_ups_source_container
usa/shipping_carrier_ups_source_destType
usa/shipping_carrier_ups_source_freemethod
usa/shipping_carrier_ups_source_method
usa/shipping_carrier_ups_source_originShipment
usa/shipping_carrier_ups_source_pickup
usa/shipping_carrier_ups_source_type
usa/shipping_carrier_ups_source_unitofmeasure
usa/shipping_carrier_usps_source_container
usa/shipping_carrier_usps_source_freemethod
usa/shipping_carrier_usps_source_machinable
usa/shipping_carrier_usps_source_method
usa/shipping_carrier_usps_source_size
weee/config_source_display
weee/config_source_fpt_tax
wishlist/config_source_summary

 

 Frontend Model :

Le frontend model est un block de template magento  et  qui permets de gérer un affichage particulier pour l’élément de configuration.…

Pas de commentaires

Magento : Créer une commande via l’api

J’ai récemment eut à créer des commandes Magento via l’api et j’ai rencontré pas mal de difficultés, j’en profite pour condenser l’ensemble du processus dans cet article 🙂

Voici un script qui permettra de créer une commande Magento à partir de l’api Soap de Magento ( à la fois avec la version api V1 et api V2 )
Cet exemple a été réalisé sur un Magento 1.9.3.x de démonstration utilisant les samples data Magento.

N’hésitez pas à consulter la documentation officielle des api, si des points ne sont pas assez clairs  : https://devdocs.magento.com/guides/m1x/api/soap/introduction.html

Le script part des postulats suivants :

  • Passage de commande pour un client existant
  • Avec une adresse de facturation par défaut de renseignée
  • Les adresses de livraison et de facturation seront similaires.
  • Un accès à l’api avec tous les accès nécessaires existe sur le site magento de destination.

Les actions effectuées par le script sont les suivantes :

  1. Login à l’api
  2. Récupération de l’identifiant du  client à partir de son email
  3. Récupération de l’identifiant de l’adresse de facturation/livraison du client
  4. Création d’un panier
  5. Assignation du client au panier
  6. Assignation des adresses du client au panier
  7. Ajout de produits au panier
    1. Produit simple
    2. Produit configurable
    3. Produit groupé
    4. Produit Bundle
  8. Récupération des modes de livraison disponibles pour le panier
  9. Assignation du mode de livraison du panier
  10. Récupération des modes de paiement disponibles pour le panier
  11. Assignation du mode de paiement du panier
  12. Transformation panier en commande

 

Voir le script complet pour l’api V1
Voir le script complet pour l’api V2

Avant de vous montrer le script complet voici un focus sur les éléments à comprendre

Ajout des produits au panier

En fonction du type de produit à ajouter au panier , les informations à envoyer ne seront pas les mêmes.…

Pas de commentaires

Magento 2 : Commande console pour supprimer les fichiers de logs et les reports

Lors de la phase de développement sous magento 2, les dossiers contenants les fichiers de logs et de reports ont tendance à augmenter rapidement et il devient difficile de s’y retrouver.
Il est possible de supprimer facilement le contenu des ces dossiers via l’explorateur de fichier ou via des commandes shell, mais cela peut être rébarbatif ou source d’erreurs ( rm -rf sur un mauvais dossier entre autre … )

Pour simplifier ces actions nous allons donc créer 2 nouvelles commandes dans la console Magento.
Ceci nous permets de constater qu’ajouter des commandes consoles sur magento 2 c’est très simple 🙂

Le module s’appellera Hhennes_Tools et sera situé dans app/code/Hhennes/Tools/

Pour initialiser le module créer le fichier etc/module.xml avec le contenu suivant

<?xml version="1.0" encoding="UTF-8"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
    <module name="Hhennes_Tools" setup_version="0.1.0">
    </module>
</config>

Et le fichier de registration registration.php avec le contenu suivant :

<?php
\Magento\Framework\Component\ComponentRegistrar::register(
    \Magento\Framework\Component\ComponentRegistrar::MODULE,
    'Hhennes_Tools',
    __DIR__
);

Dans le fichier Hhennes/Tools/etc/di.xml ajoutez le contenu suivant :

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Framework\Console\CommandList">
        <arguments>
            <argument name="commands" xsi:type="array">
                <item name="hhennes_tools_cleanreports" xsi:type="object">Hhennes\Tools\Console\Command\CleanReportsCommand</item>
                <item name="hhennes_tools_cleanlogs" xsi:type="object">Hhennes\Tools\Console\Command\CleanLogsCommand</item>
            </argument>
        </arguments>
    </type>
</config>

La logique d’ajout des commandes est situé dans ce fichier, nous ajoutons nos commandes à la liste des commandes disponible lors de l’initialisation de la classe Magento\Framework\Console\CommandList

Il ne reste plus qu’a créer les fichiers php des commandes :
Hhennes/Tools/Console/Command/CleanLogsCommand.php

<?php
 
namespace Hhennes\Tools\Console\Command;
 
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Magento\Framework\App\Filesystem\DirectoryList;
 
class CleanLogsCommand extends Command
{
 
    /** @var DirectoryList  */
    protected $_directoryList;
 
    /**
     * CleanLogsCommand constructor.
Pas de commentaires

Magento : Configurer plusieurs boutiques sur une seule instance

Nativement la plateforme Magento permets de créer plusieurs sites webs totalement différents tout en utilisant le même code et le même dossier sur votre serveur et cela avec des urls différentes !

Il est cependant ensuite nécessaire de réaliser un mapping pour que Magento trouve quelle boutique charger avec quelle url

En partant des pré-requis suivants :

  • votre configuration apache ou nginx est déjà en place et que l’ensemble des noms de domaines pointent bien vers le même dossier
  • Nous allons tester 3 sites
    • www.shop.fr ( Site FR / Code du magasin magento : fr )
    • www.shop.de ( Site DE / Code du magasin magento : de )
    • www.shop.com ( Site EN / Code du magasin magento : en )
  • Les configurations des magasins sont en place dans magento

Nous allons voir ensemble les différentes possibilités qui existent pour réaliser cela.

Serveur Apache : fichier .htacess
Editer le fichier .htacess situé à la racine de magento et rajouter les lignes suivantes

SetEnv MAGE_RUN_TYPE store
SetEnvIf Host www\.shop\.fr MAGE_RUN_CODE=fr
SetEnvIf Host www\.shop\.de MAGE_RUN_CODE=de
SetEnvIf Host www\.shop\.com MAGE_RUN_CODE=en

Serveur nginx : fichier conf
Dans le fichier de configuration de votre vhost avant le noeud “server” rajouter la map suivante :

map $http_host $magecode {
       www.shop.fr fr;
       www.shop.de de;
       www.shop.com en;
    }

Puis dans la configuration des fichiers php , rajouter les éléments suivants :

location ~ \.php$ { ## Execute PHP scripts
        ...
Pas de commentaires

Magento : Gérer les balises meta Robots

Pour optimiser le référencement de votre site Magento, il sera sans doute nécessaire de jouer avec les balises meta robots.

Ceci vous permettra de choisir les pages qui devront être indexées et/ou suivies, ainsi que celles qui ne le seront pas.
La bonne nouvelle est que ceci est géré nativement dans magento, et que cela ne demande aucun développement.

Configuration générale

Dans la configuration de magento, il est possible de définir directement les balises qui seront appliquées à l’ensemble des pages.
Pour cela rendez-vous dans ” Système / Configuration / Design / Entête HTML ”
Vous pouvez ensuite configurer les meta robots à mettre en place par défaut :

Balise meta robots

( Il est possible de le configurer pour chaque boutique de votre site )

Le fonctionnement est le même pour un produit ou une catégorie : (cf. mon article précédent :
Magento : Empêcher l’indexation d’une catégorie ou d’un produit )

Changer la balise meta d’une page CMS

Si vous souhaitez passer une page cms en No-Index, c’est très facile, il vous suffit de copier le code suivant dans le champ “XML de mise à jour d’agencement” de l’onglet design, et puis d’enregistrer votre page.…

2 commentaires

Tester la sécurité de votre site magento avec MageReport

Les sites e-commerces basés sur des plateformes open-sources seront inévitablement soumis tôt ou tard à l’apparition de failles de sécurité. C’est pourquoi il est important de bien tenir son site à jour et d’appliquer dès que possible les patchs de sécurité.

Pour évaluer les risques de votre site e-commerce magento, il existe un outil très utile qui va analyser les failles potentielles de votre site.

Pour cela rendez-vous sur le site https://www.magereport.com/

Magereport

Celui-ci va détecter l’ensemble des failles les plus connues et vous donner les solutions pour les corriger.
Un site à bookmarker et à consulter régulièrement pour tous les possesseurs de boutiques magento ! 🙂…

Pas de commentaires

Magento : Personnaliser le template utilisé par la fonction getPriceHtml

Dans magento la gestion de l’affichage des prix est gérée via la fonction getPriceHtml.
Celle-ci est en général appelée de la manière suivante

<?php echo $this->getPriceHtml($_product, true) ?>

Elle est utilisée entre autre dans les templates suivants :

  • catalog/product/list.phtml
  • catalog/product/compare/list.phtml
  • checkout/cart/crossell.phtml

Cette fonction peut être appelée par tous les blocks qui héritent de la classe Mage_Catalog_Block_Product_Abstract

Par défaut cette fonction utilise le bloc “catalog/product/price.phtml”

Si vous souhaitez changer le template utilisé voici comment procéder.
Il faut utiliser la fonction suivante AVANT l’appel de la fonction getPriceHtml :

/**
 * Adding customized price template for product type
 *
 * @param string $type
 * @param string $block
 * @param string $template
 */
$this->addPriceBlockType($type, $block = '', $template = '');
 
//Exemple d'utilisation
$this->addPriceBlockType('configurable', '', 'catalog/product/price-custom.phtml'); //Produit configurable
$this->addPriceBlockType('simple', '', 'catalog/product/price-custom.phtml'); //Produit simple
$this->addPriceBlockType('bundle', '', 'catalog/product/price-custom.phtml'); //Produit bundle
Pas de commentaires

Optimisation des performances Magento : configuration des sessions et du cache

Afin d’optimiser les performances de notre site magento, nous allons mettre en place les optimisations suivantes :

  • stockage des sessions dans memcache
  • stockage du cache dans redis

Cette solution  est modulable et applicable à une configuration multi-serveurs.( En centralisant les sessions sur un serveur spécifique, dans ce cas il suffit de replacer l’ip 127.0.0.1, par l’ip du serveur )

Pour commencer il faut installer les services memcached et redis sur votre serveur si ce n’est pas déjà fait

sudo apt-get install redis-server
sudo apt-get install memcached

installer également les librairies memcache pour php

sudo apt-get install php5-memcached php5-memcache

vous pouvez ensuite configurer le fichier local.xml avec les informations suivantes :

Pour la gestion des sessions dans memcache :

<!-- Stockage des sessions dans memcache -->
<session_save><![CDATA[memcache]]></session_save>
<session_save_path><![CDATA[tcp://127.0.0.1:11211?persistent=1&weight=2&timeout=10&retry_interval=10]]></session_save_path>

Les avantages du stockage dans memcache des sessions sont les suivants :

  • accès très rapide aux informations car stockées dans la mémoire vive
  • partage des sessions facile entre plusieurs serveurs

Puis pour la gestion du cache dans Redis :

<!-- Stockage du cache dans redis -->
<cache>
<backend>Mage_Cache_Backend_Redis</backend>
<backend_options>
<server>127.0.0.1</server>              <!-- or absolute path to unix socket or ip -->
<port>6379</port>
<persistent></persistent>               <!-- Specify a unique string like "cache-db0" to enable persistent connections.
Pas de commentaires

Magento : Mauvais calcul des frais de ports dans le checkout

Note : Cet article s’applique uniquement aux versions de Magento inférieures à la 1.6

Sur une version 1.5 de Magento j’ai été confronté au comportement d’erreur suivant :

Pour un panier comportant un bon de réduction.
Les frais de ports devant être offerts à partir de X euros.

  • les frais de ports n’étaient pas calculés correctement dans le checkout lors de l’affichage des méthodes de livraisons
  • Les frais de ports étaient calculés correctement dans l’estimation des frais de port du panier
  • Les frais de ports étaient correct dans le résumé de la commande.
  • Si l’adresse de livraison étaient différente de l’adresse de livraison , le calcul était correct.

Après analyse du code, il s’avère que les frais de ports ne sont pas recalculés si on conserve la même adresse de livraison.
Voici comment corriger cela.

Il faut surcharger la fonction saveBilling du fichier app/code/core/Mage/Checkout/Model/Type/Onepage.php.
Pour cela, nous pouvons au choix faire un override du modèle (meilleure solution ) ou déplacer ce fichier dans le codePool local.…

Pas de commentaires

Magento : Créer un format d’adresse particulier

L’affichage des adresses dans magento est via gérée des formats configurables.
Les formats par défaut sont visibles depuis la configuration dans “système/configuration/clients/configuration/adresses/”

Formats d'adresses

 

Cependant il est également possible de créer facilement vos propres formats d’adresses.
Pour cela il suffit de suivre les éléments suivants lors de la création de votre module.

Pour notre exemple je souhaite rajouter un format d’adresse “short”.
Dans le fichier de configuration (config.xml )de votre module rajouter le code suivant entre les balises <global> et </global>

 <!-- Nouveau format d'adresse pour le checkout -->
        <customer>
            <address>
                <formats>
                    <short> <!--Nom du format -->
                        <title>Short</title> <!-- Titre de du format -->
                    </short>
                </formats>
            </address>
        </customer>

 

Puis dans le noeud default

    <customer>
        <address_templates>
          <!-- nom du format et format à appliquer --> 
            <short>{{depend prefix}}{{var prefix}} {{/depend}}{{var firstname}} {{depend middlename}}{{var middlename}} {{/depend}}{{var lastname}}{{depend suffix}} {{var suffix}}{{/depend}},{{var street}}, {{var city}},{{var postcode}}, {{var country}}</short>
        </address_templates>
    </customer>
</default>

Et c’est tout, si votre module est bien reconnu par magento, vous pouvez à présent formater vos adresses avec votre nouveau format.…

Pas de commentaires


Compte Github