/* ============================================================
ПРАВКИ МОБИЛЬНОГО СКРИПТА КАТАЛОГА [vc9]
Те же правки 1–3 стоит сделать и в десктопной версии.
============================================================ */
/* ---------- ПРАВКА 1. Логи ----------
Удалить самую первую строку перед (function() {:
console.log('[vc9] Скрипт загружен!');
Сразу после 'use strict'; вставить: */
var DEBUG = false; // true — вернуть логи для отладки
function log() { if (DEBUG) try { console.log.apply(console, arguments); } catch (e) {} }
/* Затем во всём скрипте заменить (Ctrl+H):
console.log( → log(
console.warn( → log(
console.error оставить. */
/* ---------- ПРАВКА 2. Загрузка товаров ----------
Раньше: кеш писался в sessionStorage по 48 ключей, но НИГДЕ не читался —
товары каждый раз заново качались с store.tildaapi.com, причём с priority:'low'
и только через 200 мс после DOMContentLoaded.
Теперь: запрос уходит сразу при загрузке скрипта, а при переходах по сайту
в течение CACHE_TTL список берётся из кеша без сети.
Удалить целиком разделы «3. КЕШИРОВАНИЕ» и «4. ЗАГРУЗКА ТОВАРОВ»
(от var productCache = {}; до конца функции loadProducts) и вставить вместо них: */
var LIST_CACHE_KEY = 'vc9_products_' + SECTION_UID;
var allProducts = [];
var isLoaded = false;
var isLoading = false;
var loadCallbacks = [];
function readListCache() {
try {
var o = JSON.parse(sessionStorage.getItem(LIST_CACHE_KEY) || 'null');
if (o && Array.isArray(o.p) && Date.now() - o.t < CACHE_TTL) return o.p;
} catch (e) {}
return null;
}
function finishLoad(list) {
allProducts = list || [];
isLoaded = true;
var cbs = loadCallbacks;
loadCallbacks = [];
cbs.forEach(function (fn) { try { fn(allProducts); } catch (e) {} });
}
function loadProducts(callback) {
if (callback) {
if (isLoaded) { callback(allProducts); return; }
loadCallbacks.push(callback);
}
if (isLoaded || isLoading) return;
isLoading = true;
var cached = readListCache();
if (cached) { log('[vc9] Товары из кеша:', cached.length); finishLoad(cached); return; }
var url = 'https://store.tildaapi.com/api/getproductslist/' +
'?storetype=tilda' +
'&publickey=' + encodeURIComponent(PUBLIC_KEY) +
'&storepartuid=' + encodeURIComponent(SECTION_UID) +
'&size=48';
fetch(url)
.then(function (r) {
if (!r.ok) throw new Error('HTTP ' + r.status);
return r.json();
})
.then(function (data) {
var list = data.products || [];
try {
sessionStorage.setItem(LIST_CACHE_KEY, JSON.stringify({ t: Date.now(), p: list }));
} catch (e) {}
log('[vc9] Загружено товаров:', list.length);
finishLoad(list);
})
.catch(function (err) {
console.error('[vc9] Ошибка загрузки:', err);
finishLoad([]);
});
}
loadProducts(); // стартуем запрос сразу, не дожидаясь DOM
/* ---------- ПРАВКА 3. Запуск без задержки ----------
В самом конце (раздел «14. ЗАПУСК») в двух местах заменить
setTimeout(initAllCards, 200);
на
initAllCards();
Если после этого какие-то карточки не заполняются — вернуть задержку, но 50 мс. */
/* ---------- ПРАВКА 4. В сайта ----------
Настройки сайта → Ещё → HTML-код для вставки внутрь HEAD — добавить строку
(браузер заранее откроет соединение с API каталога):
*/