Открыть меню

Вычисление суммы

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

Нам нужно получать какие-то параметры конструктора, и на их основе менять сумму. Получать параметры конструктора можно из переменной v. В этой переменной хранятся следующие параметры:
Параметр Описание Возможные значения
v.unicalMatch( unical )функция проверки совпадения unical
Пример:
if( v.unicalMatch(1350) ) sum = 500;
число
v.baseномер выбранного предмета0, 1, 2, …
v.modelномер выбранной модели0, 1, 2, …
v.colorномер выбранного цвета модели0, 1, 2, …
v.sideномер выбранной стороны0, 1, 2, …
v.sexномер выбранного пола0 - мужской, 1 - женский
v.ageномер выбранного возраста0, 1, 2, …
v.sizeпорядковый номер выбранного размера одежды0, 1, 2, …
v.methodномер выбранного метода нанесения изображения (метода печати)0, 1, 2, …
v.formats[ номер_стороны ]уникальный номер выбранного формата для указанной сторонычисло
v.filledколичество заполненных сторон (на которых что-то нарисовали)0, 1, 2, …
v.sidesинформация по каждой стороне (см. ниже)массив
v.sides[ номер_стороны ].filledзаполнена ли сторона0 - пустая, 1 - заполнена
v.detVar( номер_варианта )
или
v.detVar( номер_варианта, номер_стороны_продукта )
выбран ли сейчас вариант детали с указанным номером (Unical ID)
Пример:
if( v.detVar( 392 ) ) sum = 500;
Вторым аргументом можно указать номер стороны продукта, если такой вариант может быть на нескольких сторонах:
if( v.detVar( 392, 2 ) ) sum = 500;
число

Вот самый простой пример скрипта:
sum = 100
Такой скрипт будет говорить конструктору, что сумма всегда равна сотне. Валюту писать не нужно. Чтобы указать сумму, задавайте нужное значение глобальной переменной sum. По умолчанию эта переменная равна нулю. В неё можно писать любые числа, включая дробные.

В вашем скрипте можете писать всё, что умеет JavaScript, – математические операции, условия, функции, комментарии и т.д. Ошибки в вашем скрипте могут привести к ошибкам конструктора в целом, тогда он может не запуститься или зависнуть. В этом случае отмените последние изменения в скрипте.

Unical

Если в кабинете в дереве предметов подводить курсор к предметам, моделям, цветам и сторонам, вы увидите слева от них надпись вида base 4, u: 59, которая сообщает порядковый номер и уникальный идентификатор (unical, о нём пойдёт речь здесь).

Unical не имеет недостатков, которые есть у параметров v.base, v.model, v.color и v.side (их номера сбиваются каждый раз, когда вы пересортировываете или отключаете что-то в дереве предметов, и приходится тогда обновлять номера в скрипте расчета суммы). Unical позволяет идентифицировать нужный предмет, модель, цвет или сторону. В данном скрипте это используется так:

if( v.unicalMatch(1020) ) sum = 510;
Это означает, что если сейчас показан предмет, модель или цвет с unical 1020, то сумма будет 510.

Вот более сложный пример:
if( v.unicalMatch(8361) ){ // 8361 - это например unical предмета "футболка"
    sum = 800; // это будет сумма футболки
    if( v.unicalMatch(8375) ) sum += 150; // 8375 - это например unical цвета "красная" (футболка), для данного цвета набавляем сумму на 150.
}

Примеры и пояснения

Не копипастите отсюда примеры в кабинет! Это вам ничего не даст, потому что ситуации в этих примерах не полностью совпадают с вашей. Разберитесь с принципом работы и только потом пишите свой.

Пример как задавать сумму в зависимости от количества заполненных сторон, например сторон футболки. Допустим, что у нашей футболки только две стороны – передняя и задняя. Если стороны не заполнены, то сумма за пустую футболку 300 р. Если заполнена только одна сторона, то сумма 500 р. Если две стороны – 700 р. Вот код:
sum = 300;
if( v.filled == 1 ) sum = 500;
if( v.filled == 2 ) sum = 700;
Здесь 1 и 2 означают количество заполненных сторон, а не номер стороны. Вот другой вариант, когда сумма увеличивается на 20, если заполнено больше двух сторон:
if( v.filled > 2 ) sum += 20;
Если вы напишете этот код как здесь, то он будет применяться для всех предметов и моделей. Однако обычно это нужно для определенных, притом для каждого предмета или модели свой расчёт. Вот тот же пример для "только синей футболки с длинными рукавами":
if( v.unicalMatch(7826) ){ // 7826 - это unical синей футболки с длинными рукавами
    sum = 300;
    if( v.filled == 1 ) sum = 500;
    if( v.filled == 2 ) sum = 700;
}
Здесь 7826 взят для примера, у вас уникальные номера будут другие. Здесь мы указали unical цвета. Если например указать unical предмета, то под данный расчет попадут все модели этой футболки. Если указать unical модели "с длинными рукавами", то в расчет попадут все цвета данной модели, а нам нужен здесь только синий цвет, поэтому unical берём из цвета. В вашем случае можете брать unical от предмета, если расчет для всего поддерева данного предмета. Или от модели, если расчет для всех цветов данной модели и так далее.

