Atualizando preços de produtos usando um .csv programaticamente
-
12-12-2019 - |
Pergunta
Minha pergunta é mais ampla no início, mas entrarei em mais detalhes posteriormente.Tenho cerca de 3.000 produtos onde tenho os Skus e preços em um arquivo .csv.Agora os preços mudaram recentemente e gostaria de fazer upload/atualizar esses preços dos produtos.Existe uma maneira rápida de fazer isso através de um script usando a API SOAP?
Ou existe uma maneira mais fácil de contornar isso?
ATUALIZAREu usei essa função http://www.blog.magepsycho.com/updating-product-prices-in-magento-in-easier-faster-way/ mas agora a incompatibilidade de valor e preço.Existem opções melhores passando por um csv e, em seguida, combinando os preços de cada sku com um preço.
Solução
Não creio que o uso dos serviços SOAP proporcione o que você precisa rapidamente.Quero dizer, provavelmente funcionará, mas será muito lento para produtos de 3k.
Em vez disso, tente este script.
Digamos que seu csv tenha 2 colunas.SKU e preço.
$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
)
}
você pode colocar esse código em um de seus modelos ou auxiliares personalizados e depois executá-lo.Você pode querer verificar o código.Eu não testei.Também faça backup do seu banco de dados.
[EDITAR]
Se você executar isso a partir de um arquivo, crie um chamado price_update.php
no mesmo nível que index.php
e adicione isto nele:
<?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();
Depois disso, adicione o código acima que analisa o csv e chame no seu navegador MAGE_ROOT/price_update.php
.
Outras dicas
Acabou de criar disponibilidade, preço, custo CSV-Updater. Interessado em desenvolvimento ou contribuição, então postando aqui.
http://lycenok.com/magento-extensions/magento-csv-product-updater.html https://github.com/lycenok/magento_csv_product_updater
Cumprimentos, Eugene.
update: Lembre-se da solução simples, implementada no próprio Magento.
Sistema -> Importar / Exportar -> "DataFlow - perfis"