Comment réinitialiser les identifiants produits sur PrestaShop 1.7 avant la mise en production ?

Ce tutoriel est valable uniquement pour les boutiques PrestaShop qui ne contiennent encore aucune commande.

Pensez à faire une sauvegarde complète de votre base de données.

1) Liste des tables:

Voici les différentes tables qui contiennent potentiellement l’identifiant produit :

  • ps_category_product
  • ps_image
  • ps_image_shop
  • ps_log
  • ps_product
  • ps_product_shop
  • ps_product_lang
  • ps_specific_price
  • ps_specific_price_priority
  • ps_stock_available
  • ps_search_index
  • ps_search_word

2) Écriture du code en php

Nous allons créer un fichier PHP permettant de modifier directement la base de données en utilisant MySQLI.
Créez un fichier qui se nomme UpdateProducts.php et placez-le à la racine de votre boutique PrestaShop et copiez le contenu suivant (Pensez à modifier les informations de la base de données) :

<?php

// Info Connexion base de données
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "databasename";

// Création de la connexion
$conn = new mysqli($servername, $username, $password, $dbname);
$query = "SELECT * FROM `ps_product`";
$ind = 1;

if ($result = $conn->query($query)) {
    // Récupère un tableau associatif
    while ($row = $result->fetch_assoc()) {
        $tabProducts[] = $row['id_product'];
    }
}

//On parcourt le tableau pour modifier tous les produits
foreach ($tabProducts as $productId) {
//Requête multiple
    $sql  = "UPDATE `ps_product_shop` SET `id_product` = $ind WHERE `id_product` = $productId;";
    $sql .= "UPDATE `ps_product_lang` SET `id_product` = $ind WHERE `id_product` = $productId;";
    $sql .= "UPDATE `ps_category_product` SET `id_product` = $ind WHERE `id_product` = $productId;";
    $sql .= "UPDATE `ps_image` SET `id_product` = $ind WHERE `id_product` = $productId;";
    $sql .= "UPDATE `ps_image_shop` SET `id_product` = $ind WHERE `id_product` = $productId;";
    $sql .= "UPDATE `ps_specific_price` SET `id_product` = $ind WHERE `id_product` = $productId;";
    $sql .= "UPDATE `ps_specific_price_priority` SET `id_product` = $ind WHERE `id_product` = $productId;";
    $sql .= "UPDATE `ps_stock_available` SET `id_product` = $ind WHERE `id_product` = $productId;";
    $sql .= "UPDATE `ps_product` SET `id_product` = $ind WHERE `id_product` = $productId;";

    //Exécution de la requête multiple
    if (mysqli_multi_query($conn, $sql)) {
        do {
            if ($result = mysqli_store_result($conn)) {
                mysqli_free_result($result);
            }
        } while (mysqli_more_results($conn) && mysqli_next_result($conn));
    }
    $ind = $ind + 1;
}

// Fermeture de la connexion
$conn->close();

3) Modification de la base de données

Appelez le fichier dans l’url : http://votreboutique/ UpdateProducts.php

4) On efface les logs et l’historique des recherches

Vous pouvez également vider les tables ps_search_index, ps_search_word et ps_log (non obligatoire).

5) Réinitialisation de l’auto-increment

Dans la base de données pensez à passer l’auto-incrément à 1 pour la table ps_product. (Pour phpMyAdmin à cliquez sur la table puis sur opération puis renseignez 1 dans la valeur auto incrément et enregistrez.)

Vérifiez maintenant l’identifiant des produits et contrôlez si les produits s’affichent correctement sur votre boutique et que la catégorie est correcte.

Derniers articles