Advanced product price calculation

Сложный расчет стоимости товара

Страница модуля в магазине: Сложный расчет стоимости товара · История изменений

Сложный расчет стоимости товара

Модуль рассчитывает цену товара по формуле, которую вы задаёте сами. Формула своя у каждого товара, а переменными в ней служат выбранные покупателем опции, числовые характеристики товара, глобальные переменные (общие для всех товаров константы) и параметры самого товара: базовая цена, рекомендованная цена, заказываемое количество, остаток на складе и популярность. Так считаются товары, цена которых зависит от размеров, площади, длины, тиража или сочетания нескольких параметров: мебель, стёкла, ткани, печать, стройматериалы.

Цена пересчитывается везде, где ядро CS-Cart применяет наценки опций: на странице товара при каждом изменении опций (без перезагрузки страницы), в корзине и при оформлении заказа, а также при создании и редактировании заказа администратором. Формула считает цену за единицу товара; итог по строке ядро получает как обычно, умножая её на количество. У товара с активной формулой цена полностью определяется формулой — штатные наценки вариантов опций к ней не добавляются, они служат только значениями переменных.

Модуль работает в двух режимах. В простом формула — арифметическое выражение из переменных и чисел. В профессиональном формула пишется на PHP: условия, округление, любые проверки промежуточного результата. Кроме формул модуль добавляет опциям новый тип Число (Модуль) — поле для ввода числа с диапазоном, шагом и готовыми вариантами значений.

Настройки модуля — на странице Модули → Модули CS-Commerce → Сложный расчет стоимости; формулы задаются на странице редактирования товара во вкладке Сложный расчет стоимости. Порядок работы: добавить товару нужные опции (раздел Добавление опции товару), затем записать формулу (раздел Добавление формулы товару).

Формула задаётся отдельно для каждого товара. У товаров без активной формулы модуль ничего не меняет — цена считается ядром как обычно.
Совместимость

Модуль работает на CS-Cart и Multi-Vendor начиная с версии 4.0.1 и поддерживает редакции CS-Cart, CS-Cart Ultimate, Multi-Vendor, Multi-Vendor Plus и Multi-Vendor Ultimate. Начиная с версии 4.4.0 модуль совместим с PHP 8.3.

На витрине модуль встраивается в блок опций страницы товара: он подменяет шаблон views/products/components/product_options.tpl темы Responsive своей копией с дополнительным хуком для числового типа опций, а поле количества и строки корзины дополняет через штатные хуки products:qty и checkout:items_list. Темы, построенные на Responsive, работают без доработок. Если ваша тема существенно переработала шаблон опций товара, блок опций после установки модуля может изменить внешний вид — в этом случае обращайтесь в наш центр поддержки.

В манифесте модуля объявлен конфликт с модулем price_calculation: одновременно с ним модуль не устанавливается.

Мы не можем гарантировать корректную работу модуля на проектах с большим количеством кастомизированных или сторонних модулей.

Установка модуля

После оформления и оплаты, ваш заказ будет автоматически переведен в статус Оплачен в течение считанных минут. Статус заказа Оплачен означает активацию лицензии и вам на e-mail отправляется письмо с подтверждением о получении оплаты и письмо со ссылкой на скачивание модуля. Также модуль всегда можно скачать в нашем разделе Управление лицензиями. Для установки модуля на ваш сайт, пожалуйста, выполните следующие шаги:

  1. Скачайте последнюю версию модуля на нашем сайте в разделе "Управление лицензиями" или по ссылке, отправленной по e-mail.
  2. Пройдите в раздел Модули → Управление модулями и в меню шестерёнки выберите Ручная установка.
  3. Выберите ранее скачанный файл и завершите установку модуля.

На этом установка модуля завершена.

Настройка модуля

После установки модуль готов к работе с настройками по умолчанию. Изменить их можно на странице Модули → Модули CS-Commerce → Сложный расчет стоимости; та же страница открывается кнопкой настроек модуля в списке Модули → Управление модулями. Настройки общие для всего магазина: на CS-Cart Ultimate и Multi-Vendor они не делятся по витринам и продавцам.

Основные настройки

Режим — способ записи формул. Простой (по умолчанию): формула — арифметическое выражение из переменных, чисел, знаков действий и скобок; поле формулы у товара однострочное. Профессиональный: формула — фрагмент кода PHP, результат которого присваивается переменной $price; поле формулы многострочное. Режим действует на все товары сразу, поэтому при переключении формулы всех товаров должны быть записаны в новом стиле. Под настройкой показывается пример формулы для выбранного режима.

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

