File: /home/retile.ru/public_html/.~~~~~update_discount_prices.php
<?php
// Подключаем ядро OpenCart
require_once('config.php');
require_once('system/startup.php');
// Registry
$registry = new Registry();
// Loader
$loader = new Loader($registry);
$registry->set('load', $loader);
// Config
$config = new Config();
$config->load('default');
$config->load('catalog');
$registry->set('config', $config);
// Database
if ($config->get('db_autostart')) {
$registry->set('db', new DB($config->get('db_engine'), $config->get('db_hostname'), $config->get('db_username'), $config->get('db_password'), $config->get('db_database'), $config->get('db_port')));
}
// Получаем объект БД из реестра
$db = $registry->get('db');
// ID категории, для которой нужно пересчитать цены скидок
$category_id = 140; // Замените на нужный ID категории
// Коэффициент уменьшения (20% → 0.80)
$coefficient = 0.80;
// Получаем список товаров в указанной категории
$query_products = $db->query("
SELECT DISTINCT p.product_id, p.price
FROM `" . DB_PREFIX . "product` p
INNER JOIN `" . DB_PREFIX . "product_to_category` ptc
ON p.product_id = ptc.product_id
WHERE ptc.category_id = '" . (int)$category_id . "'
AND p.status = 1
");
if ($query_products->num_rows) {
echo "<strong>Пересчитываются цены скидок для товаров в категории ID " . $category_id . ":</strong><br><br>";
$updated_products = 0;
$total_discounts = 0;
foreach ($query_products->rows as $product) {
$product_id = (int)$product['product_id'];
// Получаем все скидки для текущего товара
$query_discounts = $db->query("
SELECT product_discount_id, price, customer_group_id, quantity, priority
FROM `" . DB_PREFIX . "product_discount`
WHERE product_id = '" . $product_id . "'
ORDER BY priority ASC, quantity ASC
");
if ($query_discounts->num_rows) {
$product_has_discounts = false;
echo "<strong>Товар ID " . $product_id . ":</strong><br>";
foreach ($query_discounts->rows as $discount) {
$old_price = (float)$product['price'];
// Пропускаем скидки с нулевой ценой
if ($old_price <= 0) {
continue;
}
$new_price = round($old_price * $coefficient); // Округляем до целого числа
// Обновляем цену скидки
// $db->query("
// UPDATE `" . DB_PREFIX . "product_discount`
// SET price = '" . (float)$new_price . "'
// WHERE product_discount_id = '" . (int)$discount['product_discount_id'] . "'
// ");
echo " Скидка ID " . $discount['product_discount_id'] .
" (Группа: " . $discount['customer_group_id'] .
", Количество: " . $discount['quantity'] .
", Приоритет: " . $discount['priority'] .
"): " . number_format($old_price, 2, '.', '') .
" → " . number_format($new_price, 2, '.', '') . "<br>";
$total_discounts++;
$product_has_discounts = true;
}
if ($product_has_discounts) {
$updated_products++;
}
echo "<br>";
}
}
if ($total_discounts > 0) {
echo "<strong>Готово! Обновлено скидок: " . $total_discounts . " для " . $updated_products . " товаров.</strong>";
} else {
echo "<strong>В категории ID " . $category_id . " нет скидок для обновления.</strong>";
}
} else {
echo "В категории ID " . $category_id . " нет активных товаров.";
}
?>