Cette procédure sera utile pour tout e-commerçant utilisant Prestashop et souhaitant mettre son site au propre de manière radicale. Elle peut être utiliser lors d’une mise à niveau importante (de 1.4 à 1.6 par exemple), suite à un hack de votre site et une altération de vos fichiers sources ou bien suite à de mauvaises manipulations.

Il est à noter que cette procédure demeure quasiment entièrement d’actualité lorsque vous souhaitez effectuer une mise à jour de Prestashop 1.6 vers 1.7.

Pré-requis :

  • Effectuer un back-up du FTP et de la base de données,
  • Mettre le site en maintenance,
  • Avoir les accès au serveur FTP et à phpMyAdmin à porté de doigts.
  • Copier et garder à disposition la COOKIE_KEY (présente dans le fichier /config/settings.inc.php)

 

1. Mettre la base de données à jour

Pour commencer, sur le site original, il faut mettre la base de données à jour si elle n’est pas déjà adaptée pour la version 1.6 de PrestaShop. Pour cela, il suffit d’utiliser OneClickUpgrade et de suivre les instructions.

 

2. Exporter les tables suivantes :

A l’aide de PhpMyAdmin, nous allons exporter les tables contenant les données qui nous intéressent.Une fois de plus, vous êtes responsable de votre base de données.

Les tables Customers :

  • ps_address
  • ps_customer
  • ps_customer_group
  • ps_customer_message
  • ps_customer_thread
  • ps_message
  • ps_message_readed

Les tables CMS

  • ps_cms
  • ps_cms_block
  • ps_cms_block_lang
  • ps_cms_block_page
  • ps_cms_block_shop
  • ps_cms_category
  • ps_cms_category_lang
  • ps_cms_category_shop
  • ps_cms_lang
  • ps_cms_role
  • ps_cms_role_lang
  • ps_cms_shop

Les tables Product attibut

  • ps_attribute
  • ps_attribute_group
  • ps_attribute_group_lang
  • ps_attribute_group_shop
  • ps_attribute_impact
  • ps_attribute_lang
  • ps_attribute_shop

Les tables Category

  • ps_category
  • ps_category_group
  • ps_category_lang
  • ps_category_product
  • ps_category_shop

Les tables Products

  • ps_product
  • ps_product_attachment
  • ps_product_attribute
  • ps_product_attribute_combination
  • ps_product_attribute_image
  • ps_product_attribute_shop
  • ps_product_carrier
  • ps_product_country_tax
  • ps_product_download
  • ps_product_group_reduction_cache
  • ps_product_lang
  • ps_product_sale
  • ps_product_shop
  • ps_product_supplier
  • ps_product_tag

Les tables Stock

  • ps_stock
  • ps_stock_available
  • ps_stock_mvt
  • ps_stock_mvt_reason
  • ps_stock_mvt_reason_lang

Les tables Cart (Panier)

  • ps_cart
  • ps_cart_cart_rule
  • ps_cart_product
  • ps_cart_rule
  • ps_cart_rule_country
  • ps_cart_rule_lang

Les tables Order (Commandes)

  • ps_orders
  • ps_order_carrier
  • ps_order_cart_rule
  • ps_order_detail
  • ps_order_detail_tax
  • ps_order_history
  • ps_order_invoice
  • ps_order_invoice_payment
  • ps_order_invoice_tax
  • ps_order_payment

Les tables Carrier (Transporteurs)

  • ps_carrier
  • ps_carrier_group
  • ps_carrier_lang
  • ps_carrier_shop
  • ps_carrier_tax_rules_group_shop
  • ps_carrier_zone
  • ps_range_price
  • ps_range_weight

Les tables Tax (Taxes)

  • ps_tax
  • ps_tax_lang
  • ps_tax_rule
  • ps_tax_rules_group
  • ps_tax_rules_group_shop

 

3. Faire une nouvelle installation de Prestashop (1.6 ou 1.7)

Après avoir exporté nos tables, il nous faut une nouvelle base de données pour la réception. Pour cela, nous allons installer un Prestashop tout propre après avoir supprimé l’ancien de notre serveur FTP ainsi que l’ancienne base de données (/!\ d’avoir effectué une sauvegarde au préalable). Après avoir installé la nouvelle version de PrestaShop, pensez à :

  • Mettre le site en maintenance,
  • Activer le mode « debug »,
  • Désactiver le cache,
  • Forcer la compilation Smarty.

4. Supprimer les tables correspondantes aux tables à importer dans la nouvelle base de données

Dans cette nouvelle base de données, nous reprenons la liste des tables que nous avons exportées et nous les supprimons. Cela nous permet ensuite de pouvoir importer nos tables originales tranquillement.

Voici donc la requête SQL à envoyer (attention, celle-ci est irréversible)

Attention : toute suppression est définitive !

5. Importer les nouvelles tables

Effectuer l’import des tables d’origine dans la nouvelle base de données. Si vous avez changé le préfixe des tables, vous pouvez utiliser ces requêtes SQL :

6. Transférer la COOKIE_KEY sur le nouveau site

Dans le fichier config/settings.inc.php de notre site original se trouve une constante appelée COOKIE_KEY. Nous allons copier celle-ci et l’insérer dans le fichier config/settings.inc.php à la place de la nouvelle clé.

Cela permet à Prestashop de comparer correctement les mots de passe des clients qui ont été cryptés en MD5 avec la COOKIE_KEY de notre site original.

NB : Cette manipulation rend notre compte administrateur inutilisable car ayant été crypté avec une nouvelle clé (celle de la nouvelle installation), notre mot de passe est maintenant en erreur. Pour corriger cela, il suffit de nous rendre sur la table ps_employee via phpMyAdmin, d’éditer l’entrée de notre compte, de copier la COOKIE_KEY dans le champ « password » et de la faire suivre directement avec notre nouveau mot de passe. On enregistre et nous avons de nouveau accès à l’administration de notre site.

7. Importer le dossier img/

Pour pouvoir afficher les images que nous avions sur notre site d’origine, il nous suffit de copier la totalité du dossier img/ sur la nouvelle installation. Il y a déjà un dossier de ce nom. Nous pouvons le renommer ou bien le compresser afin de l’avoir à disposition (ça peut servir).

8. Vérification du bon fonctionnement

Nous pouvons maintenant tester si le site fonctionne correctement. Nous allons essayer de créer un compte, de passer une commande, de nous connecter avec un ancien compte pour vérifier que la COOKIE_KEY est bien en place. Nous allons aussi vérifier le bon fonctionnement du Back-Office. Est-ce que nous voyons bien les anciennes commandes et tout les produits ?

Un problème que j’ai rencontré lors de cette procédure est un décalage entre l’ID de la catégorie principale (home) et l’ID de cette même catégorie sur la nouvelle installation. Le message d’erreur était « Root category must be an integer value ». La solution était alors de corriger l’ID de la catégorie principale dans la table « ps_shop ». Elle est à « 2 » sur les nouvelles installations de Prestashop mais dans notre cas (nous sommes passé de PS 1.6 à PS 1.7) l’ID de la catégorie « home » était égale à « 1 ».

9 Terminé !!

Il ne reste plus qu’à désactiver le mode maintenance ainsi que le mode « debug » et à reprendre la production là où elle avait été laissée.

J’espère que ce tutoriel vous aura été utile. Si vous souhaitez que nous nous occupions de votre mise à jour, contactez-nous !

 

error: Site protégé contre les copieurs !!
%d blogueurs aiment cette page :