Поддержка дробного количества и единиц измерения количества товаров в темах дизайна

Функциональность лицензий Shop-Script

Shop-Script выпускается в двух лицензиях с различной функциональностью: «ПРО» и «ПРЕМИУМ». Поддержка дробного количества и единиц измерения количества товаров доступна только в лицензии «ПРЕМИУМ».

Поддержка этой функциональности в теме дизайна для Shop-Script должна быть объявлена согласно инструкции.

Любые единицы измерения количества товаров

Количество товаров на витрине может быть выражено в любых единицах измерения. Рядом с ценой товара должна быть обозначена та единица измерения, в которой происходит его продажа.

Две единицы измерения количества и две цены — для сравнения товаров

В этом случае у товара две цены: цена складской единицы, в которой продаётся товар, и цена базовой единицы, в которой могут выполняться сравнение и фильтрация товаров. На витрине магзина нужно показать две цены — для каждой из единиц измерения — и соотношение между этими единицами.

Сортировка и фильтрация товаров по ценам разных единиц измерения количества

Если в категории представлены товары с разными единицами измерения, у покупателя должна быть возможность выбрать любую из единиц, по цене которой ему удобно фильтровать или сортировать товары.

Любой шаг добавления товара в корзину

Для каждого товара может быть настроен свой размер шага добавления в корзину: покупатель сможет добавить в корзину только такое количество товара, которое кратно указанному шагу. Например, для весовых товаров шаг может быть равен 0,001 кг, а для кафельной плитки — 0,8 м² (количество, которое содержится в одной упаковке).

Минимальное количество товара для заказа

Для каждого товара может быть задано количество, меньше которого покупатель не сможет добавить в корзину. Например минимум 0,3 м для ткани, которая продается на метраж, или 0,5 кг для фруктов и овощей, которые продаются на вес.

Переменные

Настройки единиц измерения и количества товаров

Тема дизайна может получать информацию о том, какие параметры настроены в магазине.

$fractional_config: ассоциативный массив со значениями настроек в виде записей со следующими ключами:

ПРО ПРЕМИУМ
frac_enabled 0 1 — если включена возможность настройки шага добавления в корзину, минимального количества для заказа и изменения количества кнопками «+/-». В этом случае тема дизайна должна показать поле для ввода количества товара, добавляемого в корзину.

0 — если эти возможности выключены.
stock_units_enabled 0 1 — если включена возможность задавать разные единицы измерения количества товара. Если этот параметр включён, все цены на витрине должны быть показаны с единицами измерения количества.

0 — если эта возможность выключена.
base_units_enabled 0 1 — если в свойствах товара может быть задана базовая единица измерения количества. Для товаров, в свойствах которых задана базовая единица измерения количества, должны быть показаны цена за эту единицу и соотношение измерения складской и базовой единиц.

0 — если эта возможность недоступна.

Доступные единицы измерения количества

Информация о единицах измерения для использования на витрине — в виде массива. Из этого массива можно получать информацию о конкретной единице измерения по её id — ключу массива.

  • $units: полный формат массива доступных единиц; каждая единица представлена в виде ассоциативного подмассива со следующими ключами:
    • id: числовой идентификатор;
    • short_name: 3-буквенный код;
    • name: полное название;
    • okei_code: код единицы в Общероссийском классификаторе единиц измерения;
    • storefront_name: отформатированное сокращенное название для отображения на витрине;
    • sort: значение сортировки;
    • status: флаг, обозначающий, включена ли единица в настройках магазина;
    • builtin: флаг, обозначающий, что единица является системной, встроенной.
  • $formatted_units: сокращённый формат массива доступных единиц; каждая единица представлена в виде ассоциативного подмассива со следующими ключами:
    • id: числовой идентификатор;
    • name_short: отформатированное сокращенное название для отображения на витрине;
    • name: полное название

Отображение цен товаров и единиц измерения количества

Все цены товаров должны отображаться с единицами измерения, для которых указаны эти цены.

У товара всегда заполнена цена складской единицы — это основная цена товара.

Для товара может также быть указана базовая единица. Если это так, то тема дизайна должна показывать цену базовой единицы и соотношение между складской и базовой единицами, заданное в свойствах товара.

Хелпер для форматирования цены с названием единицы измерения количества

Помогает правильно показывать на витрине значение цены товара вместе с названием единицы измерения с учётом текущей локали.

{$wa->shop->formatPrice($price, ['currency' => '...', 'unit' => '...'])}

Параметры

  • $price — числовое значение цены.
  • $params — массив параметров единицы измерения количества товара со следующими ключами:
    • currency — 3-буквенное обозначение валюты, например, RUB или USD.
    • unit — локализованное сокращённое название единицы измерения, которое можно получить из массива $formatted_units, указав в качестве ключа числовой id нужный единицы.

Складская единица количества

Эта единица всегда есть в свойствах товара, и она одинаковая для всех его модификаций.

