Domanda

Ho bisogno di aggiornare il prezzo speciale da un file CSV (che mi dice lo SKU, il prezzo speciale, la data / A dalla data).

Al momento lo faccio usando il metodo dei modelli Magento come questo (dopo aver analizzato le righe CSV) in un ciclo Foreach:

$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;
.

Va bene quando una manciata di un prodotto ha bisogno di aggiornamento. Tuttavia, quando aggiorni oltre 100 prodotti, questo diventa incredibilmente lento e colpisce anche le prestazioni del sito.

C'è comunque posso importare in massa prezzo speciale e impostare anche le date tramite una query SQL diretta?


.

Semplicemente la ricerca di questo problema, ho trovato una soluzione possibile (basata su questo articolo http://fishpig.co.uk/magento/tutorials/update-prices-sql ) con Impostazione special_price nel database direttamente come questo:

Nota: BD _ è il mio prefisso tabella

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
.

Questo appare per funzionare (posso vedere il valore in Magento UI aggiornato). Non sono ancora sicuro se questo è il modo corretto per effettuare direttamente il prezzo speciale nel database.

Inoltre, non ho ancora elaborato come impostare le date from / to.

Qualsiasi aiuto su questo sarà molto apprezzato.

È stato utile?

Soluzione

Diciamo che $storeId è il negozio per il quale si desidera aggiornare il prezzo $specialPrice è il tuo prezzo speciale, $sku è il tuo prodotto SKU, $fromDate e $toDate sono ... Bene, ottieni l'idea.

Ora esegui questo codice:

$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
    );
}
.

Altri suggerimenti

Se si desidera aggiornare i prodotti esistenti, non è necessario eseguire modifiche manualmente.Importa CSV che dovrebbe contenere solo quei attributi come colonne che sono necessarie per aggiornare.Sku è il campo richiesto quindi non dimenticare di includerlo nel tuo CSV.

Importerà prodotti molto veloci.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top