Supprimer les commandes de test sur Magento

Il arrive souvent, une fois que votre site internet est terminé, vos modules installés et votre design intégré, qu’avant de mettre en ligne, vous souhaitiez disposer d’un site propre, sans commandes, clients, ni aucune autre trace des tests que vous auriez pu effectuer.

En cherchant un peu (et vous avez chercher puisque vous êtes arriver ici ;) ), vous avez pu tomber sur de multiples méthodes permettant de supprimer ces fameuses commandes de test (installation de module, scripts SQL tous différents les uns des autres).

Afin d’éclaircir un peu les choses, voici les scripts qui nous permettent de supprimer toutes traces de nos tests avant une mise en ligne. Attention cependant, depuis la version 1.4.1.0 de Magento, la structure de la base de données à changer, veillez donc à bien choisir le script adapté à votre version de Magento.

Avant toute chose, pensez à faire une sauvegarde de votre base de données. En effet, même si nous avons testé ces scripts, il vaut mieux prévenir que guérir, une sauvegarde de votre base ne vous prendra que 5 minutes et pourrait vous faire gagner des heures si une erreur survient.

Rendez vous donc dans votre interface de gestion de base de données (PhpMyAdmin & Co), selectionnez votre base, faîtes en une sauvegarde (soit par un export SQL, soit par une copie dans une autre base à vous de choisir) puis cliquez sur « SQL ». Choisissez ensuite le script adapté ci-dessous et exécutez le.

Magento 1.4.1.X (testé en 1.4.1.1) :

-- Reset Magento TEST Data
SET FOREIGN_KEY_CHECKS=0;
-- reset dashboard search queries
TRUNCATE `catalogsearch_query`;
ALTER TABLE `catalogsearch_query` AUTO_INCREMENT=1;
-- reset sales order info
TRUNCATE `sales_flat_creditmemo`;
TRUNCATE `sales_flat_creditmemo_comment`;
TRUNCATE `sales_flat_creditmemo_grid`;
TRUNCATE `sales_flat_creditmemo_item`;
TRUNCATE `sales_flat_invoice`;
TRUNCATE `sales_flat_invoice_comment`;
TRUNCATE `sales_flat_invoice_grid`;
TRUNCATE `sales_flat_invoice_item`;
TRUNCATE `sales_flat_order`;
TRUNCATE `sales_flat_order_address`;
TRUNCATE `sales_flat_order_grid`;
TRUNCATE `sales_flat_order_item`;
TRUNCATE `sales_flat_order_payment`;
TRUNCATE `sales_flat_order_status_history`;
TRUNCATE `sales_flat_quote`;
TRUNCATE `sales_flat_quote_address`;
TRUNCATE `sales_flat_quote_address_item`;
TRUNCATE `sales_flat_quote_item`;
TRUNCATE `sales_flat_quote_item_option`;
TRUNCATE `sales_flat_quote_payment`;
TRUNCATE `sales_flat_quote_shipping_rate`;
TRUNCATE `sales_flat_shipment`;
TRUNCATE `sales_flat_shipment_comment`;
TRUNCATE `sales_flat_shipment_grid`;
TRUNCATE `sales_flat_shipment_item`;
TRUNCATE `sales_flat_shipment_track`;
TRUNCATE `sales_invoiced_aggregated`;
TRUNCATE `sales_invoiced_aggregated_order`;
TRUNCATE `sales_order_aggregated_created`;
TRUNCATE `sendfriend_log`;
TRUNCATE `tag`;
TRUNCATE `tag_relation`;
TRUNCATE `tag_summary`;
TRUNCATE `wishlist`;
TRUNCATE `log_quote`;
TRUNCATE `report_event`;
ALTER TABLE `sales_flat_creditmemo` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_creditmemo_comment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_creditmemo_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_creditmemo_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_comment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_payment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_status_history` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item_option` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_payment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_shipping_rate` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_comment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_track` AUTO_INCREMENT=1;
ALTER TABLE `sales_invoiced_aggregated` AUTO_INCREMENT=1;
ALTER TABLE `sales_invoiced_aggregated_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_aggregated_created` AUTO_INCREMENT=1;
ALTER TABLE `sendfriend_log` AUTO_INCREMENT=1;
ALTER TABLE `tag` AUTO_INCREMENT=1;
ALTER TABLE `tag_relation` AUTO_INCREMENT=1;
ALTER TABLE `tag_summary` AUTO_INCREMENT=1;
ALTER TABLE `wishlist` AUTO_INCREMENT=1;
ALTER TABLE `log_quote` AUTO_INCREMENT=1;
ALTER TABLE `report_event` AUTO_INCREMENT=1;
SET FOREIGN_KEY_CHECKS=1;

Magento 1.4.0.X (testé) et 1.3.X.X (en théorie, non testé) :

SET FOREIGN_KEY_CHECKS=0;