Получение значений

  • $product['stock_unit_id']: ID складской единицы, которая указана в свойствах товара;
  • $formatted_units[$product['stock_unit_id']]: свойства складской единицы из массива $formatted_units, описанного выше в разделе «Доступные единицы измерения количества».

Цена складской единицы товара

Основная цена текущей модификации. Эта цена всегда есть в свойствах товара, её значение зависит от текущей модификации, выбранной пользователем. Отображается с названием складской единицы измерения количества.

Получение значения с названием единицы измерения

С помощью хелпера $wa->shop->formatPrice().

$wa->shop->formatPrice(
    $sku['price'],
    [
        'unit' => $formatted_units[$product['stock_unit_id']]['name_short'],
        'currency' => $wa->shop->currency()
    ]
)

Зачёркнутая цена складской единицы

Показывать, если доступна в свойствах модификации. Отображается со складской единицей измерения количества.

Получение значения с названием единицы измерения

С помощью хелпера $wa->shop->formatPrice().

$wa->shop->formatPrice(
    $sku['compare_price'],
    [
        'unit' => $formatted_units[$product['stock_unit_id']]['name_short'],
        'currency' => $wa->shop->currency()
    ]
)

Базовая единица

Задаётся для товара и поэтому всегда одинаковая для всех его модификаций.

