Функция калькулятора находится в файле: engine/ajax/webform/webform.js
По умолчанию встроена одна функция "WebFormDefaultPrice", которая считает сумму всех выбранных опций, которые указаны в настройках поля. Вы также можете создать для себя иной подсчёт стоимости, создав функцию (рекомендуется создавать её в конце данного файла) и указав её имя в настройках самой формы.
Имя функции может быть любым, в настройках необходимо принять имя формы (пример: function TestForm( NameWebForm ){}). Единственное, что требуется от формы, это вернуть значение "true" в формате boolean, и в переменную "WebFormModResultPrice" вставить результат подсчёта, всё остальное сделает за вас.
При выводе формы, модуль генерирует данные массивов для JS. Для примера возьмём форму с альтернативным именем "form", рассмотрим подробнее:
WebFormModPriceFormOption['form']['form'] = "form";
WebFormModPriceFormOption['form']['result'] = "resultPrice_form";
WebFormModPriceFormOption['form']['function'] = WebFormDefaultPrice;
в данный массив заполняеются настройки формы, то есть имя формы, идентификатор куда должен вставляться результат и функция для запуска подсчёта.
WebFormFieldPrice['form']['field[marka-avtomobilya][]'] = [0,200,800,3000];
WebFormFieldPrice['form']['field[vy-hotite][]'] = [10,55,100];
WebFormFieldPrice['form']['field[model]'] = [350,500];
Выше указанный массив отвечает за саму цену опции. Например мы имеем поле "Марка автомобиля", цена первого значения (первый текст из выпадающего списка) будет равняться 0, а второй 200 и т.д.
WebFormAllowField['form']['field[marka-avtomobilya][]'] = true;
WebFormAllowField['form']['field[vy-hotite][]'] = true;
WebFormAllowField['form']['field[model]'] = true;
В данный массив входят имена полей, которые разрешены для подсчёта.
WebFormFieldIndex['form']['marka-avtomobilya'] = "field[marka-avtomobilya][]";
WebFormFieldIndex['form']['vy-hotite'] = "field[vy-hotite][]";
WebFormFieldIndex['form']['model'] = "field[model]";
Индексы полей. Например в админцентре в настройках поля вы указали альтернативное имя "model", в при заполнении формы оно выведится как "field[model]".
Небольшие подсказки:
Некоторые типы поля позволяют выбирать одно и больше значений одновременно. Для того, чтобы приплючовать каждое значение к результату стоимости, необходимо проверять тип поля и запускать подсчёт конкретного поля в цикле, рассмотрим пример:
Поле "Марка автомобиля" является списком с возможностью выбора более одной опции. Следовательно её выводимое имя будет не "field[marka-avtomobilya]", а "field[marka-avtomobilya][]", то есть означает, что это уже заготовка массива. Так как мы знаем, что это список с возможностью выбора нескольких значений, то в JS этот тип называется не "select", а "select-multiple". Подсчитаем сумму всех выбранных значений:
// Установим начальную сумму, которая равняется нулю
var ThisPrice = 0;
// В переменную определим само поле
// WebFormModPriceFormOption[ NameWebForm ]['form'] - отдаст имя поля
var Element = document.forms[ WebFormModPriceFormOption[ NameWebForm ]['form'] ]['field[marka-avtomobilya][]'];
// Запускаем цикл, который проверит каждое значение поля
for( var imultiple = 0; imultiple < Element.options.length; imultiple++ )
{
// Проверяем, выделена ли опция
if( Element.options[ imultiple ].selected )
{
// Если выделена, то прибавляем к сумме значение, которое указали в админцентре для данного поля и конкретного значения
ThisPrice = ThisPrice + WebFormFieldPrice[ NameWebForm ][ i ][ imultiple ];
}
}
Зная имя всех нужных вам полей, вы можете создать более простой подсчёт стоимости (то есть не универсальный), или в ином случае придётся пользоваться предоставленными данными массивами JS, сгенерированными модулем.