Справка » Документация по модулю "Веб формы"

Copyright © 2022 TCSE-cms.com
Просмотр справки Размер шрифта: Уменьшить шрифтУвеличить шрифт
Калькулятор стоимости
Калькулятор стоимости работает на языке Javascript, что не создаёт никакой нагрузки на ваш сервер т.к. выполняется на стороне клиента.

Функция калькулятора находится в файле: 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, сгенерированными модулем.
for( var imultiple = 0; imultiple < Element.options.length; imultiple++ )
                            {
                                if( Element.options[ imultiple ].selected )
                                    {
                                        ThisPrice = ThisPrice + WebFormFieldPrice[ NameWebForm ][ i ][ imultiple ];
                                    }
                            }