This commit is contained in:
2026-04-14 20:38:04 +02:00
parent e65fb9ed66
commit c5d0a259c7
3 changed files with 69 additions and 25 deletions

View File

@@ -40,7 +40,6 @@
"modified": false "modified": false
}, },
"cache": {}, "cache": {},
"changelog": {},
"classes": {}, "classes": {},
"composer.lock": { "composer.lock": {
"type": "-", "type": "-",
@@ -130,7 +129,7 @@
}, },
"google-merchant_id-1.xml": { "google-merchant_id-1.xml": {
"type": "-", "type": "-",
"size": 18328316, "size": 18240601,
"lmtime": 0, "lmtime": 0,
"modified": true "modified": true
}, },

View File

@@ -4,19 +4,28 @@ $host = "localhost";
$db = "interblue_sklep"; $db = "interblue_sklep";
$user = "interblue_sklep"; $user = "interblue_sklep";
$pass = "2212+#++@pSVSb4"; $pass = "2212+#++@pSVSb4";
$prefix = "ps_"; // zmień jeśli masz inny prefix $prefix = "ps_"; // zmien jesli masz inny prefix
// Katalog docelowy // Katalog docelowy
$exportDir = __DIR__ . "/export_images"; $exportDir = __DIR__ . "/export_images";
if (!is_dir($exportDir)) { $exportDirWithEan = $exportDir . "/with_ean";
mkdir($exportDir, 0777, true); $exportDirWithoutEan = $exportDir . "/without_ean";
if (!is_dir($exportDirWithEan)) {
mkdir($exportDirWithEan, 0777, true);
} }
// Tryb testowy podaj EAN jednego produktu, np. "5901234567890" if (!is_dir($exportDirWithoutEan)) {
// Jeśli pusty, poleci dla wszystkich produktów mkdir($exportDirWithoutEan, 0777, true);
$testEan = ""; }
// Połączenie z DB // Tryb testowy - podaj EAN jednego produktu, np. "5901234567890"
// Jesli pusty, poleci dla wszystkich produktow
$testEan = "";
$batchSize = 100; // liczba produktow na jedno wykonanie
$refreshDelaySeconds = 1; // opoznienie odswiezania miedzy paczkami
// Polaczenie z DB
$pdo = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $user, $pass); $pdo = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $user, $pass);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
@@ -24,24 +33,56 @@ $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if ($testEan !== "") { if ($testEan !== "") {
$sql = "SELECT p.id_product, p.ean13 $sql = "SELECT p.id_product, p.ean13
FROM {$prefix}product p FROM {$prefix}product p
WHERE p.ean13 = :ean"; WHERE p.ean13 = :ean
ORDER BY p.id_product ASC";
$stmt = $pdo->prepare($sql); $stmt = $pdo->prepare($sql);
$stmt->execute(['ean' => $testEan]); $stmt->execute(['ean' => $testEan]);
$products = $stmt->fetchAll(PDO::FETCH_ASSOC); $products = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo "Tryb testowy eksportuję tylko produkt o EAN: {$testEan}\n<br>"; $hasMore = false;
$nextLastId = null;
echo "Tryb testowy - eksportuje tylko produkt o EAN: {$testEan}\n<br>";
} else { } else {
$lastId = isset($_GET['last_id']) ? (int)$_GET['last_id'] : 0;
if ($lastId < 0) {
$lastId = 0;
}
$sql = "SELECT p.id_product, p.ean13 $sql = "SELECT p.id_product, p.ean13
FROM {$prefix}product p FROM {$prefix}product p
WHERE p.ean13 IS NOT NULL AND p.ean13 <> ''"; WHERE p.id_product > :last_id
$products = $pdo->query($sql)->fetchAll(PDO::FETCH_ASSOC); ORDER BY p.id_product ASC
echo "Eksportuję wszystkie produkty\n<br>"; LIMIT :batch_size";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':last_id', $lastId, PDO::PARAM_INT);
$stmt->bindValue(':batch_size', $batchSize, PDO::PARAM_INT);
$stmt->execute();
$products = $stmt->fetchAll(PDO::FETCH_ASSOC);
$nextLastId = $lastId;
if (!empty($products)) {
$lastProduct = end($products);
$nextLastId = (int)$lastProduct['id_product'];
}
$sqlHasMore = "SELECT 1
FROM {$prefix}product p
WHERE p.id_product > :next_last_id
LIMIT 1";
$stmtHasMore = $pdo->prepare($sqlHasMore);
$stmtHasMore->execute(['next_last_id' => $nextLastId]);
$hasMore = (bool)$stmtHasMore->fetchColumn();
echo "Eksport paczki produktow (start po ID: {$lastId}, rozmiar: {$batchSize})\n<br>";
} }
foreach ($products as $prod) { foreach ($products as $prod) {
$ean = $prod['ean13']; $ean = trim((string)$prod['ean13']);
$id_product = (int)$prod['id_product']; $id_product = (int)$prod['id_product'];
$hasEan = $ean !== '';
$targetDir = $hasEan ? $exportDirWithEan : $exportDirWithoutEan;
$baseName = $hasEan ? $ean : "ID{$id_product}";
// Pobierz zdjęcia produktu // Pobierz zdjecia produktu
$sqlImg = "SELECT id_image $sqlImg = "SELECT id_image
FROM {$prefix}image FROM {$prefix}image
WHERE id_product = :id_product WHERE id_product = :id_product
@@ -51,7 +92,8 @@ foreach ($products as $prod) {
$images = $stmt->fetchAll(PDO::FETCH_ASSOC); $images = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (!$images) { if (!$images) {
echo "Brak zdjęć dla EAN: {$ean}\n<br>"; $label = $hasEan ? "EAN: {$ean}" : "ID: {$id_product}";
echo "Brak zdjec dla {$label}\n<br>";
continue; continue;
} }
@@ -59,12 +101,12 @@ foreach ($products as $prod) {
foreach ($images as $img) { foreach ($images as $img) {
$id_image = (int)$img['id_image']; $id_image = (int)$img['id_image'];
// Ścieżka do pliku (PrestaShop struktura katalogów np. 123 -> /1/2/3/123.jpg) // Sciezka do pliku (PrestaShop - struktura katalogow np. 123 -> /1/2/3/123.jpg)
$path = implode('/', str_split((string)$id_image)) . "/" . $id_image . ".jpg"; $path = implode('/', str_split((string)$id_image)) . "/" . $id_image . ".jpg";
$src = __DIR__ . "/img/p/" . $path; $src = __DIR__ . "/img/p/" . $path;
if (file_exists($src)) { if (file_exists($src)) {
$dest = $exportDir . "/" . $ean . "_" . $i . ".jpg"; $dest = $targetDir . "/" . $baseName . "_" . $i . ".jpg";
copy($src, $dest); copy($src, $dest);
echo "Zapisano: $dest\n<br>"; echo "Zapisano: $dest\n<br>";
} else { } else {
@@ -74,5 +116,12 @@ foreach ($products as $prod) {
} }
} }
echo "✅ Eksport zakończony.\n<br>"; if ($testEan === "" && $hasMore) {
?> $self = htmlspecialchars($_SERVER['PHP_SELF'], ENT_QUOTES, 'UTF-8');
$nextUrl = $self . '?last_id=' . $nextLastId;
echo "Paczka zakonczona. Nastepna paczka startuje za {$refreshDelaySeconds}s... (last_id={$nextLastId})\n<br>";
echo "<meta http-equiv=\"refresh\" content=\"{$refreshDelaySeconds};url={$nextUrl}\">";
} else {
echo "Eksport zakonczony.\n<br>";
}
?>

View File

@@ -1,4 +0,0 @@
[ViewState]
Mode=
Vid=
FolderType=NotSpecified