Archive pour la ‘Magento’ catégorie

Magento : Sécuriser l’accès à l’administration

Les attaques sont de plus en plus nombreuses sur la plateforme magento, pour éviter les accès non autorisés à votre administration voici comment la sécuriser :

  • Changer le chemin par défaut de l’administration.

Dans le fichier app/etc/local.xml , définissez un nom d’administration personnalisé, par exemple mycustomadmin

 <routers>
 <adminhtml>
 <args>
 <frontName><![CDATA[mycustomadmin]]></frontName>
 </args>
 </adminhtml>
 </routers>
  • Restreindre l’accès à l’administration par adresse ip

Avec apache : rajouter la ligne suivante entre les balises

RewriteCond %{REMOTE_ADDR} !^xx.xx.xx.xx
RewriteRule ^(index.php/)?mycustomadmin/ - [L,R=403]

Avec nginx :

location ~ ^/mycustomadmin/ {
    allow xx.xx.xx.xx;
    deny all;
    try_files $uri $uri/ /index.php;
}
location ~ ^/index.php/?mycustomadmin/ {
    allow xx.xx.xx.xx;
    deny all;
    try_files $uri $uri/ /index.php;
}

Une fois ces restrictions en place, l’administration de votre site magento sera plus sécurisée 🙂…

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

Alternative à wampserver : windows bash

La sortie de la mise à jour Anniversary pour windows 10 au début du mois d’aout, apporte une nouveauté majeure pour les développeur webs ( sous windows bien sur ^^), à savoir l’apparition d’un sous-système linux directement intégré dans windows.

Je ne vais pas vous détailler comment l’activer vous pouvez trouver comment faire cela sur google.

La distribution proposée est Ubuntu 14.04.

Pour pouvoir développer en local il est donc nécessaire d’installer le stack lamp (Apache/Mysql,Php) , les instructions sont donc exactement les mêmes que sur un ubuntu classique, je vous renvoie donc
vers mon article sur le sujet : Ubuntu Server 14.04 « Trusty Tahr » : Installation d’apache, php et mysql ( lamp)

L’unique point à retenir est que les partitions windows sont montées dans /mnt/x/votre-dossier ( ou x correspond à la lettre de votre disque dur)
Il faut donc faire pointer vos vhosts apache vers ces dossiers.

A noter également que j’ai voulu installer nginx sans succès, pour l’instant cela ne fonctionne pas.…

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

Magento : Ajouter un block dans une page via les observers

Voyons ensemble aujourd’hui comment ajouter un block de contenu dans une page magento via les observers.
Pour l’exemple on va se baser sur la problématique suivante :
Je souhaite afficher un message particulier sur la page du panier pour les clients qui ne sont pas connectés.
Le contenu du message doit être gérable dans le backoffice via un block cms.

En analysant la structure du fichier de layout checkout.xml pour la page panier, on constate qu’il existe un noeud de type core/text_list dans lequel nous allons inserer le contenu.

<checkout_cart_index>
...
<block type="core/text_list" name="additional.product.info" translate="label">
<label>Additional Product Info</label>
</block>
</checkout_cart_index>

Pour réaliser cela nous allons créer un module. ( je ne détaille pas la procédure ) qui va se baser sur l’événement : controller_action_layout_generate_blocks_after
via le code suivant dans le fichier config.xml

<events>
 <controller_action_layout_generate_blocks_after>
  <observers>
   <test_add_block_layout_xml>
    <class>Hhennes_Tests_Model_Observer</class>
    <method>testAddBlockToLayoutXml</method>
   </test_add_block_layout_xml>
  </observers>
 </controller_action_layout_generate_blocks_after>
</events>

Puis voici le code de l’observer :

<?php 
class Hhennes_Tests_Model_Observer  {
  
  /**
   * Ajout d'un contenu dynamique dans le layout
   */
  public function testAddBlockToLayoutXml($observer) {
   
    $action = $observer->getAction();
    $layout = $observer->getLayout();
    
    //Sur la page du panier : On ajoute le texte d'un block cms
    if ( $action->getRequest()->getOriginalPathInfo() == '/checkout/cart/') {
 
      $additionnalBlock = $layout->getBlock('additional.product.info'); //Récupération du block parent auquel on veut ajouter le contenu
      $cmsBlock = $layout->createBlock('cms/block','test_block')->setBlockId('dresses-skirts'); //Création du block cms dans le layout
      $additionnalBlock->append($cmsBlock,'test_add_cms_block'); //Ajout du nouveau block au block parent
      
    }
    
  }
  
}

Avec ce principe il est ainsi possible d’ajouter facilement du contenu sur n’importe laquelle de vos pages, de manière programmable.…

Pas de commentaires

Magento : Surcharger config.xml ou system.xml

Le système d’override de Magento est très puissant et relativement facile à mettre en place pour les Blocks , Helper et modèles.

En effet ( même si ce n’est pas la méthode recommandée) , il est possible de copier le fichier à surcharger de son arborescence initiale vers le codePool local, et d’y réaliser directement les modifications.

Ex pour le module Cms :
app/code/core/Mage/Cms/Block/Page.php vers app/code/core/Mage/Cms/Block/Page.php
app/code/core/Mage/Cms/Helper/Page.php vers app/code/core/Mage/Cms/Helper/Page.php
app/code/core/Mage/Cms/Model/Page.php vers app/code/core/Mage/Cms/Model/Page.php

Cette surcharge permets également de surcharger les modules placés dans le codePool Community, car si un fichier avec la même arborescence existe dans le codePool local, c’est toujours lui qui sera utilisé.

En revanche pour surcharger un fichier config.xml ou system.xml , il va être nécessaire de créer un module.
( Je ne détaille pas la création de celui-ci )

Commençons par le fichier config.xml

Le principe de l’override est simple, nous allons créer dans le fichier config.xml de notre module le même chemin xml que celui que nous souhaitons overrider.…

Pas de commentaires


Compte Github