TRUNCATE `sales_order`;
TRUNCATE `sales_order_datetime`;
TRUNCATE `sales_order_decimal`;
TRUNCATE `sales_order_entity`;
TRUNCATE `sales_order_entity_datetime`;
TRUNCATE `sales_order_entity_decimal`;
TRUNCATE `sales_order_entity_int`;
TRUNCATE `sales_order_entity_text`;
TRUNCATE `sales_order_entity_varchar`;
TRUNCATE `sales_order_int`;
TRUNCATE `sales_order_text`;
TRUNCATE `sales_order_varchar`;
TRUNCATE `sales_flat_quote`;
TRUNCATE `sales_flat_quote_address`;
TRUNCATE `sales_flat_quote_address_item`;
TRUNCATE `sales_flat_quote_item`;
TRUNCATE `sales_flat_quote_item_option`;
TRUNCATE `sales_flat_order_item`;
TRUNCATE `sendfriend_log`;
TRUNCATE `tag`;
TRUNCATE `tag_relation`;
TRUNCATE `tag_summary`;
TRUNCATE `wishlist`;
TRUNCATE `log_quote`;
TRUNCATE `report_event`;

ALTER TABLE `sales_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_datetime` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_decimal` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_datetime` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_decimal` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_int` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_text` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_entity_varchar` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_int` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_text` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_varchar` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item_option` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_item` AUTO_INCREMENT=1;
ALTER TABLE `sendfriend_log` AUTO_INCREMENT=1;
ALTER TABLE `tag` AUTO_INCREMENT=1;
ALTER TABLE `tag_relation` AUTO_INCREMENT=1;
ALTER TABLE `tag_summary` AUTO_INCREMENT=1;
ALTER TABLE `wishlist` AUTO_INCREMENT=1;
ALTER TABLE `log_quote` AUTO_INCREMENT=1;
ALTER TABLE `report_event` AUTO_INCREMENT=1;

– reset customers
TRUNCATE `customer_address_entity`;
TRUNCATE `customer_address_entity_datetime`;
TRUNCATE `customer_address_entity_decimal`;
TRUNCATE `customer_address_entity_int`;
TRUNCATE `customer_address_entity_text`;
TRUNCATE `customer_address_entity_varchar`;
TRUNCATE `customer_entity`;
TRUNCATE `customer_entity_datetime`;
TRUNCATE `customer_entity_decimal`;
TRUNCATE `customer_entity_int`;
TRUNCATE `customer_entity_text`;
TRUNCATE `customer_entity_varchar`;
TRUNCATE `log_customer`;
TRUNCATE `log_visitor`;
TRUNCATE `log_visitor_info`;

ALTER TABLE `customer_address_entity` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_datetime` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_decimal` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_int` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_text` AUTO_INCREMENT=1;
ALTER TABLE `customer_address_entity_varchar` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_datetime` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_decimal` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_int` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_text` AUTO_INCREMENT=1;
ALTER TABLE `customer_entity_varchar` AUTO_INCREMENT=1;
ALTER TABLE `log_customer` AUTO_INCREMENT=1;
ALTER TABLE `log_visitor` AUTO_INCREMENT=1;
ALTER TABLE `log_visitor_info` AUTO_INCREMENT=1;

– Reset all ID counters
TRUNCATE `eav_entity_store`;
ALTER TABLE `eav_entity_store` AUTO_INCREMENT=1;

SET FOREIGN_KEY_CHECKS=1;

Si vous rencontrez des problèmes pour exécuter ces commandes, supprimez les lignes de commentaires.

En espérant que ce petit tutoriel vous aura aider pour la création de votre site ecommerce.

Comment utiliser gmail avec son nom de domaine

Vous recevez énormément de SPAM sur votre boite aux lettres ? Et vous voulez tout de même garder votre nom de domaine propre à votre entreprise (ex : applibox.com).

Google Apps propose une solution plutôt intéressante et surtout gratuite qui saura répondre parfaitement à vos attentes. En voici les principaux avantages :

  • Administration très simple de tous les comptes emails,
  • Possibilité d’utiliser votre nom de domaine,
  • Avoir 6 giga d’espace de stockage dédié aux mails,
  • Utiliser le merveilleux outil qu’est Gmail et sa gestion de spam incomparable,
  • Avoir accès aux calendriers et documents partagés,
  • Pouvoir accéder depuis votre mobile à tous ces services grâce à la plateforme mobile Google.

La liste des avantages est longue, et je pense que vous êtes déjà en ébullition ? :)

Attention cependant, cette procédure est parfois technique, nous pouvons si vous le désirez la mettre en place, pour vous. Dans ce cas, contactez-nous.

Trêve de bavardages voici la liste des étapes vous permettant de mettre en place cette plateforme.

Dans un premier temps aller sur le site des Google Apps,

  • Insérez votre nom de domaine,
  • Complétez les informations demandées (adresse, téléphone..),
  • Créez un compte administrateur. Il vous permettra ensuite de gérer l’ensemble de vos googles apps,

Bienvenue sur votre tableau de bord de Google Apps !

L’étape suivante consiste à prouver que vous êtes bien membre du domaine. Pour cela 2 solutions :

  • Soit uploader un fichier sur votre FTP,
  • soit créer un enregistrement CNAME avec la clé donnée par Google, à l’endroit où vous gérez les DNS.

Une fois l’étape précédente réalisée et validée vous devez maintenant activer les Google Apps.

Pour cela retournez sur votre tableau de bord. Et choisissez par exemple le service « E-mail ».

Afin d’activer ce service vous devez tout d’abord créer un compte utilisateur. (ex : contact@mondomaine.com).

Il vous faut ensuite activer ce qui est appelé « Configuration de la distribution des e-mails ».

Cette étape va nécessiter d’ajouter des enregistrements MX sur votre serveur DNS (OVH, Gandi.. ?). Voici les enregistrements MX à ajouter en n’oubliant pas d’ajouter aussi leur priorité . C’est peut être l’étape la plus technique.

MX Adresse du serveur Priorité
ASPMX.L.GOOGLE.COM. 10
ALT1.ASPMX.L.GOOGLE.COM. 20
ALT2.ASPMX.L.GOOGLE.COM. 20
ASPMX2.GOOGLEMAIL.COM. 30
ASPMX3.GOOGLEMAIL.COM. 30
ASPMX4.GOOGLEMAIL.COM. 30
ASPMX5.GOOGLEMAIL.COM. 30

De même ajoutez un alias afin de vous simplifiez l’accès à votre boite mail. Ex : http://mail.votredomaine.com pointe directement sur Gmail.

CNAME ADRESSE
mail ghs.google.com

Le temps de propagation des serveurs DNS peut être parfois long (jusqu’à 48h). Attendez un moment puis essayez d’accéder à l’alias que vous venez de configurer : mail.votredomaine.com.

Si cela fonctionne c’est que les modifications ont été réalisées. Vous pouvez alors vous connecter à Gmail grâce au compte utilisateur que vous avez créé précédemment.

Envoyez-vous un mail depuis une autre adresse afin de voir si tout fonctionne.

Si vous recevez le mail c’est que votre boite Gmail est maintenant opérationnelle :)

Bien entendu, si vous voulez mettre en place cette plateforme sans vous occuper de la technique, n’hésitez pas à nous contacter, nous pourrons le faire à votre place et vous activer aussi d’autres services comme le calendrier et le partage de documents en ligne.

eZ Publish, un CMS pas comme les autres

Nous nous sommes récemment penchés sur eZ Publish (prononcé « Easy Publish »), un système de gestion de contenu venu tout droit de Norvège. Il est peu connu mais ce n’est pas pour autant qu’il n’est pas utilisé, en effet, les sites du MIT et de la NASA ont été créés avec eZ Publish.

Au premier abord, il s’agit d’un CMS proposant les mêmes fonctionnalités que ses concurrents :

  • création / édition de contenu
  • gestion de plateforme e-commerce
  • gestion d’utilisateurs / rôles / groupes
  • système de workflows pour les publications
  • moteurs de recherche
  • flux RSS

Cependant, il suffit de se pencher un peu plus sur eZ Publish pour se rendre compte qu’il s’agit d’un CMS atypique. En effet, il permet une très forte intéraction depuis le front office sur l’administration du site. Ainsi, vous pouvez, avec ce CMS, ajouter un article ou un nouvel élément sur une page sans avoir besoin de vous connecter au back-office.

De plus, il est possible d’installer des extensions supplémentaires (ce qui est logique pour un CMS me direz-vous). Cependant, toutes les extensions eZ Publish sont développées à partir d’un framework propre au CMS, ce qui assure une compatibilité sans précédent, fini les problèmes de compatibilité entre versions !

Nous devrions bientôt réaliser un site sous eZ Publish donc continuez de suivre notre actualité ;)

Résoudre les problèmes de compatibilité entre Spplus & Magento 1.4

Comme certains d’entre vous se sont déjà rendus compte, le module banquaire de la Caisse d’Epargne Spplus n’est pas encore compatible avec les versions 1.4 de Magento (notamment les 1.4.1.X).

Afin de résoudre les problèmes assez importants causés par cette incompatibilité (notifications qui n’arrivent pas, facturation automatique qui n’envoie pas de mails…), nous avions au départ prévu de faire un développement pour mettre le module Spplus à jour afin qu’il soit compatible avec les versions 1.4 de Magento.

Cependant, nous avons finalement réussi à trouver les manipulations à faire pour résoudre les bugs :

  • tout d’abord, depuis le 12 septembre 2010, les serveurs de notification Spplus ont changé, il faut donc autoriser ces nouveaux serveurs à accéder à votre site. Pour ce faire, ouvrer le fichier /app/code/community/Mage/Spplus/etc/config.xml et trouvez les lignes suivantes (lignes 276/277 environ) :

  • <authorized_ip>
    <value>

    En dessous de ces deux balises se trouve une longue liste d’adresses IP qui correspondent en fait aux adresses IP qui sont autorisées par Spplus à accéder à votre site. Rajoutez les deux nouvelles adresses IP des serveurs de notifications à la suite de cette liste : 91.135.180.215 et 91.135.184.215. Suivant votre version de Spplus, il est possible qu’une de ces deux adresses soit déjà dans la liste.

  • Cependant, même si les serveurs de notifications sont désormais autorisés, la manipulation ne s’arrête pas là! En effet, pour nous ne savons quelle raison, il faut, pour faire fonctionner Spplus avec Magento 1.4, créer le fichier /var/log/spplus.log (vous pouvez aussi tout simplement activer les logs dans Système > Configuration > Avancé > Développeur > Paramètres de log). Une fois ce fichier créé, et comme par magie, Spplus fonctionnera de nouveau avec votre boutique en ligne.

Un second problème rencontré lors de l’utilisation de SPPLUS avec Magento 1.4 est l’erreur « Problème lors du paiement, le champ est incorrect » lors de l’arrivée sur la page de Spplus. Tout d’abord, commencez par vérifier les valeurs de tous les champs en activant le mode Test de Spplus. De notre côté, l’erreur venait du champ « Devise » qui avait pour valeur « Pas trouvé ». Pour résoudre cette erreur, ouvrez le fichier /app/code/community/Mage/Spplus/Model/Method/Spplus.php et modifiez la fonction getDevise() (lignes 368 à 377). Remplacez le ‘return « Pas trouvé » ‘ par ‘return « 978″ ‘ (qui correspond au code de l’Euro) et c’est terminé !

En espérant que ce petit tuto vous aura servi à remettre en route votre boutique e-commerce Magento.

E-commerce : « les silver surfers »

Alors que beaucoup de personnes pensent que les seniors ont du mal avec l’outil informatique, des récents sondages montrent le contraire !

En effet, d’après la Fevad (Fédération du e-commerce et de la vente à distance) et Médiamétrie cette partie de la population rattrape son retard vis à vis des nouvelles technologies à grand pas ! D’ailleurs une nouvelle expression est née « les silver surfers ».

Quelques chiffres du deuxième trimestre 2010 (Médiamétrie) :

70,8 % : C’est le taux de cyberacheteurs parmi la population internaute des 50-64 ans, soit une croissance de 22% sur un an !
60,4 % :  Même taux mais pour une la population internaute des 65 ans et plus. (Croissance de 35 % depuis 2009).
64,9 % : Pourcentage de retraités internautes pratiquant des achats en ligne (Croissance de 48 % depuis 2009).
75 % : Un panier Web moyen est 75% plus élevé chez les 50 ans et plus que la chez la moyenne des cyber-acheteurs.

Pourquoi tant de croissance ?

  • Il existe de plus en plus de solutions leur permettant de découvrir l’outil informatique.
  • Les seniors font partie des personnes les plus satisfaites des achats en ligne (En 2010 le taux de satisfaction chez les plus de 50 ans est 96 %).
  • Qui dit satisfait, dit client régulier !
  • Qui dit satisfait, dit aussi bouche à oreille et donc augmentation du nombre de personnes voulant tester l’achat en ligne.

Pour conclure cet article voici la liste des 10 sites marchands les plus en affinité sur les 50 ans et plus (source Médiamétrie / Netratings).

  1. Ricaud
  2. Daxon
  3. Damart
  4. Blanche Porte
  5. Gîtes de France
  6. Expedia
  7. François Saget
  8. Homelidays
  9. Atlas for men
  10. Opodo

Les utilitaires système Open Source indispensables

Un petit problème sur votre ordinateur, vous aimez les lignes de commandes :)  ?  vous ne savez pas comment le résoudre ? Voici une liste d’utilitaires open source qui peuvent s’avérer utiles :

  • System Rescue CD
    The Best ! Regroupe beaucoup de programmes vous permettant de restaurer votre système, Gparted, Ntfs3g, MemTest, Rsync..
    Vous trouverez aussi des programme vous permettant de réparer disque dur, ram, bios.. classé par marques de matériel.
    Site :  http://www.sysresccd.org
  • Ultimate Boot CD
    Dans le même esprit que System Rescue CD mais seulement orienté pour la réparation des éléments de votre ordinateur.
    Site : http://www.ultimatebootcd.com
  • Rescatux / SuperGrub2 Disk / Super Grub Disk
    Vous avez installé Linux sur votre ordinateur et vous n’arrivez plus à redémarrer sur votre partition Windows. Ce site propose 3 logiciels vous proposant de récréer votre grub* ou de le simuler au démarrage de votre ordinateur.
    Site : http://www.supergrubdisk.org
  • Les Cd Live des distributions Linux
    Quoi de mieux qu’un Cd Linux pour réparer votre installation !
    Site : Distribution Ubuntu :  http://www.ubuntu-fr.org

Bonne réparation :)

*Grub : GRUB est un programme informatique permettant de charger un système d’exploitation (de type Windows ou Linux par exemple).

Encore plus de vitesse sous Magento !

Suite à notre article concernant la vitesse sous Magento, nous avons approfondi notre travail sur l’optimisation des sites Magento dans le but d’améliorer encore la vitesse de chargement de nos boutiques e-commerce.

Voici donc la liste des optimisations possibles pour améliorer la vitesse :

  1. Tout d’abord, nous vous conseillons d’installer l’extension Fooman Speedster. Ce module va vous permettre de compresser vos CSS et vos JS afin d’améliorer le temps de chargement de vos pages. Pour installer cette extension, il vous suffit de suivre les instructions indiquées sur la page de l’extension. Ces instructions sont en anglais mais si vous avez besoin d’aide n’hésitez pas à nous contacter, nous serons ravis de vous donner un coup de main.
  2. Ensuite, vous pouvez activer le module Expires d’Apache, qui permet de définir la date d’expiration du contrôle de cache dans les entête HTTP de réponse du serveur. Pour se faire, ouvrez le fichier .htaccess à la racine de votre site Magento et cherchez les lignes suivantes : <IfModule mod_expires.c>
    ############################################
    ## Add default Expires header
    ## http://developer.yahoo.com/performance/rules.html#expires
    ExpiresDefault "access plus 1 year"

    </IfModule>

    Remplacez les par :

    <IfModule mod_expires.c>

    ############################################
    ## Add default Expires header
    ## http://developer.yahoo.com/performance/rules.html#expires

    ExpiresActive "On"
    ExpiresDefault "access plus 1 month"

    </IfModule>

  3. Pour améliorer la vitesse d’exécution de PHP, vous pouvez utiliser un accélérateur PHP comme APC. Si APC est activé sur votre serveur, ouvrez votre fichier app/etc/local.xml. Entre les balises <global> et </global> ajoutez le code suivant :<cache>
    <backend>apc</backend>
    <prefix>MAGE_</prefix>
    </cache>

    Après modification, n’oubliez pas de rafraîchir votre cache Magento pour que les modifications soient prises en compte. D’après certains utilisateurs de Magento, eAccelerator serait plus performant que APC mais nous n’avons pas encore eu l’occasion de le tester, nous vous tiendrons au courant dès que nous aurons plus d’informations.

  4. Par ailleurs, du côté serveur, vous pouvez mettre en place le cache des requêtes. Vérifiez d’abord si le cache des requêtes est activé en exécutant la requête suivante sur votre base de données :SHOW VARIABLES LIKE 'have_query_cache';Si le résultat est « ON » ou « YES », c’est bon, vous pouvez alors exécuter la requête suivante : SHOW VARIABLES LIKE 'query_cache_size';Le chiffre obtenu correspond à une taille : 1 million = 1 MB. Un cache d’environ 64 MB est déjà amplement suffisant.
    Si vous souhaitez modifier les paramètres de ce cache de requêtes, contactez votre hébergeur pour qu’il effectue les modifications pour vous.
  5. Vous pouvez ensuite vérifier que les Keep Alives d’Apache sont activés . Il s’agit d’une configuration du serveur qui autorise les connexions permanentes. Ces sessions à haute durée de vie permettent de gérer plusieurs requêtes à travers la même connexion TCP/IP et des résultats ont montrés qu’un gain de 50% de temps peut être obtenu sur des pages HTML avec beaucoup d’images. Cette configuration est géré dans le fichier httpd.conf ou apache2.conf de votre serveur, c’est pourquoi il est préférable de demander à votre hébergeur d’activer ce service si il ne l’est pas. Une configuration des Keep Alive par exemple peut être la suivante : KeepAlive On
    KeepAliveTimeout 2

    Cependant, il faut désactiver ce service si vous utilisez mod_php :

    KeepAlive Off

  6. Pour améliorer encore le cache Magento, vous pouvez mettre en cache certains blocks de Magento dont le temps de chargement est long (de gros menus ou de longues listes de produits par exemple). Vous pouvez mettre en place ces caches manuellement en consultant cette page du wiki Magento mais également installer certaines extensions qui mettent en place ces caches comme le cache pour les catégories ou le cache pour les produits. Attention cependant, la mise en place de ces caches très spécifiques est complexe et peut ne pas vous apporter totale satisfaction, c’est pourquoi n’installez ces extensions que si vous avez tester leur fonctionnement et que vous ne rencontrez aucun problème.
  7. Enfin, il semblerait que l’activation de la compilation (dans Système>Outils>Compilation) améliore également les performances de Magento. Cependant, faîtes attention, notamment avec l’installation des extensions : avant de vous connecter au Magento Connect Manager, pensez à désactiver la compilation sinon vous risquez d’obtenir des erreurs ou une page blanche. De plus, le compilateur rencontre des problèmes de comptabilité avec certaines extensions (notamment celles qui ajoutent des caches) donc désactivez le si vous voyez qu’il génére des erreurs sur votre site.
  8. Il existe évidemment d’autres moyens d’accélérer votre site Magento, comme par exemple réduire la taille de vos images et les compresser avant de les uploader plutôt que de laisser Magento les réduire lors du chargement de votre page, utiliser un CDN (Content Distribution Network) pour stocker vos contenus statiques (images, CSS, JS) plutôt que votre webroot ou encore stocker vos contenus dynamiques (var/cache et var/session) sur un système de fichier basé sur la mémoire comme les RAMdisks ou les tmpfs.
  9. Enfin, une fois toutes ces modifications en place, il vous faut générer le cache. En effet, pour que la mise en cache soit efficace, il faut que les pages visitées soient déjà en cache. Comme il peut être long et ennuyeux de visiter chaque page de votre site pour que celle-ci soit mise en cache, vous pouvez automatiser ceci en vous connectant en SSH à votre serveur et en passant la commande suivante :
    wget http://www.votresitewebmagento.com -r --delete-after -nd --reject png,jpeg,jpg,gif
    Cette commande va télécharger (wget) récursivement (-r) tous les contenus de votre site (http://www.votresitewebmagento.com) en prenant soin de ne pas garder les contenus sur votre disque dur (–delete-after), de ne pas créer de nouveaux dossiers (-nd ) et de ne pas télécharger toutes les images (–reject png,jpeg,jpg,gif). Ainsi votre cache sera générer pour la totalité de votre site.

En espérant que ces modifications vous auront aidé à améliorer les performances de votre site Magento.


Optimisation via Zend_Cache pour l’extension AheadWorks_Advancedmenu

Il y a deux choses à faire dans le fichier Menu.php ( Class AW_Advancedmenu_Block_Menu ) – présent dans code/Local/AW/Advancedmenu/Block :

  1. Ajouter au constructeur la fonction addData
$this->addData(array('cache_lifetime' => 999999,'cache_key' => $this->getCacheKey()));

Cet appel permet de dire à Magento que nous allons ajouter des données au cache.

cache_lifetime définit le temps en minute de durée des fichiers avant regénération.

cache_key définit l’identifiant de chaque block qui est mis en cache.

2.  Ecraser la méthode getCacheKey en l’insérant dans ce même fichier (Menu.php) :

Pour cela vous devez donner un identifiant à chaque menu différent. Dans l’exemple de notre site, Geovie, il y a un total de quatres menus. C’est pourquoi il faudra identifier chacun de ces menus avec un identifiant unique.

public function getCacheKey(){

//On utilise une variable de post pour différencier les différents appels à la fonction

//On a plusieurs appels car il y a plusieurs menus

//Il s'agit d'une astuce intéressante car dans notre cas on appelle au minimum six fois la fonction getCacheKey

if(!isset($_POST['cacheKey'])){
    $_POST['cacheKey'] = 1;
}else{
    $_POST['cacheKey'] += 1;
}

//echo "\n Passage: ".$_POST['cacheKey'];

//On différencie les cas
//Premier : dans la page des produits
if (Mage::registry('current_product'))
{
//Pour les valeurs 1,2,3 de cacheKey, on s'occupe du menu du haut contenant toutes les catégories

      if(isset($_POST['cacheKey']) && ( $_POST['cacheKey'] == 3  || $_POST['cacheKey'] == 2 || $_POST['cacheKey'] == 1) ){
      return Mage::app()->getStore()->getId()."page";
      }//On s'occupe maintenant des menus de gauches

      //On met le même identifiant car on créé le menu en fonction de l'endroit où l'on se trouve
     //donc du category_id
     elseif(isset($_POST['cacheKey']) && ( $_POST['cacheKey'] == 4) ){
          return Mage::app()->getStore()->getId()."categoryLeft_".$this->_currentCategoryId;
     }elseif(isset($_POST['cacheKey']) && ( $_POST['cacheKey'] == 5) ){
          return Mage::app()->getStore()->getId()."categoryLeft_".$this->_currentCategoryId;
     }elseif(isset($_POST['cacheKey']) && ( $_POST['cacheKey'] == 6) ){
          return Mage::app()->getStore()->getId()."categoryLeft_".$this->_currentCategoryId;
     }//On met au cas où un fonctionnement par défaut
      else{
          return Mage::app()->getStore()->getId()."categoryLeftDefault".$this->_currentCategoryId;
     }

}//Deuxième cas : page de la liste des produits
//Même fonctionnement que la condition avec des produits
elseif (Mage::registry('current_category'))
{//On ajoute le numéro de catégorie pour différencier les pages
       if(isset($_POST['cacheKey']) && ( $_POST['cacheKey'] == 3  || $_POST['cacheKey'] == 2 || $_POST['cacheKey'] == 1) ){
         //Menu de haut par défaut
         return Mage::app()->getStore()->getId()."page";
       }elseif(isset($_POST['cacheKey']) && ( $_POST['cacheKey'] == 4) ){
         return Mage::app()->getStore()->getId()."categoryLeft_".$this->_currentCategoryId;
       }elseif(isset($_POST['cacheKey']) && ( $_POST['cacheKey'] == 5) ){
         return Mage::app()->getStore()->getId()."categoryLeft_".$this->_currentCategoryId;
       }elseif(isset($_POST['cacheKey']) && ( $_POST['cacheKey'] == 6) ){
         return Mage::app()->getStore()->getId()."categoryLeft_".$this->_currentCategoryId;
       }else{
         return Mage::app()->getStore()->getId()."categoryLeftDefault".$this->_currentCategoryId;
       }

}//Dans le cas où l'on se trouve sur la première page, on ne traite que le menu du haut
//Donc il faut renvoyer la même clef que sur les pages intérieures pour ce même menu
elseif( Mage::getSingleton('cms/page')->getIdentifier() == Mage::getStoreConfig('web/default/cms_home_page') )
{
    //Menu de haut par défaut

    return Mage::app()->getStore()->getId()."page";

}//Dans les autres pages (recherche, panier, compte) on affiche uniquement le menu du haut donc on prend la même clef

else{

     //Menu de haut par défaut

     return Mage::app()->getStore()->getId()."page";

}

}

Evidemment, ce code est très spécifique mais nous espérons  qu’il vous permettra, après adaptation, de mettre en cache l’advanced Menu de aheadWorks afin de gagner de précieuses secondes de chargement.

Hudson – PhpUnit & Sélénium

Après avoir passé une période sous PhpUnderControl, nous avons installé sur nos serveurs l’application Hudson. Le but étant de lancer quotidiennement des tests unitaires et Selenium sur un serveur d’intégration.

Après avoir configuré une configuration d’un projet « freestyle » ( voir les différents tutos ), il a fallu dire à Hudson comment lancer et traiter les différents tests. Pour celà :

  1. Se rendre sur le Job > Configurer
  2. « Ajouter une étape au Build » > Choisir « Executer un script shell »
  3. Dans le textarea qui apparait insérer la commande php adéquat, par exemple :
    cd /monpath/ && phpunit  --log-junit /reports_dir/phpunit.xml TestsSuite.php

Attention aux problèmes de droits sur le dossier reports_dir. Si après un build, il n’y a pas de fichier, penser à faire un petit chmod ;) .

Ensuite, dans la partie inférieur ( Actions à la suite du build ) :

  1. Cocher « Publish testing tools result report« 
  2. Cliquer sur Add > Choisir PhpUnit-3.4
  3. Remplir le textarea « Pattern » > indiquer l’endroit où vous avez envoyer le rapport PhpUnit ( voir commande ci-dessus )

Il est intéressant de rappeler que ma suite de tests unitaires lance ma suite de tests Sélénium.

Si à la fin du build il vous annonce que le fichier PhpUnit est introuvable, penser a vérifier votre version de PHPUnit ( 3.4 conseillée ) ou le nommage de votre fichier.

Commandes utiles :

Pour lancer selenium-rc server ( après s’être placé dans le dossier contenant le .jar )

java -jar selenium-server.jar -interactive

Pour lancer Hudson ( via le fichier .war )

java -jar hudson.war --httpPort=8125
01

Activer le filtre Anti-Spam (Spam Assassin) sur Outlook 2007

Vous utilisez Outlook 2007 et vous ne supportez plus de recevoir des mails avec un sujet commençant par *****SPAM***** dans votre boite aux lettres ?

Voici la solution :)

Ouvrez Outlook.

Cliquez dans le menu du Haut sur « Outils » puis « Règles et alertes » :

Puis cliquer sur « Nouvelle règle »

Dans la fenêtre qui s’ouvre, dans le cadre « Etape 1 » cliquez sur « Déplacer les messages qui contiennent des mots spécifiques dans l’objet vers un dossier »

Puis dans le texte qui apparait en bas dans le cadre « Etape 2 » cliquez sur le lien « des mots spécifiques » , une fenêtre s’ouvre ajouter le texte *****SPAM***** dans la liste à l’aide du bouton « Ajouter » (attention au nombre d’étoiles) :

Une fois le texte Ajouter cliquez sur « OK » puis cliquez sur le lien « spécifié » de la première fenêtre afin de définir le dossier ou seront stockés les spams. Une autre fenêtre s’affiche. Sélectionnez « Courrier Indésirable » et faites « OK » :

Voici l’écran que vous devez avoir :

Faites « Suivant » jusqu’à arriver à cet écran, puis « Terminer« 

Votre règle Anti-Spam est maintenant en place. Désormais tous les mails ayant un sujet commençant par *****SPAM***** seront redirigés automatiquement dans le dossier Courrier indésirable.

Enjoy !

Internet et vie privée

Avec toutes ces nouvelles technologies, nous ne sommes plus tranquilles nulle part : les SmartPhones dans la poche, le GPS dans la voiture, la TV par internet, etc…La navigation sur Internet en est un exemple flagrant : qu’on le veuille ( surf avec un compte Google actif) ou non ( stockage dans des fichiers cookies ou sessions ).

Vous avez sûrement du entendre parler des cookies, ces fichiers de pistages, mais que sont-ils réellement ? Comment fonctionnent-ils ?

Première information très importante, ces petits fichiers sont stockés sur votre disque dur. Dans quel but ? Non pas de saturer votre disque ( tenter de remplir 1Téra-octet avec des cookies :) ), mais ils conservent des informations vous concernant. La nature de celles-ci dépend du site web ou du navigateur qui les a créées .On peut retrouver le stockage :

  • d’identifiants pour éviter à l’utilisateur de le retaper à chaque fois ( béni soit Big Brother :) )
  • d’informations sur l’âge de la personne. Ce site par exemple, traitant de vins pétillants, est obligé par la loi de vérifier l’âge de l’internaute. Celui-ci doit donc pour sa première navigation indiquer son âge. La seconde fois en l’occurrence, l’internaute n’est plus sollicité. Votre navigateur s’est donc chargé, sur initiative du site web, de stocker cette information.
  • pour le bon fonctionnement des paniers sur un site e-commerce : si j’effectue mes achats mais que je ne finalise pas ma commande et que je quitte le site, mon panier sera sauvegardé de part et d’autre :) (session sur le serveur hébergeant le site, identifiant de la session sur mon disque). Vous pouvez faire l’essai sur un site e-commerce comme celui-ci : Ami-2cv.

Une autre méthode un peu moins connue du grand public est le stockage de ces mêmes informations sur le serveur. Il faut donc pour la plupart des cas ( épargnons-nous l’enregistrement d’informations pour une adresse IP), que l’internaute soit identifié sur un service. Un exemple intéressant est le suivi du parcours des sites web effectué par Google : si vous êtes identifié sur votre compte Google (Gmail, Docs, ou autres ), les recherches que vous avez effectuées sont précieusement conservées. Vous pensez peut-être que je suis paranoïaque mais… Exemples :

  • En étant identifié sur deux ordinateurs différents, si j’effectue une recherche sur une machine et que je parcours les premières pages, celles-ci seront automatiquement classées comme vues sur la seconde machine (pas méchant, voir utile )
  • Si j’ouvre un mail via l’interface Gmail, les liens commerciaux présents sur la droite de l’écran, en analysant le contenu et le titre du mail, présentent des sujets très similaires au texte présent. N’oubliez pas que tous vos mails sont analysés (bien que non lus) à une étape ou une autre de leur parcour afin de prévenir les SPAM, de détecter les virus, de relever des mots indélicats « surveillés », etc…

Extrait de « A propos de Gmail » ( lien ) :

Google prend très au sérieux la confidentialité et votre confiance est essentielle pour nous. Les utilisateurs de Gmail doivent savoir que :

  1. Google ne communique aucun contenu d’e-mail ni aucune autre information personnelle aux annonceurs.
  2. Personne ne lit les e-mails dans le but de cibler les annonces ou les informations connexes proposées aux utilisateurs dans Gmail.
  3. Seules des annonces ciblées et discrètes, affichées à côté des messages, sont présentées aux utilisateurs de Gmail.

Or, si vous effectuez une recherche quelconque sur ce moteur de recherche et que plus tard vous tombez sur des publicités Google ciblées – sur des sites indépendant de Google – vous retrouvez les même sujets. Certes, la source reste Google, mais le contenu est bien présent sur ces sites ne relevant pas de Google.

Il y a des solutions. Ouf ! Par exemple, il est possible de refuser les cookies ou d’utiliser les modes de navigation privée des navigateurs. Mais beaucoup de sites ou services ne fonctionneront pas de manière satisfaisante si vous interdisez le stockage ou la transmission d’informations personnelles. Je vous laisse pour cela essayer les fonctionnalités Navigation Privée de Firefox ou le mode Incognito de Google Chrome ( c’est de l’ironie ? :) ), etc…