Модуль Сборки модулей TecDock

if($imageSrc>0){$arOps["IMG_SRC"]=$imageSrc; реалізовано $arPrice["IMG_SRC"] = $imageSrc; // Додавання зображення
Перевірка ваги товару, Перевірка ймовірності, Перевірка на повернення товару, якщо через api це передається то можна.
if($product['weight']>0){$arOps['WEIGHT']=($product['weight']*1000);}
if($probability>0){$arOps['PERCENTGIVE']=intval($probability);}
if($product_rest['isReturn']>0){$arOps['NORETURN']=$product_rest['isReturn'];}
Так, передається і працює
Снимок экрана 2024-05-01 173935.png

Я помітив таку дивну річ, що коли один і той же артикул є на багатьох складах, то фото передає по кожному складу...
Тобто фото товару не одне, а стільки скильки складів. Можливо це тільки в мене такий глюк.
Снимок экрана 2024-05-01 174334.png
 
Последнее редактирование:
на сторінці товару для кожного скраду у вас виводить окреме зображення чи коли ви відкриваєте зображення наприклад 6 однакових
 
на сторінці товару для кожного скраду у вас виводить окреме зображення чи коли ви відкриваєте зображення наприклад 6 однакових
На сторінці товару, під основним фото
Screenshot_2024-05-01-18-33-41-821_com.android.chrome-edit.jpg
Повторюсь, це може бути суто проблемою в мене...
 
А чи є можливість не з усіх складів брати ціни/наявність та інше?
 
А чи є можливість не з усіх складів брати ціни/наявність та інше?
так є можливість наприклад зробити по ціні чи по терміну доставки чи ще по чомусь.

код писався для знайомого у нього на сервері працює
<?php
/*
потрібно зі сторони Elit додати ваш IP сервера
*/
if (!defined("TDM_PROLOG_INCLUDED") || TDM_PROLOG_INCLUDED !== true) {
die();
}

// Перевірка наявності розширення SOAP
if (!extension_loaded('soap')) {
$ERROR = 'Попередження! Розширення PHP SOAP не завантажено';
} else {
try {
// Створення клієнта SOAP для взаємодії з API ELIT
$SClient = new SoapClient("Для просмотра ссылки Войди или Зарегистрируйся", array('encoding' => 'utf-8'));

// Масив для зберігання унікальних артикулів
$arARTs = array();

// Ітерація по частинам товарів
foreach ($arWsParts as $arPart) {
if (!in_array($arPart['ARTICLE'], $arARTs)) {
// Виклик методу getItemInfo
$arCRes = $SClient->getItemInfo($arWS['ELIT_UA'], $arWS['LOGIN'], $arWS['PASSW'], $arPart['ARTICLE']);
$arARTs[] = $arPart['ARTICLE'];
} else {
// Якщо артикул вже був оброблений, отримуємо дані з кешу
$arCRes = $arCacheData[$arPart['ARTICLE']];
}

// Обробка результату запиту
if (is_array($arCRes) && count($arCRes) > 0) {
foreach ($arCRes as $arRes) {
if ($arRes['internalNo'] != '' && (TDMSingleKey($arRes['internalNo'], true) == $arPart['BKEY'] || $arPart['BKEY'] == '')) {
// Формування даних про ціну та наявність товару
$arPrice = TDMPriceArray($arPart);
$arPrice["ARTICLE"] = $arRes['internalNo'];
$arPrice["ALT_NAME"] = $arRes['Description'];
$arPrice["BRAND"] = $arRes['Brand'];
$arPrice["PRICE"] = floatval($arRes['retailPrice']);
$arPrice["CURRENCY"] = $arWS['CURRENCY'];
$arPrice["AVAILABLE"] = $arRes['quantity'];
$arPrice["STOCK"] = implode(' / ', $arRes['stock']);
if ($arPrice["AVAILABLE"] == 'xxl') {
$arPrice["AVAILABLE"] = 99;
}
$arOps = array();
if ($arRes['Weight'] > 0) {
$arOps['WEIGHT'] = $arRes['Weight'];
}
$arPrice["OPTIONS"] = TDMOptionsImplode($arOps, $arPrice);
$arPrices[] = $arPrice;
}
}
}
}
} catch (SoapFault $e) {
// Обробка помилок SOAP
$ERROR = 'SOAP помилка: ' . $e->getMessage();
} catch (Exception $e) {
// Загальна обробка помилок
$ERROR = 'Помилка: ' . $e->getMessage();
}
}
?>

На сторінці товару, під основним фото
Повторюсь, це може бути суто проблемою в мене...
мені здається чо потрібно поправити у папці partslist у її файлах код но я можу помилятися, для цього модуля що я писав код у ньому коли відкриваєш зображення то усі зображення однпкові.
 
Последнее редактирование:
SOAP помилка: java.lang.NullPointerException
Elit надав доступ до API вашому серверу сайту. Потрібно надати свій IP менеджеру від ELIT щоби він включив доступ. це може бути одна із причин
 
У коді реалізовано якщо на складах є одинаковий товар то товар береться із складу де час доставки менший.
<?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;
}
}
?>
 
У коді реалізовано якщо на складах є одинаковий товар то товар береться із складу де час доставки менший.
<?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;
}
}
?>
Видає помилки по:
quantity та name
Warning: Illegal string offset 'quantity' in /....
Warning: Illegal string offset 'name' in /....
 
Назад
Сверху