Отслеживать поле кол-ва — по умолчанию выключено. Включите, если в формулах используется переменная [amount]: тогда при изменении количества на странице товара цена пересчитывается сразу, AJAX-запросом, как при смене опции. Без этой настройки на странице товара количество в формулу не попадает и учитывается только при пересчёте корзины.

Скрыть вкладку формулы для продавцов — настройка есть только на Multi-Vendor, по умолчанию выключена. Подробнее — в разделе Multi-Vendor.

После изменения значений нажмите Сохранить.

Простой режим

Простой режим.

Профессиональный режим

Профессиональный режим.

Блок версии и подписки

Справа на странице настроек показывается состояние модуля: установленная версия, наличие новой версии и срок подписки на обновления. Когда доступно обновление, отсюда можно перейти в Центр обновлений и открыть список изменений; когда подписка заканчивается или истекла — продлить её. Ниже — ссылки на оценку модуля, другие модули CS-Commerce, документацию и обратную связь. На Multi-Vendor блок виден только администратору маркетплейса.

Добавление опции товару

Переменными формулы служат опции товара. Подходят опции трёх стандартных типов — Список вариантов, Переключатель и Флажок — и опции числового типа Число (Модуль), который добавляет модуль (раздел Дополнительный числовой тип). Опции типов «поле ввода», «текстовая область» и «файл» в формуле не участвуют. Опция может быть как собственной опцией товара, так и глобальной, привязанной к товару.

Для опций с вариантами значение переменной берётся из поля Модификатор выбранного варианта — именно туда записывается число, которое должно попасть в формулу. Тип модификатора (сумма или процент) модуль не учитывает: число подставляется как есть, а что с ним делать, решает формула. У опции-флажка в формулу попадает модификатор варианта, когда флажок отмечен, и 0, когда снят.

У вариантов опций типов Список вариантов и Переключатель в формуле доступно и второе число — поле Модификатор веса: переменная [opt_Xw], с буквой w после идентификатора опции. Так у одного варианта можно хранить, например, наценку и коэффициент.

Разберём на примере. Если нужной опции ещё нет, перейдите на страницу Товары → Опции и нажмите Добавить опцию.

Новая опция

Создадим опцию Size с типом Список вариантов и укажем у неё три варианта (S — 0, M — 2, L — 3).

Значение варианта записывается в поле Модификатор.

Варианты опции

Нажмите Сохранить. Затем откройте страницу редактирования товара, вкладку Опции, и добавьте опцию товару.

Выбор опции

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

Опции товара

Добавление формулы товару

Формула задаётся на странице редактирования товара во вкладке Сложный расчет стоимости. Вкладка состоит из четырёх блоков: глобальные переменные, опции, характеристики и сама формула. Рядом с каждой переменной показан её индекс в квадратных скобках и значок + (Добавить в формулу), который дописывает переменную в конец поля формулы.

Переменные

  • Глобальные переменные [glb_N] — именованные константы, общие для всех товаров: курс, стоимость работы, коэффициент. Создаются здесь же: в строке Добавить глобальную переменную укажите имя и значение и сохраните товар. Значение — число с точностью до двух знаков после запятой. Изменение глобальной переменной действует на все формулы, где она используется; удаляется переменная крестиком в своей строке.
  • Опции [opt_N] — активные опции товара, собственные и глобальные; N — идентификатор опции. Что подставляется вместо переменной, описано в разделе Добавление опции товару.
  • Характеристики [ftr_N] — числовые характеристики товара (стиль Число, с вводом значения или выбором из списка) с заполненным у товара значением; N — идентификатор характеристики. Подставляется значение характеристики у этого товара, поэтому одна формула даёт разные цены у товаров с разными характеристиками. Нечисловые характеристики в списке не показываются.
  • Другие переменные — параметры товара: [price] — цена товара, с которой ядро начинает расчёт (с учётом оптовой цены для заказываемого количества и группы пользователей, но без наценок опций); [list_price] — рекомендованная цена; [amount] — заказываемое количество (на странице товара — минимальное количество для заказа или 1, а при включённой настройке Отслеживать поле кол-ва — введённое покупателем; в корзине — количество в строке); [in_stock] — остаток на складе; [popularity] — популярность товара по счётчику ядра (1, если данных нет).

Запись формулы

Установите Статус формулы в значение Вкл. и запишите формулу в поле Шаблон формулы. Под полем показан Пример шаблона формулы для текущего режима.

