Jump to content

Modifier la quantité d'un produit via un fichier CSV


Recommended Posts

Bonjour, je souhaite modifier la quantité de mes produits en passant via un fichier csv classique. Je ne veux pas faire cette opération via le back office mais en créant un module personnalisé, et en suivant plusieurs topics içi, sur stackoverflow et internet, j'ai arrivé à quelque chose qui DEVRAIT fonctionner, mais il me manque certainement quelque chose, un petit truc à côté duquel je suis passé et j'aimerais bien un avis extérieur pour m'aider la dessus ! D'ailleurs j'appelle cela un module, mais il n'en a pas du tout la structure, peut être faut-il accrocher cela à un hook ou bien insérer une fonction install, néanmoins je n'en ai pas l'impression. Voici mon code :

 

<?php

require 'config/config.inc.php';
$files = '/modules/flux/';

$files = glob($files . '*.csv', GLOB_NOSORT);

    if (sizeof($files)) {

        //Tri par ordre de création
        usort($files, function ($a, $b) {
            //filemtime lit la date à laquelle le fichier a été
            //modifié la dernière fois
        return filemtime($a) < filemtime($b);
        });

        for ($i = 0; $i < sizeof($files); $i++) {
            //de 0 jusqu'au nombre de lignes dans le fichier csv

        $fileName = basename($files[$i]);
        // On traite uniquement le fichier le + récent
        if ($i == 0) {

        if (($handle = fopen($files[$i], "r")) !== FALSE) {
            //mode r ouvre en lecture seule et place le pointeur de fichier au début du fichier
            $j = 0;
            while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
                //On ne traite pas la première ligne qui contient les entêtes
                if ($j > 0) {

                    //Récupération des informations de la déclinaison à partir de sa référence
                    $productData = Db::getInstance()->getRow(
                        "SELECT id_product,id_product_attribute
                            FROM préfixeDeMaBase_product_attribute
                            WHERE reference ='" . $data[0] . "'");

                    //Mise à jour des stocks
                    if ($productData) {
                        echo 'Mise à jour référence :' . $data[0] . ' - quantité ' . $data[1] . " - id_product " . $productData['id_product'] . " id_product_attribute " . $productData['id_product_attribute'] . "<br />";
                        StockAvailable::setQuantity($productData['id_product'], $productData['id_product_attribute'], $data[1]);
                    } else {
                        echo 'Erreur : Référence ' . $data[0] . ' non présente sur le site ' . "<br />";
                    }
                }
                $j++;
            }
            fclose($handle);}
        }
        }
    }

et mon fichier csv de test très simple (les références correspondent bien à des produits en base)

 

reference;quantity
demo_21;8
demo_14;8
demo_10;8
demo_9;8
demo_8;8

 

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...