Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Наборы параметров для HTML блока и переключение между ними (https://javascript.ru/forum/jquery/63976-nabory-parametrov-dlya-html-bloka-i-pereklyuchenie-mezhdu-nimi.html)

zahod5277 12.07.2016 14:33

Наборы параметров для HTML блока и переключение между ними
 
Здравствуйте!
Мастерю что-то вроде опций товара в интернет-магазине. Дело в том, что опций много, и в зависимости от одной опции, меняются другие опции.
Например
Есть футболка. Футболка может быть пяти размеров - супер маленькая, маленькая, обычная, большая, супер большая.
В зависимости от того, какой размер выбран, у футболки может быть разный тип ткани (если маленькие, то хлопок, если средняя и больше, то например, синтетика)
И опять таки, если выбрана синтетика, то рисунок на футболке может быть сделан только одним типом краски (когда для хлопка можно выбрать три типа краски) и она не может быть красного цвета.

Я пытаюсь сообразить, как бы это грамотнее все сделать.
Все эти опции разделены на группы радио кнопок и в зависимости от выбранных опций, меняется превью товара.
Сейчас это выглядит как перебор кучи условий if-else и замена состояний тех или иных форм ввода и изменение классов у картинки-превью.
Код разросся почти до 200 строк и смотреть на него не приятно.
Буду рад любой помощи, спасибо.

laimas 12.07.2016 14:50

Цитата:

Сообщение от zahod5277
Все эти опции разделены на группы радио кнопок


Интересно, а где и как хранятся эти характеристики товара на сервере?

zahod5277 12.07.2016 15:08

Все опции хранятся в JSON в базе данных вот так:
[{"X_id":"1","name":"","description":"","size":"","price":"1234","paint":"123","paint2":"0","canvas":"3900","nodecor":"0","mont1":"231","mont2":"123","print":"1234","mont3":"2344"},
{"X_id":"2","name":"","description":"","size":"40*60","price":"3000","paint":"400","paint2":"0","canvas":"44","nodecor":"0","mont1":"213","mont2":"312","print":"222","mont3":"2345"},
{"X_id":"3","name":"","description":"","size":"60*90","price":"5000","paint":"333","paint2":"0","canvas":"22","nodecor":"0","mont1":"123","mont2":"423","print":"500","mont3":"2523"},
{"X_id":"4","name":"","description":"","size":"100*150","price":"10000","paint":"333","paint2":"0","canvas":"553","nodecor":"566","mont1":"23","mont2":"324","print":"123","mont3":"52325"},
{"X_id":"5","name":"","description":"","paint":"223","paint2":"343","canvas":"77","nodecor":"777","mont1":"342","mont2":"324","print":"1234","mont3":"52523"}]


Где name и description это описание размера, а остальное - наценка за определенные опции, за краску, тип ткани и все такое.
Но связей зависимостей одной опции от другой нигде никак не указано, это просто известно и не меняется никогда.

laimas 12.07.2016 15:22

Цитата:

Сообщение от zahod5277
Все опции хранятся в JSON в базе данных


Вот это и плохо, отсюда и грабли.

zahod5277 12.07.2016 15:28

К сожалению, этот формат использует модуль CMS, ничего с этим сделать нельзя(

laimas 12.07.2016 15:45

Цитата:

Сообщение от zahod5277
этот формат использует модуль CMS

Модуль, это не ядро, его и переписать можно. Хранить в базе вместо характеристик, каждая из которых может быть связана со множеством товаров, строки - это и избыточность данных, и сведение на нет всего преимущества базы. Ведь если товаров на странице много, и характеристика может может быть связана со множеством из них, то даже без асинхронного запроса к серверу, используя объект, все будет куда более компактнее и на клиенте.


Часовой пояс GMT +3, время: 06:52.