magento

L'édition Enterprise de Magento en vidéo : Ventes Privées

Varien a posté sur YouTube une vidéo (en Français) à propos de Ventes Privées dans l'édition Enterprise de Magento :

L'édition Enterprise de Magento en vidéo : Securité, Gestion des Rôles, Chiffrage et Audit

Varien a posté sur YouTube une vidéo (en Français) à propos de Securité, Gestion des Rôles, Chiffrage et Audit dans l'édition Enterprise de Magento :

Partager des données entre les controllers et les blocks dans Magento

Comme vous le savez peut-être, la solution e-commerce Magento a un système de template très puissant. Nous pouvons dire la même chose concernant la partie logique du sytème. Grosso modo Magento est composé d'environ 50 modules. Il y un module pour l'enregistrement d'une commande, un pour les clients, un pour les pages CMS etc. Un module est composé de plusieurs parties. La partie design, la partie controllers, blocks, models et helpers. Les controllers contiennent toutes les actions déclenchées lors de l'utilisation d'un module d'un site Magento. Quand nous avons l'url http://www.my-eshop.tld/index.php/a/b/c

cela signifie que le module a doit lancer l'action c contenue dans le controller b.

Les blocks servent à préparer les données pour les templates. Chaque template utilisée doit avoir un block. Les blocs peuvent être simples mais ils peuvent être également plus complexes. Dans certains cas, il peut être utile de déplacer des données du controller vers le block afin de ne pas devoir recalculer ces données.

Pour cela, nous pouvons utiliser une des fonctionnalités de Magento : les registres.

Dans le controller on enregistre notre données dans la variable nommée $data. Nous pouvons utiliser un registre comme cela :

Mage::register('MyData',$dat);

Dans le fichier du block, nous pouvons accéder aux données de cette variable en utilisant :

$data = Mage::registry('MyData');

C'est une petite astuce qui peut s'avérer être très utile.

Traduction par Laurent Clouet

Magento et PHP 5.3

Votre site Magento est chez un hébergeur mutualisé, celui-ci est passé en PHP 5.3 sans crier gare, et plus rien ne fonctionne ?

Pas de panique. Sans aller jusqu'à dire que c'est normal, le problème est connu, et en cours de correction si ca n'est déjà fait. Ces erreurs viennent du fait que certains tronçons de Magento doivent avoir été produits il y'a un certain temps et font l'usage de fonctions PHP ou de syntaxes dépréciées.

Cela dit, si l'urgence se fait sentir, ou que vous ne pouvez vous permettre une montée de version, voilà comment résoudre le problème :

Dans "/lib/Varien/Object.php" à la ligne ~ 484, remplacer la déclaration de méthode suivante, dont la syntaxe n'est plus tolérée :

public function __toString(array $arrAttributes = array(), $valueSeparator=',')

Par :

public function __invoke(array $arrAttributes = array(), $valueSeparator=',')

Enfin, ajoutez la méthode suivantes juste après __invoke, afin de garantir un bon fonctionnement en cas d'appel direct à la méthode __toString :

function __toString() {
    return $this->__invoke( func_get_arg(0), func_get_arg(1) );
}

Ensuite, il faut partir à la chasse des appels à la fonction "split", qui est dorénavant interdite, pour les remplacer par la fonction "explode" qui fonctionne exactement de la même manière.

Exemple : dans "/app/code/core/Mage/Core/Controller/Request/Http.php" à la ligne 274

Remplacer :

$host = split(':', $_SERVER['HTTP_HOST']);

Par :

$host = explode(':', $_SERVER['HTTP_HOST']);

Il y'a plusieurs occurences de "split" à remplacer, mais attention, n'utilisez pas de remplacement massifs, vous risqueriez de remplacer aussi des occurences aux fonctions "preg_split" et "str_split" qui sont toutes deux utilisées dans le core de Magento et qui restent valides.

De plus, n'oubliez pas de vérifier aussi vos modules Magento locaux !

Une fois ces modifications effectuées, votre configuration Magento devrait être à nouveau fonctionnelle.

NOTE : Ces modifications altèrent le core de Magento (en particulier "/app/code/core" et "/lib"), il est donc fortement déconseillé d'opérer directement en production.