В простом режиме формула — арифметическое выражение: переменные, числа (десятичный разделитель — точка), знаки + - * / и скобки; другие символы поле не принимает. Результат выражения становится ценой товара. Проценты записываются множителем: наценка 15 % — [price]*1.15, наценка из опции в процентах — [price]+[price]*[opt_12]/100.

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

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

Формула

Нажмите Сохранить. Проверить результат можно на странице товара на витрине: при смене варианта опции цена пересчитывается без перезагрузки страницы.

Товар на витрине

Скрыть количество

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

Что ещё важно знать

  • формула считает цену за единицу товара и заменяет штатные наценки опций: у товара с активной формулой модификаторы вариантов в цену не добавляются, они служат только значениями переменных;
  • в списках товаров и блоках витрины цена показывается для вариантов опций по умолчанию; точная цена появляется на странице товара после выбора опций;
  • цена в заказе фиксируется при оформлении; при создании и редактировании заказа администратором формула применяется снова с выбранными в заказе опциями;
  • при дублировании товара формула копируется в копию, при генерации вариаций — в вариации; формулу можно включать и выключать массово и переносить импортом (раздел Массовое редактирование, импорт и копирование).

Профессиональный режим

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

В этом режиме формула — фрагмент кода PHP. Правила:

  • перед выполнением модуль подставляет вместо переменных [opt_N], [ftr_N], [glb_N], [price], [amount] и остальных их числовые значения, поэтому в коде они используются как числа: $price = [price] * [opt_3];;
  • результат присваивается переменной $price; её последнее значение становится ценой товара. Каждая инструкция заканчивается точкой с запятой;
  • доступны условия if / elseif / else, арифметика и функции PHP: round($price, 2) для округления, max() и min() для ограничения цены снизу и сверху, ceil() для округления вверх;
  • если в формуле осталась переменная, которой нет у товара, код содержит синтаксическую ошибку или $price в итоге не число, модуль показывает уведомление (при включённой настройке Дебаг ошибок) и оставляет цену товара без изменений.

Пример формулы: наценка по опциям и глобальной переменной, скидка 10 % при цене выше 50, надбавка 20 % при значении опции больше 15, округление до копеек.

$price = ([price]+[opt_1])*[opt_2]*[opt_3]*[glb_1];
if ($price > 50){
  $price = $price*0.9;
}
if ([opt_1] > 15){
  $price = $price*1.2;
}
$price = round($price, 2);

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

Глобальные переменные

Формула проверяет в условиях размер, присваивает нужный коэффициент налога и умножает на него цену.

Формула в профессиональном режиме

Формула в профессиональном режиме выполняется на сервере как PHP-код. Давайте доступ к вкладке формул только тем, кому доверяете править код магазина; на Multi-Vendor вкладку можно скрыть от продавцов настройкой модуля.

Дополнительный числовой тип

Модуль добавляет опциям новый тип — Число (Модуль). Это поле, в которое покупатель вводит число: длину, ширину, площадь, тираж. Введённое значение подставляется в формулу как переменная опции [opt_N], а в корзине и в заказе показывается вместо названия варианта.

Тип выбирается в общих настройках опции — на странице Товары → Опции или во вкладке Опции товара. Для него появляются две дополнительные вкладки.

Новый тип опции

Вкладка «Настройки»

  • Значение по умолчанию — подставляется в поле при открытии страницы товара;
  • Min. значение и Max. значение — допустимый диапазон. Если покупатель ввёл число за его пределами, подставляется ближайшая граница;
  • Шаг — кратность значения: введённое число округляется вверх до ближайшего значения вида «минимум + шаг × k».

В любое из этих полей вместо числа можно записать переменную характеристики [ftr_N] — тогда граница или шаг берутся из характеристики конкретного товара (например, максимальная ширина — из характеристики «Ширина рулона»). Список характеристик с их индексами показан под полями, когда опция редактируется со страницы товара. На витрине из заполненных значений складывается подсказка под полем: Введите число от … до … шаг ….

Настройки числового типа

Вкладка «Варианты»

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

Варианты числового типа

Нажмите Сохранить. Дальше опция используется в формуле как обычно, например [price]*[opt_N].

На витрине поле выглядит примерно так:

Числовая опция на витрине

Поле принимает только цифры и точку, запятая заменяется точкой. Цена пересчитывается сразу после ввода — при уходе из поля или по клавише Enter.

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

Multi-Vendor

