<?php
///керування///
// Включення або виключення кешування
$enableCache = true; // Змініть на false - щоб вимкнути кешування, true - щоб увімкнути кешування
// Можливість міняти час з'єднання
$connectTimeout = 2; // Час з'єднання за замовчуванням
// Можливість міняти націнку
$markupPercentage = 0.35; // Націнка у відсотках (35%)
// Можливість міняти округлення ціни
$roundingOption = 4; // Виберіть опцію округлення: 1 - стандартно без округлення, 2 - без дробової частини, 3 - до 5, 4 - до 10 (за замовчуванням)
// Можливість міняти час доставки і значення за замовчуванням
$executionTimes = [
'Луцьк' => 1, // Час доставки до Луцька
'Київ Борщагівка' => 2, // Час доставки до Києва Борщагівки
'Очікуємо' => 30, // Час очікування за замовчуванням
];
$defaultExecutionTime = 3; // Час доставки за замовчуванням
///керування///
if (!defined("TDM_PROLOG_INCLUDED") || TDM_PROLOG_INCLUDED !== true) die();
// Ініціалізуємо масив цін
$arPrices = [];
// Кешування результатів запитів
$apiCache = [];
// Оптимізований цикл обробки часток
foreach ($arWsParts as $arPart) {
$article = $arPart['ARTICLE'];
// Перевіряємо, чи маємо дані у кеші, якщо кешування включено
if ($enableCache && isset($apiCache[$article])) {
$curlResult = $apiCache[$article];
} else {
// Виконуємо запит до API та кешуємо результат, якщо кешування включено
$curlResult = fetchFromApi($article);
if ($enableCache) {
$apiCache[$article] = $curlResult;
}
}
// Отримуємо результат з кешу
if ($curlResult === false) {
// Обробка помилки CURL
continue;
}
$curlResult = json_decode($curlResult, true);
if (!empty($curlResult['products'])) {
// Зберігаємо дані про товар із найменшим терміном доставки
$minDeliveryTime = PHP_INT_MAX;
$minDeliveryStock = '';
foreach ($curlResult['products'] as $product) {
$default_image = isset($product['default_image']) ? $product['default_image'] : ''; // Отримуємо зображення товару
$stocks = array_merge($product['in_stocks'], $product['in_others'], $product['in_waiting']);
foreach ($stocks as $stock) {
$quantity = (int)preg_replace('/[^0-9]/', '', $stock['quantity']);
if ($quantity > 0) {
// Оптимізуємо розрахунок ціни та часу виконання
$price = (float)$product['price'] * (1 + $markupPercentage); // Націнка
$timeToExecute = isset($executionTimes[$stock['name']]) ? $executionTimes[$stock['name']] : $defaultExecutionTime; // Отримуємо час доставки або значення за замовчуванням
$isNewProduct = !$product['new_product'] ? 1 : 0;
// Якщо термін доставки на даному складі менший за збережений мінімальний, замінюємо значення
if ($timeToExecute < $minDeliveryTime) {
$minDeliveryTime = $timeToExecute;
$minDeliveryStock = $stock['name'];
}
}
}
}
// Повторно обробляємо результати та додаємо товари лише зі складу з мінімальним терміном доставки
foreach ($curlResult['products'] as $product) {
$default_image = isset($product['default_image']) ? $product['default_image'] : ''; // Отримуємо зображення товару
$stocks = array_merge($product['in_stocks'], $product['in_others'], $product['in_waiting']);
foreach ($stocks as $stock) {
$quantity = (int)preg_replace('/[^0-9]/', '', $stock['quantity']);
if ($quantity > 0 && $stock['name'] === $minDeliveryStock) {
// Оптимізуємо розрахунок ціни та часу виконання
$price = (float)$product['price'] * (1 + $markupPercentage); // Націнка
$timeToExecute = $minDeliveryTime;
$isNewProduct = !$product['new_product'] ? 1 : 0;
// Здійснюємо округлення ціни згідно з вимогою
$roundedPrice = roundPrice($price, $roundingOption);
// Заповнюємо масив даними
$arPrice = TDMPriceArray($arPart);
$arPrice["ARTICLE"] = $product['article'];
$arPrice["ALT_NAME"] = $product['name'];
$arPrice["BRAND"] = $product['brand'];
$arPrice["PRICE"] = $roundedPrice; // Округлена ціна
$arPrice["AVAILABLE"] = $quantity;
$arPrice['IMG_SRC'] = '
Для просмотра ссылки Войди или Зарегистрируйся' . str_replace('\\', '/', $default_image); // Додаємо зображення товару
$arPrice["CURRENCY"] = "UAH";
$arPrice["DAY"] = $timeToExecute;
$arPrice["STOCK"] = $stock['name'];
$arPrice["OPTIONS"] = '';
$arOps = Array();
$arPrice["OPTIONS"] = TDMOptionsImplode($arOps,$arPrice);
// Додаємо до масиву цін
$arPrices[] = $arPrice;
}
}
}
}
}
// Функція для отримання даних з API з можливістю кешування
function fetchFromApi($article) {
$key = "You API Key"; // Ваш ключ API
$headers = array("Authorization: $key", "User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36");
$ch = curl_init();
global $connectTimeout; // Використовуємо глобальну змінну
curl_setopt($ch, CURLOPT_URL, "
Для просмотра ссылки Войди или Зарегистрируйся" . urlencode($article) . "&new_product=0&warehouses=all&search_mode=strict");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_ENCODING, 'utf-8');
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $connectTimeout); // Встановлюємо час з'єднання
$curlResult = curl_exec($ch);
curl_close($ch);
return $curlResult;
}
// Функція для округлення ціни
function roundPrice($price, $option) {
switch ($option) {
case 1:
// Стандартно без округлення
return $price;
case 2:
// Без дробової частини
return ceil($price);
case 3:
// До 5
return ceil($price / 5) * 5;
case 4:
// До 10
return ceil($price / 10) * 10;
default:
return $price;
}
}
?>