Importer CSV kategorii i produktów do PrestaShop

Importer kategorii

<?php
try {
    $db_server = 'localhost';
    $db_name = 'localhost';
    $db_user = 'localhost';
    $db_passwd = 'localhost';
 
    $db_pdo = new PDO(
        "mysql:host=$db_server;dbname=$db_name",
        $db_user,
        $db_passwd,
        [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"]
    );
 
    $db_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 
    # wyciągniecie kategorii głównych
    $wynik = $db_pdo->query("
    SELECT id, rozmiar, vat
    FROM oferta
    WHERE towar IS NULL AND vat = 0
    ORDER BY id ASC;");
 
    while ($wiersz = $wynik->fetch()) {
        $tablicaGlowneKat[] = $wiersz;
    }    
 
    // print_r($tablicaGlowneKat);
 
    # lepsza widoczność
    // $rekordy = count($tablicaGlowneKat);
    // for ($i = 0; $i < $rekordy; $i++) {
    //     printf("%d\t%s".PHP_EOL, $tablicaGlowneKat[$i]['id'], $tablicaGlowneKat[$i]['rozmiar']);
    // }
 
    # drukowanie kategorii pod plik CSV
    $wynik = $db_pdo->query("
    SELECT id, rozmiar, vat, tresckat
    FROM oferta
    WHERE towar IS NULL
    ORDER BY id ASC;");
 
    print "ID;NAZWA;PARENT CATEGORY;DESCRIPTION".PHP_EOL;
 
    while ($wiersz = $wynik->fetch()) {
 
        if ($wiersz['vat'] == 0) {
            $wiersz['vat'] = NULL;
        }
 
        # podmiana ID na nazwy kategorii
        foreach ($tablicaGlowneKat as $pozycja) {
            if ($wiersz['vat'] == $pozycja['id']) {
                $wiersz['vat'] = $pozycja['rozmiar'];
            }
        }
 
        # formatowanie opisu
        $szukaj = array('&oacute;', '&nbsp;', ';');
        $zamien = array('ó', ' ', '');
        $opis = str_replace($szukaj, $zamien, $wiersz['tresckat']);
        $opis = preg_replace("/\r|\n/", "", $opis);
 
        $szukaj = array('<b>', '</b>', ',');
        $zamien = array('', '', ' ');
        $kat = str_replace($szukaj, $zamien, $wiersz['rozmiar']);
        $katGlowna = str_replace($szukaj, $zamien,$wiersz['vat']);
 
        $kat = trim($kat);
        $katGlowna = trim($katGlowna);
 
        printf("%d;%s;%s;%s".PHP_EOL, $wiersz['id'], $kat, $katGlowna, $opis);
    }
 
    $db_pdo = NULL;
} catch (PDOException $e) {
    print "Błąd: ".$e->getMessage();
    die();
}

Importer produktów

<?php
try {
    $db_server = 'localhost';
    $db_name = 'localhost';
    $db_user = 'localhost';
    $db_passwd = 'localhost';
 
    $db_pdo = new PDO(
        "mysql:host=$db_server;dbname=$db_name",
        $db_user,
        $db_passwd,
        [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"]
    );
 
    $db_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
 
    #wyciągnięcie kategorii
    $wynik = $db_pdo->query("
    SELECT id, rozmiar
    FROM oferta
    WHERE towar IS NULL
    ORDER BY id ASC;");
 
    while ($katWiersz = $wynik->fetch()) {
        $kat[] = $katWiersz;
    }
 
    # wyciągniecie produktów
    # towar - tytuł
    # tresc - opis prod
    # cena
    # wartoscir - kategorie
    # tak - (nie)dostępny 0|1
    # zdjęcia z katalogu /img1
    $wynik = $db_pdo->query("
    SELECT id, towar, tresc, cena, wartoscir, tak
    FROM oferta
    WHERE kategoria2 = 'sta' OR kategoria2 = 'pro'");
 
    print "ID;TYTUŁ;OPIS;CENA;AKTYWNY;ZDJECIA;KATEGORIE".PHP_EOL;
 
    while ($wiersz = $wynik->fetch()) {
 
        $katProd = explode(' ', $wiersz['wartoscir']);
 
        # formatowanie opisu
        $szukaj = array('&oacute;', '&nbsp;', ';');
        $zamien = array('ó', ' ', '');
        $opis = str_replace($szukaj, $zamien, $wiersz['tresc']);
        $opis = preg_replace("/\r|\n/", "", $opis);
 
        # drukowanie rekordów
        print $wiersz['id'].";";
        print $wiersz['towar'].";";
        print $opis.";";
        print $wiersz['cena'].";";
 
        if ($wiersz['tak'] == 'tak') {
            $dostepny = 1;
        } else {
            $dostepny = 0;
        }
        print $dostepny.";";
 
        $urlRoot = "https://www.galanteria-drewniana.com/img1/";
        $tabUrl = [$urlRoot.$wiersz['id'].".jpg",$urlRoot.$wiersz['id'].".m.jpg",$urlRoot.$wiersz['id'].".a.jpg"];
 
        foreach ($tabUrl as $url) {
            $headers = @get_headers($url);
            if ($headers && strpos( $headers[0], '200')) {
                print $url.",";
            }
        }
        print ";";
 
        # formatowanie kategorii
        $szukaj = array('<b>', '</b>', ',');
        $zamien = array('', '', ' ');
 
        # podmiana ID na nazwy kategorii
        foreach ($katProd as $pozycja) {  
            foreach ($kat as $katWiersz) {
                if ($pozycja == $katWiersz['id']) {
                    $pozycja = $katWiersz['rozmiar'];
                    $pozycja = str_replace($szukaj, $zamien, $pozycja);
                    print $pozycja.",";
                }
            }
        }
        print PHP_EOL;
    }    
    $db_pdo = NULL;
 
} catch (PDOException $e) {
    print "Błąd: ".$e->getMessage();
    die();
}

Uruchomienie importerów
php kategorie.php > kategorie.csv
php produkty.php > produkty.csv

Zastosowanie: 

Importer kategorii i produktów z autotrskiego sklepu do plików CSV do PrestaShop

Wiedza: 
Praktyczna