La actualización de precios para los productos con un .csv mediante programación
-
12-12-2019 - |
Pregunta
Mi pregunta más amplio, en el comienzo, pero voy a ir más en detalle más adelante.Tengo alrededor de 3000 productos, donde tengo el Sku y los precios en una .archivo csv.Ahora los precios cambiado recientemente y me gustaría cargar/actualizar estos precios de los productos.Hay una forma rápida de hacer esto a través de una secuencia de comandos utilizando la API de SOAP?
O es que hay una manera más fácil de todo esto?
ACTUALIZACIÓN He utilizado esta función http://www.blog.magepsycho.com/updating-product-prices-in-magento-in-easier-faster-way/ pero ahora el valor y la diferencia en precio.Hay mejores opciones de ir a través de un archivo csv y, a continuación, coinciden los precios para cada sku para un precio.
Solución
No creo que el uso de los servicios SOAP va a obtener lo que usted necesita rápidamente.Quiero decir que probablemente va a funcionar, pero que va a ser muy lento para 3k productos.
En lugar de tratar de esta secuencia de comandos.
Supongamos que el archivo csv tiene 2 columnas.SKU y el precio.
$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
)
}
usted puede colocar este código en uno de sus modelos personalizados o ayudantes y, a continuación, ejecútelo.Usted puede verificarlo en el código.Yo no lo he probado.También copia de seguridad de su base de datos.
[EDITAR]
Si se ejecuta desde un archivo, crear una que se llama price_update.php
en el mismo nivel que index.php
y añadir esto es:
<?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();
Después de esto, agregue el código de arriba que se analiza el csv y llamada en tu navegador MAGE_ROOT/price_update.php
.
Otros consejos
Acaba de crear disponibilidad, precio, costo CSV-Updater. Interesado en el desarrollo o la contribución, así que publicándolo aquí.
http://lycenok.com/magento-extensions/magento-csv-product-updater.html https://github.com/lycenok/magento_csv_product_updater
Saludos, Eugene.
Actualización: Recuerde acerca de la solución simple, implementada en Magento en sí.
Sistema -> Importar / Exportar -> "DataFlow - Perfiles"