Форум → Программирование → PHP для идиотов → Организация многоуровневого меню
Организация многоуровневого меню
Страницы: ← Предыдущая страница →
-
Дек. 9, 2011, 12:48 п.п., спустя 2 дня 17 часов 45 минут
В который раз пытаюсь правильно понять и нашел как раз то, что мне надо воспроизвести: 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. Там у многих изделий совсем разные характеристики, т.е у кого то есть характеристика Сила тока, а у кого то есть Макс. поднимаемый вес. У меня одна только догадка что сделано куча полей и только нужные из них заполняются, но это как то совсем не эффективно, или для последних потомков там свои таблицы? Вобщем помогите понять, как же все таки такие каталоги делаются! -
Дек. 9, 2011, 2:29 п.п., спустя 1 час 40 минут 13 секунд
kolobok, по деревьям, читай это на официалке.
А по структуре таблиц, то тут многие-ко-многим. То есть несколько таблиц (таблица с самой продукцией, таблица с характеристиками, связывающая таблица), а не одна сплошная, ибо это реально не правильно. Вообще правильная структура - это меньше проблем в будущем при расширении. А так как у большинства эти проблемы есть, то можно смело сказать что идеальное решение найти сложно, потому каждый делает как ему удобней.
В общем, можно взять любой простой интернет-магазин и разобрать его на предмет изучения структуры и алгоритмов работы. Главное брать что-то простенькое, но качественное. Тот же ШопСкрипт вполне подойдет для такой задачи. -
Дек. 19, 2011, 4:18 п.п., спустя 10 дней 1 час 49 минут
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 штук переключателей конечно бред. Как тут быть, или я вобще все не так сделал? -
Дек. 19, 2011, 5:17 п.п., спустя 58 минут 36 секунд
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. Это я есть та связывающая таблица, которая кроме связки несет в себе ещё и показатели характеристик товара.
По сути я тебе показываю один из вариантов + его ещё можно "обустроить" разными нужными тебе вещами, как-то привязка определенных характеристик определенным категориям, привязка к одному товару нескольких цен и т.д. Но это тебе пока не нужно. Сначала разберись с этим, чтоб понять как можно добавить товар с любым кол-вом характеристик, которое можно уменьшить/увеличить в любой момент для любого товара + научись грамотно делать выборку всего этого из базы. А потом уже и более сложное можно делать. -
Дек. 20, 2011, 9:19 д.п., спустя 16 часов 2 минуты 19 секунд
Givi, понял, спасибо! Только перенос данных для меня немного не комфортный будет, ну да главное правильный фундамент)
На счет привязки характеристик к категориям, я думаю тут просто нужна еще одна таблица.
Страницы: ← Предыдущая страница →
Пожалуйста, авторизуйтесь, чтобы написать комментарий!