Мультискладський облік (Multi-Warehouse)
Дозволяє оголошувати наявність і ціни товарів окремо для кожного складу або магазину. Пошук автоматично фільтрує та ранжує результати відповідно до складу, з якого купує клієнт.
Функція повністю опціональна:
- Фіди без складських даних працюють як раніше
- Якщо план не підтримує функцію — поведінка ідентична поточній, навіть якщо фід містить складські дані
- Віджети що не передають
window.SpefixSearch.setWId()отримують класичну агреговану поведінку
Як активувати?
Для роботи мультискладського режиму потрібні три складові одночасно:
1. План — функція має бути доступна у вашому тарифному плані.
2. Фід — має містити складські дані в одному з підтримуваних форматів (детальніше нижче).
3. Сайт — має передавати ID поточного складу через:
window.SpefixSearch.setWId(ID_складу)
Якщо хоча б одна з трьох складових відсутня — система автоматично повертається до product-level даних без помилок.
Формати фіду
Підтримуються три рівнозначні XML-формати всередині <offer>. Використовуйте той, який вже генерує ваш пайплайн — на вході ми нормалізуємо їх до однакового внутрішнього представлення.
Формати можна комбінувати — система не обмежує. Наприклад, presence замість available або old_price замість oldprice працюють у будь-якому форматі.
<stock> / <warehouse> — рекомендовано
<offer id="A123" available="true">
...
<stock>
<warehouse id="kyiv-main" available="true" quantity="5" price="299.00" oldprice="399.00"/>
<warehouse id="lviv-1" available="false" quantity="0"/>
</stock>
</offer>
ID складу може бути будь-яким рядком або числом (kyiv-main, 152, тощо). Головне — щоб збігався з тим що передає window.SpefixSearch.setWId().
Атрибути <warehouse>:
available— обов'язковий. Truthy:true,1,yesquantity— опціональний. Кількість товару на складіprice/oldprice— опціональні. Якщо не вказані — використовуються ціни з рівня<offer>(fallback)
<outlets> / <outlet> — стиль YML / Rozetka
<offer id="A123">
<outlets>
<outlet id="kyiv-main" instock="5" price="299.00"/>
<outlet id="lviv-1" instock="0"/>
</outlets>
</offer>
<shops> / <shop> — застарілий формат
<offer id="A123">
<shops>
<shop id="152" presence="true" price="89.90"/>
<shop id="294" presence="true" price="89.90"/>
<shop id="500" presence="false"/>
</shops>
</offer>
Довідник атрибутів
| Поняття | Атрибути | Примітки |
|---|---|---|
| ID складу | id | Обов'язковий. Має збігатись з тим що передає window.SpefixSearch.setWId() |
| Доступність | available, presence | Обов'язкова. Truthy: true, 1, yes. Fallback на quantity > 0 |
| Кількість | quantity, instock, stock | Опціональне. Ціле число. За замовчуванням 0 |
| Нова ціна | price, new_price | Опціональне. Fallback на ціну з рівня <offer> |
| Стара ціна | oldprice, old_price | Опціональне. Завжди >= price |
Агрегація доступності
Якщо <offer> містить хоча б один склад — верхньорівневе available офера перезаписується як OR доступностей по всіх складах.
<offer id="A123" available="false">
<stock>
<warehouse id="kyiv-main" available="true"/>
<warehouse id="lviv-1" available="false"/>
</stock>
</offer>
Результат: товар вважається доступним (true), бо хоча б один склад має available="true".
Поведінка без переданого складу або при обмеженні плану
Якщо window.SpefixSearch.setWId() не викликається або план не підтримує функцію — використовуються product-level дані. Складські дані зберігаються, але ігноруються.
Взаємодія з іншими налаштуваннями
«Показувати товари не в наявності» — якщо вимкнено і передається window.SpefixSearch.setWId(), фільтрація відбувається за наявністю на конкретному складі, а не на product-level.
Фільтрація по цінах — працює по складових цінах (якщо вказані). Аналогічно до діапазону цін на product-level.
Потрібна допомога?
💬 Telegram: @spefix_pm • 📧 [email protected]