我使用以下脚本
http://www.sonassi.com/knowledge-base/magento-kb/mass-update-stock-levels-in-magento-fast/
它与测试CSV文件完美配合。
我的POS创建了一个CSV文件但它放了一个不同的标题,因此脚本不起作用。我想自动化这个过程。有没有办法自动更改标题的名称?
脚本要求标题为
“SKU”,”数量”
我的CSV是
“ITEM”,” STOCK”
是否有任何方法可以在脚本中链接这两个不同的名称,以便我的脚本将ITEM视为sku并将STOCK视为数量?
答案 0 :(得分:0)
您应该使用yourfilename.csv的输入创建一个php脚本,该文件是未格式化的文件。
$file = file_get_contents('yourfilename.csv');
$file = str_replace('ITEM', 'sku', $file);
$file = str_replace('STOCK', 'qty', $file);
file_put_contents('yourfilename.csv', $file);
以下链接供您参考。
find and replace values in a flat-file using PHP http://forums.phpfreaks.com/index.php?topic=327900.0
希望它有所帮助。
干杯
答案 1 :(得分:0)
PHP通常不是文件操作的最佳方式,可以授予您访问SSH的权限。
您还可以运行以下命令(如果您安装了perl,这在大多数设置中都是默认的...):
perl -pi -e 's/ITEM/sku/g' /path/to/your/csvfile.csv
perl -pi -e 's/STOCK/qty/g' /path/to/your/csvfile.csv
答案 2 :(得分:0)
如果你想使用原始sql方式更新qty,那么你可以创建一个如下所示的函数:
function _updateStocks($data){
$connection = _getConnection('core_write');
$sku = $data[0];
$newQty = $data[1];
$productId = _getIdFromSku($sku);
$attributeId = _getAttributeId();
$sql = "UPDATE " . _getTableName('cataloginventory_stock_item') . " csi,
" . _getTableName('cataloginventory_stock_status') . " css
SET
csi.qty = ?,
csi.is_in_stock = ?,
css.qty = ?,
css.stock_status = ?
WHERE
csi.product_id = ?
AND csi.product_id = css.product_id";
$isInStock = $newQty > 0 ? 1 : 0;
$stockStatus = $newQty > 0 ? 1 : 0;
$connection->query($sql, array($newQty, $isInStock, $newQty, $stockStatus, $productId));
}
通过传递csv行数据作为参数来调用上面的函数。这只是一个暗示。
为了获得包含详细信息的完整工作代码,您可以参考以下博客文章:
Updating product qty in Magento in an easier & faster way
希望这有帮助!