Поддержка дробного количества и единиц измерения количества товаров в темах дизайна
Функциональность лицензий 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
, описанного выше в разделе «Доступные единицы измерения количества».
Есть два состояния товара, связанных со значением базовой единицы:
- Базовая единица не задана в свойствах товара: значение, полученное от PHP-кода, либо пустое, либо равно складской единице товара. В этом случае переменная
$product['base_unit_id']
либо отсутствует, либо равна значению переменной$product['stock_unit_id']
. - Базовая единица задана в свойствах товара: значение, полученное от 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 и не зависит от темы дизайна. Тема дизайна может при необходимости стилизовать эти элементы.
Пошаговое оформление заказа
Складская единица количества товара
- Если выключено использование разных единиц, не показывать название единицы.
- Если включено использование разных единиц, показывать:
- рядом с ценой складской единицы,
- внутри поля изменения количества товара.