Afficher un block BestSellers (meilleures ventes) sur la page d'accueil de votre site Magento

Une des questions qui vient souvent lors de la mise en place d'un site Magento est la suivante : comment afficher les BestSellers (meilleures ventes) sur la page d'accueil ?

En effet, Magento - dans sa version actuelle du moins - ne propose pas nativement cette fonctionnalité.

Pour autant, si ce manque peut paraître étrange pour une solution e-commerce, il n'est en rien bloquant. Bien au contraire, il va nous permettre de nous rendre compte de la (relative) facilité avec laquelle il est possible de créer de nouveaux blocs, ou du moins de l'évolutivité de l'architecture de Magento.

  1. Récupérez les données

    C'est sûrement la partie la plus compliquée car elle nécessite de maîtriser le modèle objet de Magento.
    À partir du moment où vous savez où aller chercher les données (ici les produits vendus) et comment les requêter (ici en les triant par nombre de ventes décroissantes), obtenir les informations voulues est très simple et tient sur une seule ligne (en fait plusieurs pour un souci de lisibilité).

    $_productCollection = Mage::getResourceModel('reports/product_collection')
        ->addAttributeToSelect('*')
        ->addOrderedQty()
        ->setOrder('ordered_qty', 'desc');

  2. Créer votre block BestSellers

    Respectez le modèle MVC : dans Magento comme dans Zend, chaque objet a sa place et son rôle.
    Créez vos objets métier :
    Typiquement, dans un fichier app/code/local/ma_librairie/Bestseller/Model/Bestseller.php vous définissez votre classe métier qui contient la règle de calcul (ici : afficher les produit nombre de vente décroissante).
    Puis dans app/code/local/ma_librairie/Bestseller/Block/Bestseller.php vous étendez la classe Mage_Core_Block_Template qui se chargera de transmettre proprement les données au block d'affichage.
    Enfin dans app/design/frontend/mon_theme/default/template/catalog/product/view/bestseller.phtml affichez le contenu du block.
    Bien entendu, ces objets doivent être déclarés dans les fichiers XML adéquats.

  3. Affichez votre block

    Il ne vous reste plus qu'à placer votre block dans votre layout actif.
    Pour ce faire, vous pouvez soit modifier votre fichier XML de layout, soit effectuer l'ajout dans le back-office de configuration Magento sur votre page CMS d'accueil.

Pour plus d'information sur les Templates, consultez le billet Créer un template pour son site Magento.

Extension Magento SPPLUS : bug de calcul de clé HMAC

La solution e-commerce Magento permet d'intégrer de nombreuses interfaces de paiement via le système de module magento.

Parmi celles-ci, l'extension SPPLUS permet de mettre en place le module de paiement SP PLUS de la Caisse d'Épargne. Cette extension est disponible via Magento Connect.

Cependant, cette extension présente un bug fort contraignant. En effet toutes les commandes dont l'email du client contient le caractère _ ne sont pas traitées. Cela provient d'un mauvais calcul de la clé HMAC.

Pour info, la clé HMAC est un code d'authentification envoyée par SPPLUS. Pour calculer cette clé et ensuite pouvoir la comparer avec la clé reçue, on utilise la fonction nthmac présente dans la librairie spplus.so fournie par SP PLUS. Le calcul de cette clé se fait avec plusieurs paramêtres dont entre autre l'email du client. Cependant pour bien pouvoir utiliser cette fonction, il faut échapper les caractères spéciaux tels que _.

Pour corriger ce bug il faut donc modifier la méthode ipnPostSubmit du fichier app/code/community/Mage/Spplus/Model/Method/Spplus.php. Il faut remplacer les lignes :

$chaineParam = str_replace(":", ":", $chaineParam);
$chaineParam = str_replace("/", "/", $chaineParam);
$chaineParam = str_replace("_", "_", $chaineParam);
$chaineParam = str_replace("@", "@", $chaineParam);

Par

$chaineParam = str_replace(":", "%3A", $chaineParam);
$chaineParam = str_replace("/", "%2F", $chaineParam);
$chaineParam = str_replace("_", "%5F", $chaineParam);
$chaineParam = str_replace("@", "%40", $chaineParam);

