我想创建一个简单的PHP脚本,我可以在Prestashop 1.6中对我的产品进行库存覆盖。它需要参考"产品参考"在我的文件中是" SKU"然后更新"数量"在Prestashop,这是"可用库存"在我的电子表格中。
目前我每天都会手动更新,因为我收到了来自供应商的实时库存更新的csv文件。我已经看过模块,但它们似乎都没有为我们工作,所以希望有人创建一个简单的PHP脚本,只会覆盖数据库中的数据。
提前致谢
答案 0 :(得分:0)
这是我在PS 1.6上用于"产品"的更新库存的脚本。或" product_attribute"由UPC。
库存/文件夹中的CSV文件如下所示:
产品参考;库存移动; ID商店 4443601522; 0; 1
您可以更改此scrit以使用SKU而不是UPC
<?php
include(dirname(__FILE__) . '/config/config.inc.php');
include(dirname(__FILE__) . '/init.php');
$id_shop = 1;
$id_lang = 1;
$ligne = 0;
$dossier_csv = "/home/mywebsite/public_html/stock/";
echo '<H1>MAJ PS STOCK PAR UPC</h1>';
if (($fic = fopen($dossier_csv . "stock.csv", "a+")) == FALSE) {
echo '<br>Erreur ouverture fichier stock !<br>';
} else {
echo '<h2><u>Traitement des stocks :</u></h2>';
}
while ($tab = fgetcsv($fic, 1024, ';')) {
$champs = count($tab);
$ligne++;
for ($i = 0; $i < $champs; $i++) {
if ($i == 0)
$reference = $tab[$i];
if ($i == 1 && $reference != '' && $ligne != 1) {
$quantity = $tab[$i];
$productId = getIdProductByUPC($reference);
if ($productId != false) {
$idProductAttribute = getIdByUPC($productId, $reference);
$newStock = $quantity;
StockAvailable::setQuantity($productId, $idProductAttribute, $newStock, $id_shop);
echo '<br>(' . $reference . ') : OK qte : <b>' . $quantity . '</b><br>';
} else {
$productId = Product::getIdByUPC($reference);
$product = new Product($productId);
$combination = $product->getAttributeCombinations($id_lang);
if ($productId != false && count($combination) == 0) {
$newStock = $quantity;
StockAvailable::setQuantity($productId, 0, $newStock, $id_shop);
echo '<br>(' . $reference . ') : OK qte : <b>' . $quantity . '</b><br>';
} else {
echo '<br>(' . $reference . '-' . $productId . ') : Erreur enregistrement stock <br>';
}
}
}
}
}
echo '<br><br><br><br>---MAJ TERMINEE---';
function getIdByUPC($id_product, $reference)
{
if (empty($reference)) {
return 0;
}
$query = new DbQuery();
$query->select('pa.id_product_attribute');
$query->from('product_attribute', 'pa');
$query->where('pa.upc LIKE \'%' . pSQL($reference) . '%\'');
$query->where('pa.id_product = ' . (int) $id_product);
return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($query);
}
function getIdProductByUPC($reference)
{
if (empty($reference))
return 0;
$query = new DbQuery();
$query->select('pa.id_product');
$query->from('product_attribute', 'pa');
$query->where('pa.upc = \'' . pSQL($reference) . '\'');
return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($query);
}
?>
答案 1 :(得分:-1)
我认为,行 $productId = Product::getIdByUPC($reference) 是错误的。 正确的:$productId = getIdProductByUPC($reference)