Skip to main content

Мультискладський облік (Multi-Warehouse)

Дозволяє оголошувати наявність і ціни товарів окремо для кожного складу або магазину. Пошук автоматично фільтрує та ранжує результати відповідно до складу, з якого купує клієнт.

Зворотня сумісність

Функція повністю опціональна:

  • Фіди без складських даних працюють як раніше
  • Якщо план не підтримує функцію — поведінка ідентична поточній, навіть якщо фід містить складські дані
  • Віджети що не передають window.SpefixSearch.setWId() отримують класичну агреговану поведінку

Як активувати?

Для роботи мультискладського режиму потрібні три складові одночасно:

1. План — функція має бути доступна у вашому тарифному плані.

2. Фід — має містити складські дані в одному з підтримуваних форматів (детальніше нижче).

3. Сайт — має передавати ID поточного складу через:

window.SpefixSearch.setWId(ID_складу)
warning

Якщо хоча б одна з трьох складових відсутня — система автоматично повертається до 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, yes
  • quantity — опціональний. Кількість товару на складі
  • 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]