Question

Je dois mettre à jour en masse le prix spécial à partir d'un fichier CSV (qui m'indique le SKU, le prix spécial, la date de/à partir de).

Pour le moment, je le fais en utilisant la méthode des modèles magento comme celle-ci (après avoir analysé les lignes CSV) dans une boucle 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;

Ce n'est pas grave lorsqu'une poignée de produits doivent être mis à jour.Cependant, lorsque vous mettez à jour plus de 100 produits, cela devient incroyablement lent et affecte également les performances du site.

Puis-je importer en masse des prix spéciaux et également définir les dates via une requête SQL directe ?


En recherchant ce problème, j'ai trouvé une solution possible (basée sur cet article http://fishpig.co.uk/magento/tutorials/update-prices-sql) avec réglage du special_price dans la base de données directement comme ceci :

Note: bd_ est mon préfixe de table

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

Ce apparaît fonctionner (je peux voir la valeur dans l'interface utilisateur de magento mise à jour).Je ne suis pas encore sûr que ce soit la bonne façon de procéder pour définir le prix spécial directement dans la base de données.

De plus, je n'ai pas encore trouvé comment régler le from/to Rendez-vous.

Toute aide à ce sujet sera très appréciée.

Était-ce utile?

La solution

Disons que $storeId est le magasin pour lequel vous souhaitez mettre à jour le prix $specialPrice est votre prix spécial, $sku est le SKU de votre produit, $fromDate et $toDate sont... eh bien, vous voyez l'idée.

Maintenant, exécutez ce code :

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

Autres conseils

Si vous souhaitez mettre à jour les produits existants, vous n'avez pas besoin d'effectuer les modifications manuellement.Importez simplement un fichier CSV qui ne doit contenir que les attributs sous forme de colonnes nécessaires à la mise à jour.Le SKU est un champ obligatoire, alors n'oubliez pas de l'inclure dans votre CSV.

Il importera des produits très rapidement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top