Пуля — дура. Пых — молодец.

Добро пожаловать на Пыху!

Логин:
Пароль:
 

Нет прописки? Зарегистрируйся!

Новости

Мы в твиттере!
Мы вконтакте!
Мы на яндексе!

Краснодарское время: 25 Май, 2012, 07:02:20

Страниц: 1 2 [3]
Печать
Автор Тема: Организация многоуровневого меню  (Прочитано 580 раз)
0 Пользователей и 3 Гостей смотрят эту тему.
kolobok    ↓ 
09 Декабрь, 2011, 12:48:51
НЕ ХУЕТА! ХУЕТА!


Карма: 0
Сообщений: 45
Сила слова: 0

В который раз пытаюсь правильно понять и нашел как раз то, что мне надо воспроизвести: http://www.rutector.ru/price/index.shtml
Буду рад, если кто прочтет и попытается помочь.
Расскажу как я это вижу, а вы меня поправьте где я ошибся.
1. Таблица, например catalog_menu: id, имя, описание, url
Например запись вида: 1,Сварочное оборудование, описание, url=welding
2. Таблица основная, большущая category: category_id, url,  parent_id, name, описание
Например запись вида: 135, welding, 0, Сварочные агрегаты, описание
Например запись вида: 1344, welding, 135, Сварочные агрегаты 150-200А, описание
3. Таблица, тоже огромная например: product: product_id, category_id, другие характеристики продукта
Как я вижу цепочку запросов из базы:
1. уровень (http://www.rutector.ru/price/index.shtml):  
SELECT FROM catalog_menu
Пошел цикл. При выводе списка формируются ссылки вида <a href=..?welding></a>
В подцикле делаем построение подменю (потомков):
SELECT FROM category WHERE url='welding' AND parent_id = 0;
Вроде основное меню построено.
2. При клике на заголовок меню (http://www.rutector.ru/price/welding/index.shtml)
Делаем проверку на потомков, если есть выводим подсписок, если родитель то оформляем его как заголовок.
SELECT FROM category WHERE url='welding' AND parent_id=0
получаем массив row[category_id], далее подцикл проверки потомков:
SELECT FROM category WHERE parent_id = row[category_id]
2.1. Вот тут совсем мне понятно. При клике на родителя (например: http://www.rutector.ru/price/welding/index.shtml?category_id=136)
вываливается список продукции в виде таблиц разбитых по категориям. Во первых, я так понимаю все таки в таблице category получается 2 поля parent_id? Т.е вот еще один потомок http://www.rutector.ru/price/welding/index.shtml?category_id=1205. Как то его тоже надо учитывать, и во вторых мне не понятно как строятся таблицы, ведь у каждой категории свои поля, характеристики.
Точно также не понятна структура таблицы product. Там у многих изделий совсем разные характеристики, т.е у кого то есть характеристика Сила тока,  а у кого то есть Макс. поднимаемый вес. У меня одна только догадка что сделано куча полей и только нужные из них заполняются, но это как то совсем не эффективно, или для последних потомков там свои таблицы? Вобщем помогите понять, как же все таки такие каталоги делаются!
Записан

Givi    ↓ 
09 Декабрь, 2011, 02:29:04 , спустя 1 час 40 минут 13 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 42
Сообщений: 2305
Сила слова: 1.82

kolobok, по деревьям, читай это на официалке.
А по структуре таблиц, то тут многие-ко-многим. То есть несколько таблиц (таблица с самой продукцией, таблица с характеристиками, связывающая таблица), а не одна сплошная, ибо это реально не правильно. Вообще правильная структура - это меньше проблем в будущем при расширении. А так как у большинства эти проблемы есть, то можно смело сказать что идеальное решение найти сложно, потому каждый делает как ему удобней.
В общем, можно взять любой простой интернет-магазин и разобрать его на предмет изучения структуры и алгоритмов работы. Главное брать что-то простенькое, но качественное. Тот же ШопСкрипт вполне подойдет для такой задачи.
Записан

Все, что говорят другие - неправда! До тех пор, пока ты сам в это не поверишь.
Если человек дурак, то... чур это не я!
kolobok    ↓ 
19 Декабрь, 2011, 04:18:50 , спустя 10 дней 1 час 49 минут 46 секунд
НЕ ХУЕТА! ХУЕТА!


Карма: 0
Сообщений: 45
Сила слова: 0

Givi, спасибо за советы, с каталогом разобрался, запнулся на хранении данных продукции, то о чем ты советовал со связывающей таблицей. Я наверное не то делаю, но я выбрал следующее хранение данных:
таблица product в которой хранится product_id и table_id ну и category_id
таблица p_table в которой хранится table_id и соответствующее table_name, т.е связывающая таблица
и дальше пошли таблицы с данными продукции, например:
welding31 (table_name = welding31) в которой product_id, category_id, name и характеристики относящиеся к конкретной категории.
Получается, что в моем случае будет наверное где то штук 200 таблиц, не знаю, правильно ли это, или я явно не туда пошел, но запнулся я на выводе информации
о продукции, т.е если кликнули на конкретный продукт - т.е передали product_id то я выдергиваю соответствующие данные из соответствующей таблицы, НО, как организовать вывод? Поясню, допустим через связывающую таблицу я узнал что продукт находится в таблице welding31, я выбрал все данные относящиеся к моему product_id, и вот как мне написать теперь что-то типа: Вес - 30кг, Ток 10А, Напряжение 12В...? Т.е я не могу сделать шаблон, ведь у каждой таблицы свои характеристики. В голове родился только жуткий вариант делать проверку, вроде если таблица welding31 то данные выводим такие то, но 200 штук переключателей конечно бред. Как тут быть, или я вобще все не так сделал?
Записан

Givi    ↓ 
19 Декабрь, 2011, 05:17:26 , спустя 58 минут 36 секунд
НЕ ХУЕТА! ХУЕТА!

Группа: Адекваты

Карма: 42
Сообщений: 2305
Сила слова: 1.82

kolobok, products, parameters, parameters_in_products. Примерно так.
products  = product_id, product_name, product_price (по сути все данные, свойственные ТОЛЬКО ЭТОМУ товару)
parameters = parameter_id, parameter_name (то есть тут просто список характеристик, без всяких значений).
parameters_in_products = product_id, parameter_id, value. Это я есть та связывающая таблица, которая кроме связки несет в себе ещё и показатели характеристик товара.
 
По сути я тебе показываю один из вариантов + его ещё можно "обустроить" разными нужными тебе вещами, как-то привязка определенных характеристик определенным категориям, привязка к одному товару нескольких цен и т.д. Но это тебе пока не нужно. Сначала разберись с этим, чтоб понять как можно добавить товар с любым кол-вом характеристик, которое можно уменьшить/увеличить в любой момент для любого товара + научись грамотно делать выборку всего этого из базы. А потом уже и более сложное можно делать.
Записан

Все, что говорят другие - неправда! До тех пор, пока ты сам в это не поверишь.
Если человек дурак, то... чур это не я!
kolobok    ↓ 
20 Декабрь, 2011, 09:19:45 , спустя 16 часов 2 минуты 19 секунд
НЕ ХУЕТА! ХУЕТА!


Карма: 0
Сообщений: 45
Сила слова: 0

Givi, понял, спасибо! Только перенос данных для меня немного не комфортный будет, ну да главное правильный фундамент)
На счет привязки характеристик к категориям, я думаю тут просто нужна еще одна таблица.
Записан

Страниц: 1 2 [3]
Печать
 

Перейти в:  

Этот топик скрыли: adw0rd, artoodetoo