Получение значений

  • $product['base_unit_id': ID складской единицы, указанной в свойствах товара;
  • $formatted_units[$product['base_unit_id']]: свойства базовой единицы из массива $formatted_units, описанного выше в разделе «Доступные единицы измерения количества».

Есть два состояния товара, связанных со значением базовой единицы:

  1. Базовая единица не задана в свойствах товара: значение, полученное от PHP-кода, либо пустое, либо равно складской единице товара. В этом случае переменная $product['base_unit_id'] либо отсутствует, либо равна значению переменной $product['stock_unit_id'].
  2. Базовая единица задана в свойствах товара: значение, полученное от PHP-кода, заполнено и отличается от значения складской единицы. В этом случае переменная $product['base_unit_id'] содержит непустое значение, не равное значению переменной $product['stock_unit_id'].

Соотношение складской единицы измерения количества и базовой единицы

Задаётся в свойствах каждой модификации товара. Должно быть показано на витрине, если базовая единица задана в свойствах товара, т. е. если у переменной $product['base_unit_id'] непустое значение, не равное значению переменной $product['stock_unit_id'].

Получение значения

$sku['stock_base_ratio']

Цена базовой единицы

Показывать, если базовая единица задана в свойствах товара, т. е. у переменной $product['base_unit_id'] непустое значение, не равное значению переменной $product['stock_unit_id'].

Значение зависит от конкретной модификации товара и отображается с базовой единицей измерения количества.

Цена базовой единицы количества товара рассчитывается темой дизайна: она должна быть равна цене складской единицы, поделённой на соотношение единиц, — по формуле вида $sku['price'] / $sku['stock_base_ratio'].

Получение значения с названием единицы измерения

С помощью хелпера $wa->shop->formatPrice().

$wa->shop->formatPrice(
    $sku['price'] / $sku['stock_base_ratio'],
    [
        'unit' => $formatted_units[$product['base_unit_id']]['name_short'],
        'currency' => $wa->shop->currency()
    ]
)

Зачёркнутая цена базовой единицы

Показывать, если базовая единица задана в свойствах товара, т. е. у переменной $product['base_unit_id'] непустое значение, не равное значению переменной $product['stock_unit_id'].

Значение зависит от конкретной модификации товара и отображается с базовой единицей измерения количества.

Зачёркнутая цена базовой единицы количества товара рассчитывается темой дизайна: она должна быть равна зачёркнутой цене складской единицы, поделённой на соотношение единиц, — по формуле вида $sku['compare_price'] / $sku['stock_base_ratio'].

Получение значения с названием единицы измерения

$wa->shop->formatPrice(
    $sku['compare_price'] / $sku['stock_base_ratio'],
    [
        'unit' => $formatted_units[$product['base_unit_id']]['name_short'],
        'currency' => $wa->shop->currency()
    ]
)

Параметры добавления товаров в корзину

Шаг добавления товара в корзину

Не отображается на витрине.

Использовать в работе элементов выбора количества для добавления в корзину. Задаётся для всего товара, поэтому значение одинаково для всех его модификаций.

Получение значения

$product['order_multiplicity_factor']

Размер изменения количества в корзине кнопками «+/-»

Показывать рядом с кнопками изменения количества товара при добавлении в корзину. Зависит от конкретной модификации товара.

Получение значения

$sku['order_count_step']

Минимальное доступное количество для заказа

Использовать в работе элементов выбора количества товара для добавления в корзину. Зависит от конкретной модификации товара.

Получение значения

$sku['order_count_min']

Максимальное доступное количество для заказа

Использовать — в работе элементов выбора количества товара для добавления в корзину, — если настройки магазина ограничивают возможность заказа модификации в зависимости от её количества на складе.

Получение значения

$sku.count|default:0

Элементы выбора количества для добавления в корзину

Текстовое поле с кнопками уменьшения и увеличения значения «+/-», расположенными слева и справа от поля, и возможностью редактирования значения поля вручную. Показывать на странице товара и в списках товаров, в которых пользователю доступна возможность добавления в корзину.

Если размер изменения количества кнопками «+/-», заданный в свойствах модификации товара, отличается от 1, то рядом с кнопками «+/-» рекомендуется показывать это значение.

Под или над полем необходимо указать название складской единицы измерения.

Обработка количества товара, введённого вручную

  • Округлять введённое количество вверх до ближайшего значения, кратного шагу добавления в корзину, заданному в свойствах товара.
  • Если результат округления меньше минимального количества для заказа, заданного в свойствах модификации, то заменять значение поля на минимальное количество.
  • Если для модификации доступно максимальное количество для заказа и результат округления больше максимального количества, то заменять значение поля на максимальное количество.

Обработка нажатия на кнопки «+/-»

  • Увеличивать или уменьшать значение поля на значение, заданное для кнопок «+/-» в свойствах модификации товара.
  • Если результат изменения меньше минимального количества для заказа, заданного в свойствах модификации, то изменять значение поля на минимальное количество.
  • Если для модификации доступно максимальное количество для заказа и результат округления больше максимального количества, то изменять значение поля на максимальное количество.

Обновление надписей на кнопках «+/-» в зависимости от текущего значения количества

  • Если сумма минимального количества для заказа, заданного в свойствах модификации, и размера изменения количества кнопками «+/-» больше значения поля, то на кнопке уменьшения показать надпись вида «мин. [минимальное количество]». В противном случае показывать символ «-» или другой эквивалент.
  • Если для модификации доступно максимальное количество для заказа и разность между максимальным количеством и размером изменения количества кнопками «+/-» меньше значения поля, то на кнопке увеличения показать надпись вида «макс. [максимальное количество]». В противном случае показывать символ «+» или другой эквивалент.

Информация об остатках на складах

Если включено использование разных единиц измерения количества, то количество на складе в виде числа нужно показывать с обозначением складской единицы. В противном случае отображение единицы измерения количества необязательно.

Фильтрация и сортировка товаров в категориях

Показывать единицы измерения количества в инструментах фильтрации и сортировки товаров нужно, только если включена возможность выбора разных складских единиц, кроме стандартных штук.

Переменные

Доступны в шаблонах страницы категории.

  • $filter_units: массив с полной информацией обо всех единицах измерения количества, доступных в настройках фильтра;
  • $formatted_filter_units: массив с сокращённой информацией обо всех единицах измерения количества, доступных в настройках фильтра;
  • $filter_stock_units: массив с полной информацией о складских единицах измерения количества, доступных в настройках фильтра;
  • $filter_base_units: массив с полной информацией о базовых единицах измерения количества, доступных в настройках фильтра.

Форма фильтра

  • Если в текущей категории используется только 1 складская единица измерения количества
    Рядом с полями фильтрации по цене показывать надпись с названием доступной единицы измерения.
  • Если в текущей категории используются 1 складская единица измерения и несколько базовых единиц
    Рядом с полями фильтрации по цене показать элементы выбора единицы измерения. По умолчанию должна быть выбрана складская единица. В вариантах выбора должны быть доступны все единицы измерения количества, заданные в свойствах товаров в текущей категории. Среди вариантов выбора не должно быть варианта «без единиц измерения».
  • Если в текущей категории используются несколько складских единиц измерения и любое количество базовых единиц
    Рядом с полями фильтрации по цене показать элементы выбора единицы измерения. В вариантах выбора должны быть доступны все единицы измерения количества, заданные в свойствах товаров в текущей категории. Среди вариантов выбора должен быть доступен вариант «без единиц измерения» — этот вариант выбран по умолчанию.

Сортировка товаров

  • Если в товарах категории используется только 1 складская единица измерения количества
    Не показывать единицу измерения для варианта сортировки по цене.
  • Если в товарах категории используются 1 складская единица и несколько базовых единиц
    Показать варианты сортировки по ценам всех единиц товаров в категории — с названиями вида «по цене за [название единицы]».
  • Если в товарах категории используются несколько складских единиц и любое количество базовых единиц
    Показать варианты сортировки товаров:
    • по цене;
    • по ценам всех единиц товаров в категории — с названиями вида «по цене за [название единицы]».

Оформление заказа

Оформление заказа в корзине

Отображение единиц измерения количества и элементов, связанных с выбором количества товаров, регулируется логикой работы Shop-Script и не зависит от темы дизайна. Тема дизайна может при необходимости стилизовать эти элементы.

Пошаговое оформление заказа

Складская единица количества товара

  • Если выключено использование разных единиц, не показывать название единицы.
  • Если включено использование разных единиц, показывать:
    • рядом с ценой складской единицы,
    • внутри поля изменения количества товара.