Ce bug a été reporté sur le forum de l'extension et devrait très probablement corrigé dans sa version 1.1.5

Installer Magento en 5 minutes

Si la mise en place d'une e-boutique qui vous ressemble et qui s'intègre dans votre système d'information ne doit pas être prise à la légère (compter 4 mois minimum, en fonction de vos spécificités), l'installation d'un site Magento de démonstration et de test ne vous prendra que 5 minutes.

Cela vous permettra d'avoir un aperçu des fonctionnalités standard de cette solution e-commerce, de vous faire votre propre idée et de réflechir à la manière dont vos besoins vont pouvoir s'insérer naturellement dans le système, ou au contraire demander des aménagements spécifiques.

Bien entendu, un minimum d'expérience technique est préférable, mais pas strictement indispensable.

  1. Procurez-vous un serveur web

    Magento est écrit en PHP et nécessite une base de données MySql

    NB : L'utilisation de PHP 5.3 n'est pas compatible avec Magento.

    Pour notre démonstration, nous recommandons d'utiliser le serveur Apache, même si ce n'est pas une obligation.

    NB : L'utilisation de Zend Server permet d'btenir des performances accrues, ce qui n'est pas l'objet de ce billet.

    À ce stade, l'utilisation d'un package intégré vous permettra de vous affranchir de l'installation de trois logiciels séparés :

    • LAMP si votre plateforme de démo est sous Linux,
    • WAMP si elle est sous Windows,
    • MAMP si elle est sous Mac OS.

     

  2. Assurez-vous d'avoir toutes les extensions PHP requises installées

    Pour fonctionner correctement, Magento a besoin des extensions PHP suivantes :

    • PDO/MySQL
    • MySQLi
    • mcrypt
    • mhash
    • simplexml
    • DOM

     

    Le cas échéant, rendez-vous dans votre fichier php.ini.

  3. Téléchargez Magento

    Rendez-vous sur le site de Magento et téléchargez la dernière version stable :

     

    NB : Notez que nous n'avez pas à vous soucier de télécharger le framework Zend, celui-ci est intégré dans votre distribution Magento.

  4. Décompactez l'archive Magento

    Décompactez l'archive précédemment téléchargée dans un répertoire accessible de votre serveur web.

  5. Paramétrer votre serveur

    Accéder à votre serveur, muni des informations suivantes :

    • l'adresse IP de votre serveur de base de données (localhost dans le cas d'un LAMP),
    • le nom de la base de données,
    • l'identifiant et le mot de passe d'un utilisateur mySql ayant accès à la base de données, avec le droits pour créer des éléments (tables...).

    Suivez les instructions, votre boutique est (presque) prête !

     

  6. Paramétrez votre boutique

    Accédez au back-office de votre e-boutique pour modifier la configuration Magento et personnalisez le catalogue, les informations, le design Magento, et caetera.

  7. Si vous êtes perdu

    Reportez-vous au guide d'installation Magento ou au forum relatif au problèmes d'installation Magento.

Créer un template pour son site Magento

Créer un template pour son site Magento est une étape incontournable dans la mise en place en place de sa boutique en ligne. En effet, la charte graphique d'une e-Boutique est aussi importante que la vitrine d'un magasin : il s'agit de la première chose que verra le chalant qui passe devant par hasard.
C'est votre vitrine qui retiendra un client potentiel ou qui, au contraire, l'incitera à partir.

