Вычисление суммы
Цены в конструкторе задаются в кабинете управления — в разделе "Цены" есть таблица цен. Если возможностей этой таблицы не хватает,
то нужно писать скрипт расчета суммы, о котором этот раздел. Он позволяет описать более сложные ситуации и нюансы. Скрипт пишется на языке JavaScript,
и запускается после каждого изменения в конструкторе, например после выбора цвета изделия.
Нам нужно получать какие-то параметры конструктора, и на их основе менять сумму.
Получать параметры конструктора можно из переменной
v. В этой переменной хранятся следующие параметры:
Вот самый простой пример скрипта:
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) ){
sum = 800;
if( v.unicalMatch(8375) ) sum += 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) ){
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;
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;
Здесь номера в коде и номера в описании не совпадают специально, чтобы обратить внимание, что номера начинаются с нуля.
В чистом виде этот пример выглядит так:
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;
}
Это означает, что изменение суммы от форматов будет происходить только в том случае, когда выбран четвёртый по счёту размер одежды (счёт с нуля).