e-commerce

screenshot_003

Ajout de boutons « Précédent » et « Suivant » sur la fiche produit Magento

Une fonctionnalité très utile mais qui manque à la version Community de Magento est la possibilité d’ajouter des boutons de navigation « Précédent » et « Suivant » entre les produits d’une même catégorie.
Il existe évidemment des extensions qui permettent d’implémenter cette possibilité mais elles sont payantes, c’est pourquoi voici une méthode simple et surtout gratuite pour mettre en place ce système.

  1. En premier lieu, ouvrez le fichier ./app/design/frontend/votre_interface/votre_theme/template/catalog/product/view.phtml
  2. Ajoutez le code suivant juste après les commentaires Magento :
    <?php
    $_helper = $this->helper('catalog/output');
    $_product = $this->getProduct();
    /**
    * Determine les liens précédents/suivants et le lien vers la categorie parente
    */
    $_ccats = $this->helper('catalog/data')->getProduct()->getCategoryIds();
    $_ccat = Mage::getModel('catalog/category')->load($_ccats[0]);
    $ppos = $_ccat->getProductsPosition();
    arsort($ppos);
    $current_pid  = $this->helper('catalog/data')->getProduct()->getId();
    // Déclaration d'un tableau contenant les positions
    $plist = array();
    foreach ($ppos as $pid => $pos) {
    $plist[] = $pid;
    }
    sort($plist);
    $curpos   = array_search($current_pid, $plist);
    // Obtenir le lien du produit suivant
    $previd   = isset($plist[$curpos+1])? $plist[$curpos+1] : $current_pid;
    $product  = Mage::getModel('catalog/product')->load($previd);
    $prevpos  = $curpos;
    while (!$product->isVisibleInSiteVisibility()) {
    $prevpos += 1;
    $nextid   = isset($plist[$prevpos])? $plist[$prevpos] : $current_pid;
    $product  = Mage::getModel('catalog/product')->load($nextid);
    }
    $next_url = $product->getProductUrl();
    // Obtenir le lien du produit précédent
    $nextid   = isset($plist[$curpos-1])? $plist[$curpos-1] : $current_pid;
    $product  = Mage::getModel('catalog/product')->load($nextid);
    $nextpos  = $curpos;
    while (!$product->isVisibleInSiteVisibility()) {
    $nextpos -= 1;
    $nextid   = isset($plist[$nextpos])? $plist[$nextpos] : $current_pid;
    $product  = Mage::getModel('catalog/product')->load($nextid);
    }
    $prev_url = $product->getProductUrl();
    // Obtenir le lien de la catégorie
    $more_url = $_ccat->getUrl();
    ?>
  3. Une fois ce code ajouté, trouvez les lignes suivants :
    <div>
    <input type="hidden" name="product" value="<?php echo $_product->getId() ?>" />
    <input type="hidden" name="related_product" id="related-products-field" value="" />
    </div>

    Et ajoutez le code suivant en dessous de celles-ci :
    <div>
    <table cellspacing="0" border="0" width="100%">
    <tr>
    <td style="text-align:left;"> <a href="<?= $prev_url; ?>"><?php if ("http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] <> $prev_url) echo $this->__('←  Précedent') ?></a></td>
    <td style="text-align:center;"> <a href="<?= $more_url; ?>"><?php echo $this->__('Catégorie') ?></a></td>
    <td style="text-align:right;"> <a href="<?= $next_url; ?>"><?php if ("http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'] <> $next_url) echo $this->__('Suivant →') ?></a></td>
    </tr>
    </table>
    </div>
  4. Vous disposez désormais de trois liens vous permettant de naviguer à travers les produits d’une même catégorie.

Voici un petit exemple du résultat obtenu sur le site e-commerce Magento Médias Aviron (NB : le lien vers la catégorie parente a été désactivée sur ce site) :

  • Si vous vous trouvez au premier (dernier) produit d’une catégorie, le lien « Précédent » (« Suivant ») n’apparaît pas :
  • Sinon, les deux apparaissent :

En espérant que ce petit tutoriel vous servira pour améliorer votre site e-commerce Magento.

error

Résoudre l’erreur de permissions sur Magento Connect

Sous Magento, il arrive parfois que lorsque vous souhaitez installer une extension ou mettre à jour vos extensions actuelles, que vous rencontriez l’erreur suivante :

Ce problème est récurrent et sans l’installation d’extensions, Magento perd tous ses avantages, mais heureusement pour nous, il est très simple à résoudre.

Avant de vous expliquer le « comment », je vais vous expliquer le « pourquoi » : Magento Connect a besoin de certaines permissions d’écriture sur certains dossiers et fichiers du webroot de votre site Magento dans le but d’installer de nouvelles extensions ou même lorsqu’il s’agit de mettre à jour votre logiciel vers une nouvelle version.

Nous allons donc changer les permissions de certains dossiers afin de résoudre le problème. Pour ce faire, utilisez un client FTP (nous vous recommandons Filezilla) ou un client SSH (Putty par exemple).

Voici la démarche à suivre en utilisant un client SSH : une fois connecté à votre compte SSH, exécutez les commandes suivantes :

  • cd <votre_dossier_contenant_votre_magento>;
  • find . -type d -exec chmod 777 {} \;
  • chmod 666 downloader/config.ini ;

Normalement, vous devriez être désormais capable d’accéder à Magento Connect. Une fois que vous avez terminé votre installation/mise à jour, vous devez remettre les droits initiaux pour empêcher qu’une personne mal intentionnée installe des scripts ou des fichiers malveillants. Exécutez donc les commandes suivantes :

  • find . -type d -exec chmod 755 {} \ ;
  • find . -type f -exec chmod 644 {} \ ;
  • chmod o+w var media app/etc/use_cache.ser ;

C’est terminée, vous êtes désormais capable de vous connecter au Magento Connect Manager comme bon vous semble.

En espérant que cette petite astuce vous sera utile.

Export base Magento

Transfert d’un site Magento d’une installation locale à un serveur distant

Nous l’avons remarqué récemment, le transfert d’un site Magento (de local à serveur ou même de serveur à serveur) est loin d’être une partie de plaisir.

Pour vous éviter les bugs étranges (disparation de produits dans le front-office) et vous faire gagner du temps, voici la démarche à suivre pour transférer de manière propre une boutique Magento :

  1. Tout d’abord, rendez-vous sur l’interface phpMyAdmin du serveur où se trouve votre base de données Magento et exporter votre base dans un fichier SQL. Dans les options, pensez à cocher « Désactiver la vérification des clés étrangères » :Export base Magento
  2. Une fois l’export terminé, vous allez devoir importer cette base sur votre serveur distant en utilisant l’interface phpMyAdmin : Import Base Magento
  3. Normalement l’import devrait se dérouler sans erreur. Désormais, il vous faut modifier deux champs de la table core_config_data : le web/unsecure/base_url et le web/secure/base_url : Modifications core_config_dataEt remplacez la valeur de la colonne value par l’url du site où va être implanter votre site Magento : Changements des secure url et unsecure url
  4. Le paramétrage de votre base de données maintenant terminé, vous pouvez transférer les fichiers de votre site Magento vers le repertoire distant de votre futur site. Une fois les fichiers transférés, il vous faut supprimer le fichier suivant : /app/etc/local.xml ce fichier contient toutes les informations de la base de données de votre site que vous renseignez lors de l’installation de Magento, ainsi que le contenu des dossiers /var/cache, /var/report et /var/session qui contiennent respectivement les données stockées en cache, les rapports d’erreur et les rapports de connexion utilisateur.
  5. Soyez certain que tous les fichiers ont été transférés, il vous faut maintenant changer les droits sur les fichiers de la façon suivante : 705 sur l’ensemble et 777 sur /var et /media.
  6. Une fois les droits modifiés, rendez-vous à l’adresse de votre site et installez Magento en renseignant bien les informations de la base de données distante. L’installation terminée, tout devrait fonctionner.
  7. Enfin, et afin de prévenir les problèmes lors de l’installation d’extension, il vous faut supprimer le fichier /downloader/pearlib/pear.ini. En effet, ce fichier contient l’URL en dur de votre première installation et ainsi, lorsque vous tenterez d’installer des extensions, Magento tentera de les installer sur votre première site (donc votre installation locale). Une fois ce fichier supprimé, il vous faut le recréer. Pour se faire, rendez vous sur le downloader (http://www.votresite.com/downloader), cliquez sur l’onglet « Settings » et changer votre « Prefered State » puis Sauvegardez. Votre fichier pear.ini a été recréé.
  8. Il est conseillé de vérifier dans le dossier downloader/pearlib qu’il ne reste pas d’adresse de dossier en dur. Utilisez la commande [  grep -rl "machaine" . ] pour lister les fichiers contenant la chaîne recherchée. Il est possible d’en trouver dans pearlib/pear et pearlib/pecl .

En espérant que ce petit tutoriel vous aura servi.

Besoin de vitesse sous Magento ?

Comme certains d’entre vous ont sûrement pû le contaster, une des plus grandes faiblesses de Magento est son temps de chargement des pages de votre site.

Après quelques recherches, il est possible, suivant la configuration de votre serveur, d’augmenter la vitesse de chargement de vos pages de plus de 200% !

Pour bénéficier de ce gain de vitesse, tout se passe dans le fichier .htaccess se trouvant à la racine de votre boutique e-commerce, l’astuce consistant à activer la compression Gzip en modifiant un peu ce fichier.

Je ne vais pas vous faire attendre plus longtemps et vous expliquer comment faire tout de suite.

  • Ouvrez donc votre fichier .htaccess et cherchez les lignes suivantes :
############################################
## enable apache served files compression
## http://developer.yahoo.com/performance/rules.html#gzip
# Insert filter on all content
###SetOutputFilter DEFLATE

# Insert filter on selected content types only
#AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
# Netscape 4.x has some problems…
# BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
# BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# Don’t compress images
# SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
# Make sure proxies don’t deliver the wrong content
# Header append Vary User-Agent env=!dont-vary

Si vous êtes un peu anglophone (et j’espère que vous l’êtes), vous comprendrez que ces lignes commentées permettent d’activer la compression des fichiers sur votre serveur Apache.

  • Il ne reste plus qu’à décommenter certaines lignes et ajouter la ligne suivante :
# enable resulting html compression
 php_flag zlib.output_compression on
  • Normalement, vous devriez obtenir ceci :
############################################
## enable apache served files compression
## http://developer.yahoo.com/performance/rules.html#gzip
# Insert filter on all content
SetOutputFilter DEFLATE

# Insert filter on selected content types only
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript
# Netscape 4.x has some problems…
BrowserMatch ^Mozilla/4 gzip-only-text/html
# Netscape 4.06-4.08 have some more problems
BrowserMatch ^Mozilla/4\.0[678] no-gzip
# MSIE masquerades as Netscape, but it is fine
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html

# Don’t compress images
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
# Make sure proxies don’t deliver the wrong content
Header append Vary User-Agent env=!dont-vary
# enable resulting html compression
php_flag zlib.output_compression on
  • N’oubliez pas d’enregistrer votre fichier .htaccess et de l’uploader sur votre serveur si vous voulez apprécier les changements.

Vous pouvez tester la rapidité en utilisant un site de test de vitesse de chargement des sites comme celui-ci

Les résultats vont de 25% à 225% de gain de vitesse et dépendent principalement de la configuration du serveur.

Bonne optimisation à toutes et à tous.

Source : inchoo.net