Характеристики товара

Главные вкладки

Аватар пользователя Loac Loac 2 декабря 2009 в 17:48

Как проще реализовать характеристики товара?

ССК становится очень неудобен, когда их становится сотни и особенно, если часто приходится добавлять новые.

Кроме того:

  • Если характеристик много, то таблица в mysql очень сильно расползается, так как каждое поле, это отдельный столбец.
  • При добавлении нового поля, приходится выдумывать ему системное имя. Хотя, можно ограничится каким-нибудь att_1, att_2 и так далее, но такое решение не вызывает восторга.
  • Я не любитель для каждого типа товара создавать новый тип ноды, что влечет за собой огромное количество полей для ввода при создании ноды, большинство из которых нужны лишь однажды.
  • Если все же использовать разные тип ноды, то это влечет за собой другую проблему. Часто у близких по тематике товаров есть много как общих так и различных характеристик. Что опять же, добавляет много лишних полей, много таблиц в базе по каждой из общих характеристик, усложняет поиск и фильтрацию.

Комментарии

Аватар пользователя Тыдж Тыдж 2 декабря 2009 в 18:14

"Loac" wrote:
Если характеристик много, то таблица в mysql очень сильно расползается

дык какая вам разница-то? посетители на сайт ходят или в базу данных? а у вас есть UI
"Loac" wrote:
При добавлении нового поля, приходится выдумывать ему системное имя

включаем фантазию...
"Loac" wrote:
огромное количество полей для ввода при создании ноды, большинство из которых нужны лишь однажды.

я слышал, сейчас есть специальные модули, которые интуитивно показывают нужные поля, в зависимости от того, о чем вы сейчас думаете Smile
еще используйте conditional fields например
"Loac" wrote:
много как общих так и различных характеристик

в cck одно поле можно использовать в разный типах, не знали?

на готовом сайте если вас смущает постоянное дерганье базы - настройте файловый кеш, делов-то

Аватар пользователя Loac Loac 2 декабря 2009 в 18:52

Уже был опыт написания каталога с большим количеством полей. Редактировать такую конструкцию ноды (добавить или изменить поле) становится очень проблематично, так как страница в админке начинает весить целую килотонну. Все долго грузится и ужасно лагает. А полей было не так уж и много. Около 100. Сейчас планируется магазин, где различных характеристик будет более 1000.

Забивать номенклатуру буду не я, а девочка, которая печатает двумя указательными пальцами. Ей нужно чтобы на странице были одно поле и одна кнопка «добавить». Чуть сложнее и уже ни за что не разобраться.

Тыдж wrote:
дык какая вам разница-то? посетители на сайт ходят или в базу данных? а у вас есть UI

Это необходимо для моего душевного спокойствия. Если я буду знать, что под капотом у меня все аккуратно по полочкам разложено и работает так как задумано, то и спать я буду лучше.

Quote:
включаем фантазию...

Какая фантазия? Нудная монотонная работа.

Quote:
еще используйте conditional fields например

Та же проблема, когда полей становится очень много полей. И не забывайте про девочку, которая в админке обязательно наломает дров. Система должна быть максимально простой.

Quote:
в cck одно поле можно использовать в разный типах, не знали?

Знал и написал, чем мне этот вариант не нравится «много таблиц в базе по каждой из общих характеристик».

Аватар пользователя Тыдж Тыдж 2 декабря 2009 в 19:33

"Loac" wrote:
Это необходимо для моего душевного спокойствия

для душевного спокойствия поставьте VPS
"Loac" wrote:
Знал и написал, чем мне этот вариант не нравится

я имел ввиду что ОДНО единственное поле можно раскидать в разные типы, то есть создали поле "цена" (соответственно создалась в базе таблица) и используете это же поле для типа Карандаши, Тетрадки, Ручки и т.д. куда уж меньше таблиц епт?
и КАК моя дурья башка не может понять, можно доверять девочке заполнять ведомости по товарам, тип данных которых состоит из такого числа полей... девочку на кол, маникюр под гильятину.

я не могу даже придумать, какую тематику можно выдумать, чтобы было до 1к полей в одном типе О_о нужен ли такой магазин вообще?

Аватар пользователя Loac Loac 2 декабря 2009 в 19:50

1000 характеристик по все типам. Например, тот же Кей.

Но я понял вашу позицию. ССК и ни каких компромиссов Smile

Аватар пользователя Обухов Никита Обухов Никита 2 декабря 2009 в 23:57

Если я правильно понимаю, о чем речь - то гляньте как это сделано в ubercart attributes.

Можно оставить 1 тип товара, и к нему добавлять необходимые атрибуты. Ну а каждый атрибут имеет некоторое количество опций.

В том модуле опции к атрибутам забиваются отдельно и собсна девочка в админке сможет добавить атрибут, выбрать какие-то его опции и всё.

В вашем случае (обратно если верно понял) вам этот модуль не подойдет, но можно сделать свой, по аналогии.

То бишь в БД 4 таблицы,
mymodyle_attributes (Поля aid, name, label)
mymodule_attribute_options (oid, aid, name, weight)
mymodule_node_attributes (nid, aid, name)
mymodule_node_options (nid, oid, name)

При добавлении ноды выбираем нужные атрибуты, к ним выбираем опции из существующих, или заносим свои.

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

Аватар пользователя Loac Loac 3 декабря 2009 в 1:05

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

Мне требуется имено перечисление большого количества характеристик.

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

Аватар пользователя gorr gorr 3 декабря 2009 в 18:23

Может я не понял...но что это за товары, у которых более 1000 различных, характеризующих их параметров, которые надо забивать в поля, приведите пример! Просто любопытно, может Вы не туда копаете?

Аватар пользователя Loac Loac 3 декабря 2009 в 19:37

1000 характеристик – это на все виды товаров. А не в каждой ноде по 1к параметров.

Делать для каждой разновидности товара свой тип ноды и добавлять к ней по 20-30 полей мне не нравится.

Quote:
приведите пример

Например, Кей. Или любой другой магазин, который торгует всем подряд.

Аватар пользователя Тыдж Тыдж 3 декабря 2009 в 19:49

на Кей заходят более 30к хостов каждые сутки, вы думаете он пожадничает купить мощный сервер чтобы не переживать за размер и количество таблиц? или поскупится нанять человека с мозгами не 20-летней блондинки? Может все-таки не по Сеньке шапка?

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

Аватар пользователя Тыдж Тыдж 3 декабря 2009 в 19:54

в догонку... вы представляете себе структуру таблицы, если лепить в нее все подряд? не боитесь что база тупо этого не выдержит? myisam ведь помоему блокирует записи в которых происходит действие, а inno - не для всех таблиц подходит...
(не спец, могу быть не прав)

Аватар пользователя Loac Loac 3 декабря 2009 в 20:16

Quote:
если вам ничего не нравится, почему бы совсем не отказаться от cck, оставьте тип story и пусть себе девочка набирает размер, длина, вес...
Не уверен, что впоследствии мне понравиться делать выборку по этим "полям" Smile

Аватар пользователя Loac Loac 4 декабря 2009 в 18:58

Вот что накропал. Извиняюсь за ролик, но, на мой взгялд, так наиболее быстро и наглядно можно донести идею.

В двух словах: для модуля используется две таблицы. С атрибутами и значениями атрибутов. Модуль сверяет названия, и если такой атрибут уже есть, добавляет для него значения в конкретной ноде. Если нет, то сначала создает атрибут, а потом сохраняет для него значение.