На Multi-Vendor формулы задают и администратор маркетплейса, и продавцы — каждый у своих товаров. Особенности:

  • Скрыть вкладку формулы для продавцов — настройка модуля, которая появляется только на Multi-Vendor. Если она включена, продавцы не видят вкладку Сложный расчет стоимости у товаров и поле формулы в массовом редактировании; формулы, заданные администратором, продолжают работать. Так формулы остаются под контролем администратора маркетплейса.
  • Глобальные переменные делятся по владельцу. Переменные, созданные администратором, видны всем и подставляются в формулы любых товаров; переменные продавца видны только в его товарах. Продавец может менять и удалять только свои переменные, переменные администратора у него показаны без возможности правки. Администратор, редактируя товар продавца, видит и общие переменные, и переменные этого продавца.
  • Общие товары для продавцов: если товар продавца создан из общего товара, у которого задана формула, рядом с полем Шаблон формулы показывается значок копирования с подсказкой Кликните для добавления формулы из главного товара. Он подставляет формулу общего товара в поле; после сохранения формула работает у товара продавца независимо от общего.

Массовое редактирование, импорт и копирование

Массовое редактирование

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

Импорт и экспорт

В штатном импорте и экспорте товаров (Администрирование → Импорт данных и Экспорт данных, раздел Товары) модуль добавляет два поля: Formula — текст формулы и Formula status — её статус, A (включена) или D (выключена). Так формулы переносятся между магазинами и правятся в таблице.

Дублирование товаров и вариации

  • при дублировании товара (действие Дублировать) формула и её статус копируются в новый товар вместе с числовыми опциями и их настройками;
  • вкладка Сложный расчет стоимости есть и у вариаций товара: формулу можно задать отдельно для каждой вариации. При генерации вариаций формула исходного товара копируется в те вариации, у которых своей формулы ещё нет.

Обновление модуля

Для того, чтобы иметь доступ к обновлениям модуля, у вас должен быть активный период подписки на обновления. При истекшем периоде подписки, вам будут доступны только обновления, выпущенные до даты истечения вашей подписки. Продлить подписку на обновления можно в разделе "Управление лицензиями" на нашем сайте. 

Модуль поддерживает поставку обновлений через Центр обновлений CS-Cart. О выходе новых версий модуля вас оповестит встроенный Центр уведомлений Cart (колокольчик). Обновление модуля с помощью Центра обновлений позволит без потерь настроек данных модуля произвести переход на более новую версию модуля.

Непосредственно перед обновлением, крайне рекомендуется делать полный бэкап сайта (базы данных и файлов) вашего магазина средствами сервера или хостинга.

