Как организовать логику для построения запроса в БД по полученным в GET данным?
Делаю каталог товаров для магазина. Решил сразу настроить ЧПУ (а точнее - Яндексу Понятный Урл и Гуглу понятный УРЛ, человеки-то на УРЛ вряд ли будут смотреть).
Определил такую структуру:
/toyota/
/toyota/rav4
/toyota/rav4/body
/toyota/rav4/body/front-bumper
/toyota/rav4/body/front-bumper/SKU
Пока не получен SKU (артикул детали), скрипт будет показывать подкатегории
С помощью mod_rewrite такой URL будет передаваться серверу как catalog.php?make=toyota&model=rav&category=body&subcategory=front_bumper&sku=SKU
Проблема в том, что значения CATEGORY и SUBCATEGORY не будут уникальными. Соответственно, искать в БД по этому параметру я не могу.
Я придумал такой вариант:
if (есть SKU)
выводим товар
if (есть SUBCATEGORY)
нужно вывести список товаров.
для этого нужно найти все товары с нужным ID категории, а для этого нужно найти все записи в таблице категорий с параметрами SUBCATEGORY и MODEL, т.е. исходить из того что в пределах одной модели (RAV4, например) все подкатегории товаров будут уникальными, не будет двух категорий "front_bumper".
if (есть CATEGORY)
//выводим список подкатегорий, по такой же логике - в пределах модели RAV4 все названия категорий товаров уникальные, не будет двух категорий "engine".
if (есть MODEL)
// тут уже всё просто, все модели у меня уникальные, поэтому просто ищем ID категории с этой моделью, и потом выводим список подкатегорий, у которых родитель - ID модели.
Но тут появляется ограничение на количество вложенных категорий, вдруг я захочу сделать ещё одну категорию? Чтобы было /toyota/rav4/body/front/bront_bumper/.
Как вариант:
Отказаться от понятия subcategory. Оставить лишь понятие категории у которого может быть родительская категория (все в одно таблице, если нет родителя, то parent_id = 0, иерархия может быть сколь угодно длинная, обычное дерево получиться)
У товара будет привязка к моделе и категории. Но я бы сделал их не напрямую а через отдельные таблицы. Это чтобы не плодить категории, да и одна и та же запчасть может быть к нескольким моделям
В разборе УРЛ первые два поля производитель модель, последнее SKU. Если полей больше 2 и последнее не SKU значит оно категория. Остальное игнорить
спасибо. надо только подумать, почитать как на это отреагируют поисковики.
не запутаются ли - в /toyota/rav4/body будет только список категорий, а в /toyota/rav4/front_bumper - уже список запчастей.
TopClans: вы немного не поняли мою мысль: url при этом будет стол же большой (все категории до конечной если это не sku) то есть кпримеру:
/toyota/rav4/body
/toyota/rav4/body/front/
/toyota/rav4/front_bumper
/sku/11456621556645
Игорь: всё равно не понимаю. как тогда задать в mod_rewrite перенаправление? чтобы он из адреса доставал марку, модель, конечную категорию и артикул?
если /toyota/rav4/body/ - то всё понятно, передаём серверу запрос ?make=toyota&model=rav4&category=body
а если /toyota/rav4/body/front_bumper - то как mod_rewrite должен понять, что надо сделать запрос ?make=toyota&model=rav4&category=front_bumper ?
кстати, про отдельную таблицу товаров где будут ID товара и ID категорий к которым он относится - это, насколько я понимаю, таблица many-to-many.
если товар принадлежит 3 категорям, то нужно будет в эту таблицу внести 3 записи, отличающиеся ID категорий, правильно?
увы не знаю какой именно вы код пишите, ибо использую роутинг через index.php для всех страниц
подбирайте под себя вариант реализации. но вот один из примеров:
RewriteBase /
RewriteRule ^catalog/(.*)$ catalog.php?object=$1 [QSA]
и потом распарсить object как Вам нужно