update
This commit is contained in:
3
.vscode/ftp-kr.sync.cache.json
vendored
3
.vscode/ftp-kr.sync.cache.json
vendored
@@ -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
|
||||||
},
|
},
|
||||||
|
|||||||
87
export.php
87
export.php
@@ -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>";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
[ViewState]
|
|
||||||
Mode=
|
|
||||||
Vid=
|
|
||||||
FolderType=NotSpecified
|
|
||||||
Reference in New Issue
Block a user