(Il existe bien entendu d'autre moyens de faire venir des prospects directement au coeur de votre boutique, via les moteurs de recherche notamment, mais ceci fera l'objet d'autres billets.)

Fort de ce constat, tout le système de gestion du design Magento a été conçu et pensé afin de vous permettre d'achalander au mieux les pages de votre site Magento, de les organiser et de les décorer comme bon vous semble. (Et bien entendu sans faire de développements spécifiques qui interdiraient par la suite de bénéficier des mises à jour de Magento.)

Afin de personnaliser la présentation d'un site Magento, trois types d'objets sont mis en oeuvre, abondamment cités dans les documentations, forums de discussions et autres wiki :

  1. les templates (gabarits ou modèles)
  2. les skins (revêtements)
  3. les layouts (agencements, dispositions)

La compréhension de ces trois types d'objets est primordiale afin de comprendre comment penser votre boutique en ligne.

Les Templates

Les templates (gabarits ou modèles) ne sont ni plus ni moins qu'un ensemble des blocks qui composent votre boutique.

Ce sont ces blocks qui vont par exemple :

  • afficher le détail d'un article,
  • afficher le contenu du panier client,
  • afficher le promo du mois,
  • afficher les menus de navigation,
  • afficher du contenu telles que les conditions générales de vente,
  • et caetera.

Magento fournit un template par défaut qui contient toute une série de blocks standard. Il est possible, par un système d'héritage, de compléter, surcharger, modifier des blocks, d'en créer de nouveaux, et caetera.
En outre, Magento étant basé sur la framework Zend, lui même MVC, les règles métier relatives à l'affichage de ces blocks sont définies ailleurs, permettant ainsi une parfaite indépendance de votre charte graphique vis à vis du coeur du système.

Les Skins

Les skins (revêtements) renferment l'ensemble des feuilles de style CSS de votre site et décrivent avec quelle mise en forme (couleurs, images, polices de caractères...) les blocks de templates vont être affichés. Séparées des templates, il devient ainsi excessivement aisé de modifier un style graphique d'affichage sans devoir modifier les blocks.

Changer tout ou partie de la charte graphique peut ainsi être facilement réalisé, par exemple :

  • pour une partie du site (catégorie spécifique, déstockage...)
  • pour une période donnée (Noël, soldes...),
  • pour une catégorie particulière d'internaute (comités d'entreprises, VIP...),
  • et caetera.

Les Layouts

Les layouts (agencements, dispositions) quant à eux vont définir quels blocks va s'afficher sur quelle page (page catalogue, page produit, page de paiement, page de compte client...) et en définir les attributs. Il ne s'agit donc ni plus ni moins que de la définition de la structure générale de votre site. Là encore, un layout standard est proposé, celui-ci étant très facilement personnalisable.

Magento et le référencement naturel

Depuis son lancement, le support Magento continue d'être amélioré et ne cesse d'apporter satisfaction aux développeurs ainsi qu'aux webmasters. Compte tenu des nombreuses raisons qui pourraient justifier un tel succès des sites Magento, je vais aborder dans ce billet la question de l'optimisation du référencement naturel et les facilités que Magento propose.

Avant d'aborder plus sérieusement la question, un préalable s'impose tout de même. C'est que, comme pour tout support, il est important d'avoir à la création de son site internet la dernière version de Magento afin de profiter au maximum des facilités d'intégration des optimisations de référencement naturel.

Ma petite expérience m'a amené à conclure d'entrée que Magento avait un plus par rapport à tous les autres supports que j'ai déjà utilisés : la création d'urls pertinentes pour les moteurs de recherche. En effet les robots crawlers des moteurs de recherche ont l'habitude de découvrir les pages à partir de leur urls. Or certains supports proposent des urls contenant des caractères non pertinents pour le référencement naturel notamment (?), ou des (-); &?#... Tous ces caractères posent des problèmes aux crawlers pour qui ne comprennent ainsi pas toujours le vrai sens de la page.

Le module de réécriture des urls de Magento permet donc d'avoir des urls très claires, par exemple : www.monsite.com/categorie1/page1

En nommant les catégories et la page et en s'assurant de la cohérence de ces mots (ceux inscrits dans l'url) et du contenu des champs meta, j'ai pu vérifier que la prise en compte de mes sitemap était plus facile, allant à des taux d'indexation de l'ordre de 88%.

L'autre force des "sites magento" est la légèreté du backoffice. On peut en effet changer le contenu d'une page sans nécessairement avoir des connaissances techniques trop poussées. Les moteurs de recherches préfèrent du contenu frais et actualisé. À ce titre, disposer d'un support qui permet d'actualiser le contenu est forcément un point de plus pour le référencement naturel.

Magento facilite aussi la prise en compte des améliorations qui interviennent ces derniers jours dans la SEO. En effet, afin d'éviter les problèmes de duplication du contenu, Magento vous propose d'indiquer aux moteurs de recherche la version préférée de l'url.

D'autres optimisations sont envisageables sur Magento. Ces dernières seront abordées lors de mon prochain article sur Magento et le référencement naturel.