Как-то давно нашёл в просторах скрипт для PrestaShop, который обновлял количество и цену у товара. Знакомому нужен же был более полный функционал.
С количеством и ценой проблем не возникает, а вот со скидкой пришлось повозиться. Скидка хранится в таблице ps_specific_price (ps — префикс таблицы, у вас он может быть другим).
Сам код:
<?php
define('PS_ADMIN_DIR', getcwd());
include(PS_ADMIN_DIR . '/../config/config.inc.php');
include(PS_ADMIN_DIR . '/functions.php');
include(PS_ADMIN_DIR . '/header.inc.php');
echo '<div style="text-align:left;">';
// Проверяем загружен ли файл
if (is_uploaded_file($_FILES["filename"]["tmp_name"]))
{
// Если файл загружен успешно, перемещаем его из временной директории в конечную
move_uploaded_file($_FILES["filename"]["tmp_name"], "" . $_SERVER["DOCUMENT_ROOT"] . "/upload/" . $_FILES["filename"]["name"]);
$file_path = "" . $_SERVER["DOCUMENT_ROOT"] . "/upload/" . $_FILES["filename"]["name"] . "";
// Меняем кодировку файла с windows-1251 на utf-8
$file = file_get_contents("" . $file_path . "");
$file = iconv("windows-1251", "utf-8", $file);
file_put_contents("" . $file_path . "", $file);
//меняем локаль на хостинге
if (!setlocale(LC_ALL, 'ru_RU.utf8'))
setlocale(LC_ALL, 'en_US.utf8'); if (setlocale(LC_ALL, 0) == 'C')
die('Не поддерживается ни одна из перечисленных локалей (ru_RU.utf8, en_US.utf8)');
if (($handle_f = fopen($file_path, "r")) !== FALSE)
{
//начинаем цикл чтения csv
while (($data_f = fgetcsv($handle_f, 99999, ";")) !== FALSE)
{
//ищем товар по supplier_reference
$sql = "SELECT id_product FROM ps_product WHERE supplier_reference = '" . $data_f[0] . "'";
$id_product = Db::getInstance()->getValue($sql, 0);
//если такой товар есть, обновляем количество и цену
if ($id_product)
{
if ((isset($data_f[1])))
$sql = mysql_query("UPDATE `ps_product` SET `quantity` ='" . $data_f[1] . "' WHERE `id_product`='" . $id_product . "' LIMIT 1");
if ((isset($data_f[2])))
$sql = mysql_query("UPDATE `ps_product` SET`price` = '" . $data_f[2] . "' WHERE `id_product`='" . $id_product . "' LIMIT 1");
if ((isset($data_f[4])))
$sql = mysql_query("UPDATE `ps_product` SET `on_sale` = '" . $data_f[4] . "' WHERE `id_product`='" . $id_product . "' LIMIT 1");
if ((isset($data_f[3])))
$sql = mysql_query("UPDATE `ps_product` SET `wholesale_price` ='" . $data_f[3] . "' WHERE `id_product`='" . $id_product . "' LIMIT 1");
if ((isset($data_f[5])))
{
if ($data_f[5] == 0)
{
$sql = mysql_query("DELETE FROM `ps_specific_price` WHERE `id_product`='" . $id_product . "' LIMIT 1");
}
else
{
$sql = mysql_query("DELETE FROM `ps_specific_price` WHERE `id_product`='" . $id_product . "' LIMIT 1");
$s = str_replace(',', '.', $data_f[5] / 100);
$sql = mysql_query(
"INSERT INTO `uds4lif_vne`.`ps_specific_price` (
`id_specific_price` ,
`id_product` ,
`id_shop` ,
`id_currency` ,
`id_country` ,
`id_group` ,
`price` ,
`from_quantity` ,
`reduction` ,
`reduction_type` ,
`from` ,
`to`
)
VALUES (
NULL , '" . $id_product . "', '1', '0', '0', '0', '0', '1', '" . $s . "', 'percentage', '0000-00-00 00:00:00', '0000-00-00 00:00:00'
);
"
);
}
}
echo "<p style='color:green'>товар с штрихкодом <b>" . $data_f[0] . "</b> обновлен</p>";
}
else
{
echo "<p style='color:red '>товар с штрихкодом <b>" . $data_f[0] . "</b> не найден</p>";
}
}
echo "<b>Обновление завершено</b>";
}
else
{
echo "Невозможно открыть загруженый файл";
}
}
else
{
echo '
<h2>Обновления цены и количества:</h2>
<form action="' . $_SERVER["PHP_SELF"] . '" method="post" enctype="multipart/form-data">
<input type="file" name="filename"><br>
<input type="submit" value="Загрузить"><br>
</form>
';
}
echo '</div>';
include(PS_ADMIN_DIR . '/footer.inc.php');
?>
Инструкция: Создаем/качаем ниже файл и закачиваем его в админку магазина. Путь к файлу: http://mojmagazin.ua/adminXXX/upl_price.php
Инстуркция по созданию файла CSV:
файл csv нужно заполнять так | Supplier reference #| количество | цена продажи | закупочная цена | скидка на товар: 1 – есть, 0 – нету | размер скидки в процентах|
Расчитан скрипт на то что файл в кодировке windows-1251
(в таком формате сохраняет файл эксель — «csv — разделеные точкой с запятой»)
Теперь сами файлы:
Если нужно будет для формата экселя — попросите, добавлю.
PS: Кто знает автора оригинального скрипта — маякните, чтобы добавить автора.
Спасибо: http://www.prestashop.com/forums/user/157834-surkov85/ и 4udak