Frage

Ich muss den Sonderpreis aus einer CSV-Datei massenhaft aktualisieren (die mir die SKU, den Sonderpreis und das Bis-/Von-Datum mitteilt).

Im Moment mache ich es mit der Magento-Modellmethode wie dieser (nach dem Parsen der CSV-Zeilen) in einer foreach-Schleife:

$p = Mage::getModel('catalog/product');
$product_id = $p->getIdBySku($product['SKU']);
if (!$product_id) {
    throw new Exception('Product Does Not Exists');
}
$p->setStoreId($store_id)->load($product_id);
$p->setSpecialPrice(floatval($product['Price']));
$p->setSpecialFromDate($product['FromDate']);
$p->setSpecialFromDateIsFormated(true);
$p->setSpecialToDate($product['ToDate']);
$p->setSpecialToDateIsFormated(true);
$p->save();
$p = null;

Dies ist in Ordnung, wenn eine Handvoll Produkte aktualisiert werden müssen.Wenn Sie jedoch mehr als 100 Produkte aktualisieren, wird dies unglaublich langsam und beeinträchtigt auch die Leistung der Website.

Gibt es überhaupt eine Möglichkeit, einen Massenimport von Sonderpreisen durchzuführen und die Daten auch über eine direkte SQL-Abfrage festzulegen?


Bei der Recherche zu diesem Problem habe ich eine mögliche Lösung gefunden (basierend auf diesem Artikel). http://fishpig.co.uk/magento/tutorials/update-prices-sql) mit der Einstellung special_price in der Datenbank direkt so:

Notiz: bd_ ist mein Tabellenpräfix

UPDATE bd_catalog_product_entity AS CPE
INNER JOIN bd_catalog_product_entity_decimal AS CPED ON CPED.entity_id = CPE.entity_id
SET CPED.`value` = 2.99 -- New Special Price
WHERE
    CPED.attribute_id = (
        SELECT
            attribute_id
        FROM
            bd_eav_attribute eav
        WHERE
            eav.entity_type_id = 4
        AND eav.attribute_code = 'special_price'
    )
AND CPED.store_id = 1   -- Retail Store
AND CPE.sku = 'ABS049'  -- Sku Being Updated

Das erscheint zu funktionieren (ich kann sehen, dass der Wert in der Magento-Benutzeroberfläche aktualisiert wurde).Ich bin mir noch nicht sicher, ob dies der richtige Weg ist, den Sonderpreis direkt in der Datenbank festzulegen.

Außerdem habe ich noch nicht herausgefunden, wie ich das einstellen soll from/to Termine.

Jede Hilfe hierzu wird sehr geschätzt.

War es hilfreich?

Lösung

Sagen wir das $storeId ist das Geschäft, für das Sie den Preis aktualisieren möchten $specialPrice ist Ihr Sonderpreis, $sku ist Ihre Produkt-SKU, $fromDate Und $toDate sind ... nun, Sie verstehen, worauf es ankommt.

Führen Sie nun diesen Code aus:

$id = Mage::getSingleton('catalog/product')->getIdBySku($sku);
if ($id) {
    Mage::getSingleton('catalog/product_action')->updateAttributes(
        array($id), //array with ids to update
        array( //array with attributes to update
            'special_price' => $specialPrice,
            'special_from_date' => $fromDate,
            'special_to_date' => $toDate,
        ),
        $storeId //store id to update. If you want to update the global value use 0 in here
    );
}

Andere Tipps

Wenn Sie vorhandene Produkte aktualisieren möchten, müssen Sie keine Änderungen manuell vornehmen.Importieren Sie einfach eine CSV-Datei, die nur die Attribute als Spalten enthalten sollte, die zur Aktualisierung benötigt werden.SKU ist ein Pflichtfeld. Vergessen Sie also nicht, dies in Ihre CSV-Datei aufzunehmen.

Es wird Produkte sehr schnell importieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top