Теперь предположим, что изначальная сумма 500 р. А если на задней стороне что-то нарисовано, то сделать сумму 700 р. Вот код:
sum = 500;
if( v.sides[1].filled == 1 ) sum = 700
Здесь v.sides[1].filled == 1 означает заполненность задней стороны. Здесь она номер 1, но у вас может быть другой номер между квадратных скобок, например:
if( v.sides[3].filled == 1 ) sum = 700

И последний пример, комментарии будут по ходу кода:
sum = 500; // начальная сумма 500 рублей
if( v.base == 1 && v.model == 2 ){
    // если выбран второй предмет и третья модель (лучше используйте v.unicalMatch)
    sum += 300; // то сумму увеличим на 300 рублей
    // а если при этом заполнена третья сторона, то добавим еще 100 рублей:
    if( v.sides[2].filled == 1 ) sum += 100;
} // фигурные скобки нужны если после условия выполняется много действий
if( v.sex == 1 ) sum -= 50; // если женский пол, то снизить сумму на 50
// а если выбран четвертый метод печати, то сумма 1000 рублей, несмотря на всё предыдущее:
if( v.method == 3 ) sum = 1000;
Здесь номера в коде и номера в описании не совпадают специально, чтобы обратить внимание, что номера начинаются с нуля. В чистом виде этот пример выглядит так:
sum = 500;
if( v.base == 1 && v.model == 2 ){
    sum += 300;
    if( v.sides[2].filled == 1 ) sum += 100;
}
if( v.sex == 1 ) sum -= 50;
if( v.method == 3 ) sum = 1000;

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

Как расставлять скобки и точку с запятой:

if( условие ) тут одно действие;
if( одно_условие && второе_условие ) тут одно действие;
if( условие ){
    одно_действие;
    второе_действие;
}
if( одно_условие || второе_условие ){
    одно_действие;
    второе_действие;
}

ОператорыОписание
=записать в переменную (присвоить значение)
==равенство при сравнении
>больше
<меньше
>=больше или равно
<=меньше или равно
!=не равно
+ - * /плюс минус умножить разделить
+=увеличить имеющееся значение на
-=уменьшить имеющееся значение на
*=увеличить имеющееся значение в
/=уменьшить имеющееся значение в
&&И
||ИЛИ   (две вертикальные черты)

Более подробного обучения написанию скрипта расчета суммы здесь нет, потому что он пишется на языке JavaScript, который с одной стороны прост при элементарных задачах, с другой стороны очень обширен и сложен. Если вы не понимаете описанное в данном разделе, то для написания скрипта можете нанять JavaScript-программиста или верстальщика со знанием JavaScript.

Форматы

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

Чтобы понять, какой формат сейчас выбран, нужно получить его порядковый номер следующим образом:
v.formats[ номер_стороны ]
Номер стороны нужно указывать потому, что у одного продукта может быть много сторон, и на каждой из них можно выбрать разный формат. Если у продукта одна сторона, то пример может быть таким:
if( v.formats[0] == 3698 ) sum = 500;
Это означает: если у нулевой стороны уникальный номер выбранного формата равен 3689, то сумму сделать равной 500. Ноль здесь потому, что порядковый номер сторон начинается с нуля. А число 3689 - просто для примера уникального номера, реальный уникальный номер нужно смотреть в кабинете.

Вот другой пример, когда у предмета несколько сторон:
if( v.formats[0] == 3698 ) sum += 100;
if( v.formats[0] == 3711 ) sum += 120;
if( v.formats[1] == 5123 ) sum += 50;
if( v.formats[1] == 5261 ) sum += 57;
Это означает:
1) если у нулевой стороны уникальный номер выбранного формата равен 3698, то к имеющейся сумме прибавить 100;
2) если у нулевой стороны уникальный номер выбранного формата равен 3711, то к имеющейся сумме прибавить 120;
3) если у первой стороны уникальный номер выбранного формата равен 5123, то к имеющейся сумме прибавить 50;
4) если у первой стороны уникальный номер выбранного формата равен 5261, то к имеющейся сумме прибавить 57;

Вы можете комбинировать форматы с другими параметрами, например с выбранным размером одежды:
if( v.size == 3 ){
    if( v.formats[0] == 3698 ) sum += 100;
    if( v.formats[0] == 3711 ) sum += 120;
}
Это означает, что изменение суммы от форматов будет происходить только в том случае, когда выбран четвёртый по счёту размер одежды (счёт с нуля).
Получить конструктор
30 дней бесплатный
тестовый период