Обновление модуля через Центр обновлений:

  1. В верхнем меню пройдите в раздел Администрирование → Центр обновлений;
  2. В меню шестеренки нажмите "Проверить доступные обновления"
  3. Cреди списка доступных обновлений найдите нужное и нажмите кнопку Обновить;
  4. Следуйте всем инструкциям, которые будут показаны при процедуре обновления;
  5. Рекомендуется произвести очистку кэша CS-Cart после завершения установки обновлений удалением папки var/cache на вашем сервере или добавлением в адресную строку параметра ctpl (прмиер: https://domain.com/admin.php?ctpl).

Переустановка модуля удалением:

Переустановка модуля означает удаление настроек и данных модуля. Переустановка позволит получить чистую установку модуля. Для переустановки модуля с сохранением настроек и данных, пожалуйста, обратитесь в наш Центр поддержки для оказания такой услуги. 

Для полной переустановки модуля без сохранения данных выполните следующие шаги:

  1. Пройдите в раздел Модули → Управление модулями и найдите старый установленный модуль.
  2. Нажмите в меню шестеренки модуля кнопку удалить.
  3. Скачайте последнюю версию модуля на нашем сайте в разделе "Управление лицензиями".
  4. Пройдите в раздел Модули → Управление модулями и в меню шестеренки выберите Ручная установка.
  5. Выберите ранее скачанный файл и завершите установку модуля.

Техническая поддержка

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

Для того, чтобы воспользоваться нашей технической поддержкой, выполните следующие шаги:

  1. На нашем сайте центра поддержки https://helpdesk.cs-commerce.com/ авторизуйтесь под своей учетной записью;
  2. Нажмите на кнопку "Новая заявка";
  3. Заполните все необходимые поля и создайте заявку (Вы получите на e-mail письмо с подтверждением);
  4. Ожидайте ответ специалиста (на ваш e-mail придет уведомление об ответе на вашу заявку) в соответствии с регламентами работы службы техподдержки.

Если Вы не получили ответ в течении сроков, обозначенных в регламентах, напишите нам на e-mail [email protected] сообщение с темой заявки и мы постараемся решить вас вопрос в ближайшее время.

Техническая поддержка по диалогу в чате на сайте, прямым телефонным обращениям или e-mail письмам не осуществляется. Вся помощь проходит через центр поддержки. Внимательно изучайте документацию к модулю и условия технической поддержки перед созданием обращения.

Ограничения и предупреждения

Рекомендуем ознакомиться с общими ограничениями:

  1. Фрагменты кода  или некоторые файлы модуля могут иметь закрытую (закодированную) часть. Закодированная часть не создает проблемы в доработке модуля;
  2. Модуль будет работать только на тех доменах, которые указаны в лицензии пользователя. При попытке использования решения на установках CS-Cart, домены которых не включены в лицензию, модуль будет автоматически выключен;
  3. Установка локально не допускается системой лицензирования. Чтобы модуль работал на дополнительном домене (псевдониме) укажите этот псевдоним на странице управления лицензиями. На один домен допускается указать до трех псевдонимов для нужд тестирования и разработки.
  4. Главный домен лицензии вы можете менять самостоятельно на странице управления лицензиями. 
Для доступа к изменению/добавлению доменов и псевдонимов лицензии, подписка на обновления должна быть активной. Для изменения домена лицензии с истекшим периодом подписки, сначала необходимо продлить подписку на обновления. 

История версий

Версия 4.5.0 от 22 сентября 2026 года

  • [!] Исправлен пересчёт цены на витрине: если у товара была только числовая опция калькулятора (без других опций с наценками), цена при вводе значения не обновлялась;
  • [*] Обновлён блок информации о версии и подписке в настройках модуля;
  • [+] Добавлена совместимость с PHP 8.3.

Версия 4.4.0 от 3 марта 2026 года

  • [!] Исправлена проблема совместимости с модулем «Комплекты товаров»;
  • [+] Добавлена возможность скрывать поле выбора количества товара на витрине;
  • [+] Добавлена совместимость с PHP 8.3;
  • [*] Базовые обновления безопасности компонентов модуля.

Версия 4.3.2 от 28 марта 2025 года

  • [!] Исправлено предупреждение PHP на некоторых конфигурациях.

Версия 4.3.1 от 28 октября 2024 года

  • [*] Добавлен класс для управления стилями подписи под опцией;
  • [*] Поле ввода значения: если введено значение больше или меньше заданного диапазона, подставляется крайнее значение;
  • [*] Базовые обновления безопасности.

Версия 4.3.0 от 12 марта 2024 года

  • [!] Исправлена возможность редактирования глобальной переменной продавцом (Multi-Vendor);
  • [+] Добавлена возможность копирования формулы из общего товара (Multi-Vendor);
  • [+] Добавлена возможность скрывать вкладку с формулой от продавцов (Multi-Vendor).

Версия 4.2.1 от 24 ноября 2023 года

  • [*] Базовые обновления безопасности модуля.

Версия 4.2.0 от 17 июля 2023 года

  • [!] Исправлена проблема с модулем «Общие товары для продавцов» на Multi-Vendor;
  • [*] Базовые обновления безопасности.

Версия 4.1.2 от 19 октября 2022 года

  • [!] Исправлена проблема при добавлении опции со страницы товара на последних версиях CS-Cart;
  • [+] Добавлена совместимость с PHP 8.0.

Версия 4.1.1 от 7 сентября 2022 года

  • [+] Добавлена возможность выключать уведомления об ошибке в формуле.

Версия 4.1.0 от 5 сентября 2022 года

  • [+] При дублировании товара формула копируется в новый товар;
  • [+] При создании вариации товара формула исходного товара копируется в вариацию.

Версия 4.0.12 от 19 июля 2022 года

  • [+] Добавлена настройка включения и выключения пересчёта цены при изменении количества товара перед добавлением в корзину;
  • [*] Базовое обновление безопасности.

Версия 4.0.11 от 9 июня 2022 года

  • [+] Добавлена возможность использовать сложный расчёт с общими товарами (Multi-Vendor).

Версия 4.0.10 от 5 апреля 2022 года

  • [!] Исправлена ошибка на странице редактирования заказа с расчётной опцией.

Версия 4.0.9 от 17 марта 2022 года

  • [!] Исправления, связанные с ошибкой сборки предыдущего релиза.

Версия 4.0.8 от 15 марта 2022 года

  • [+] Добавлена возможность задавать расчётную формулу для вариации товара;
  • [!] Исправлена проблема с дублированием вкладок на CS-Cart 4.14.x.