Здравствуйте
Есть ссылка вида: site.ru/category/sub-cat1/sub-ca t2/sub-cat3/cat-with-post/post.h tml
Есть 3 таблицы:
-categories
--cat_id
--cat_parent_id
--cat_title (название категории на русском)
--cat_name (название категории транслитом. Именно эта строка находится в url: "sub-cat1", "cat-with-post")
-posts
--post_id
--post_title (название на русском)
--post_text
--post_name (название на транслите)
-links (Так как статья может принадлежать сразу нескольким категориям, создана эта таблица)
--link_id
--post_id
--cat_id
В скрипте url разбивается и заносится в массив:
Нужно:
1. Определить cat_id категории статьи (cat-with-post)
2. Проверить корректность url.
Поясняю:
Первое:
Если делать запрос типа
SELECT `cat_id` FROM `categories` WHERE `cat_name`='cat_with_post'
То нельзя будет использовать одинаковые имена категорий, иначе они будут путаться
Чтобы путаницы не было, необходимо искать cat_id исходя из поля cat_parent_id (идентификатор категории-родителя). Проблема тут в том, что при большой вложенности к базе будет очень много запросов
Выход из данной ситуации вижу один - хранить в базе не отдельные кусочки ("sub-cat3", cat-with-post"...), а полностью url ("category/sub-cat1/sub-cat2/sub-cat3/cat-with-post/"). Но тут возникает другая проблема. Если я захочу изменить название какой-нибудь категории, то редактировать придется всю таблицу (Например, захочу заменить "sub-cat2" на "subcat-2").
Второе:
Если определять идентификатор только cat-with-post, а на остальное просто не смотреть, то статья станет доступной по адресам:
site.ru/cat-with-post/post.html
site.ru/sub1/cat-with-post/post. html и т.д.
А это не очень хорошо. Поэтому нужно проверять правильность иерархии. Тут бы отлично бы справился второй вариант, но меня отпугивает возможная проблема с редактированием
Вот такие пироги.. Помогите найти решение
P.S. Как сгенерировать структуру таблицы типа ?
Не руками ведь их пишут...
UPD: Раньше использовал ссылки типа site.ru/1.cat/5.sub/123.post.hym l
Где 1,5,123 - идентификаторы статьи и категорий. Я просто брал эти id, а на сами названия не смотрел. Поэтому в скором времени обнаружилась ошибка, что одна и та же статья доступна по адресам 1./5.sub/123.----.hyml, 1.caaaat/5./123.pt.hyml и т.д.
Да и смотрятся такие url'ы ужасно, раздражают глаза. Куда лучше, когда в ссылке нет id
![Улыбка Улыбка](./im/emoticons/smile24.gif)
Поэтому в новом варианте хочу использовать формат, как писал в начала сообщения