Programmgesteuerte Aktualisierung der Preise für Produkte mithilfe einer CSV-Datei
-
12-12-2019 - |
Frage
Meine Frage ist zu Beginn etwas umfassender, aber ich werde später detaillierter darauf eingehen.Ich habe etwa 3000 Produkte, bei denen ich die SKUs und Preise in einer CSV-Datei habe.Nun haben sich die Preise kürzlich geändert und ich möchte diese Preise der Produkte hochladen/aktualisieren.Gibt es eine schnelle Möglichkeit, dies über ein Skript mithilfe der SOAP-API zu tun?
Oder gibt es einen einfacheren Weg, dies zu umgehen?
AKTUALISIERENIch habe diese Funktion genutzt http://www.blog.magepsycho.com/updating-product-prices-in-magento-in-easier-faster-way/ aber jetzt stimmen Wert und Preis nicht überein.Gibt es bessere Möglichkeiten, eine CSV-Datei durchzugehen und dann die Preise für jede SKU einem Preis zuzuordnen?
Lösung
Ich glaube nicht, dass Sie mit den SOAP-Diensten schnell das bekommen, was Sie brauchen.Ich meine, es wird wahrscheinlich funktionieren, aber für 3K-Produkte wird es sehr langsam sein.
Versuchen Sie stattdessen dieses Skript.
Nehmen wir an, Ihre CSV-Datei hat zwei Spalten.Artikelnummer und Preis.
$skuIndex = 0;
$priceIndex = 1;
$csv = 'path/to/file.csv';
$io = new Varien_Io_File();
//an array to keep the products by price
$productIdsByPrice = array();
//a product model instance
$productModel = Mage::getSingleton('catalog/product');
//read the csv
$io->streamOpen($csv, 'r+');
while($csvData = $io->streamReadCsv()){
if (count($csvData) < 2) { //skip rows with less than 2 columns
continue;
}
$sku = trim($csvData[$skuIndex]);
//get the product id by sku
$id = $productModel->getIdBySku($sku);
if ($id) {
//if the id exists then mark it for update
$price = trim($csvData[$priceIndex]);
if (!isset($productIdsByPrice[$price])) {
$productIdsByPrice[$price] = array();
}
$productIdsByPrice[$price][] = $id;
}
}
//now you should have the product ids you need to update grouped by price
//just do the fast update
foreach ($productIdsByPrice as $price => $ids) {
Mage::getSingleton('catalog/product_action')->updateAttributes(
$ids, //what products to update
array('price' => $price), //what attributes to update
0 //store id for update
)
}
Sie können diesen Code in einem Ihrer benutzerdefinierten Modelle oder Helfer platzieren und ihn dann ausführen.Möglicherweise möchten Sie den Code noch einmal überprüfen.Ich habe es nicht getestet.Sichern Sie auch Ihre Datenbank.
[BEARBEITEN]
Wenn Sie dies aus einer Datei ausführen, erstellen Sie eine Datei mit dem Namen price_update.php
auf dem gleichen Niveau wie index.php
und füge Folgendes hinzu:
<?php
error_reporting(E_ALL | E_STRICT);
define('MAGENTO_ROOT', getcwd());
$mageFilename = MAGENTO_ROOT . '/app/Mage.php';
require_once $mageFilename;
Mage::setIsDeveloperMode(true);
ini_set('display_errors', 1);
umask(0);
Mage::app();
Fügen Sie anschließend den Code von oben hinzu, der die CSV-Datei analysiert, und rufen Sie Ihren Browser auf MAGE_ROOT/price_update.php
.
Andere Tipps
erstellt Verfügbarkeit, Preis, Kosten CSV-Updater. Interessiert an Entwicklungs- oder Beitrags, also veröffentlichen Sie es hier.
http://lycenok.com/magento-extensions/magento-csv-product-uphater.html https://github.com/lycenok/magento_csv_product_updater
Grüße, Eugene.
update: Erinnern Sie sich an die einfache Lösung, die in Magento selbst implementiert ist.
System -> Import / Export -> "DataFlow - Profile"