Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: ЧПУ. Проверка корректности url'a, определение категории
Форумы портала PHP.SU » » Вопросы новичков » ЧПУ. Проверка корректности url'a, определение категории

Страниц (1): [1]
 

1. kir55rus - 07 Декабря, 2013 - 11:56:12 - перейти к сообщению
Здравствуйте

Есть ссылка вида: 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 разбивается и заносится в массив:
CODE (htmlphp):
скопировать код в буфер обмена
  1. [0] => category
  2. [1] => sub-cat1
  3. [2] => sub-cat2
  4. [3] => sub-cat3
  5. [4] => cat-with-post
  6. [5] => post


Нужно:
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. Как сгенерировать структуру таблицы типа ?
CODE (htmlphp):
скопировать код в буфер обмена
  1. +-------------+
  2. |    name     |
  3. +-------------+
  4. |    123      |
  5. +-------------+

Не руками ведь их пишут...


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 Улыбка Поэтому в новом варианте хочу использовать формат, как писал в начала сообщения
2. DeepVarvar - 07 Декабря, 2013 - 12:22:24 - перейти к сообщению
Вот ты гемор себе нашел..
Сделай каждому документу уникальный УРЛ и не парься.
3. kir55rus - 07 Декабря, 2013 - 12:38:21 - перейти к сообщению
DeepVarvar пишет:
Вот ты гемор себе нашел..
Сделай каждому документу уникальный УРЛ и не парься.


Ожидается около 50-100 категорий (родительские, дочерние)
В каждой категории от 50 до 1000 страниц (постраничная навигация)
+ страницы с постами

Руки отвалятся прописывать для каждой страницы свой url. А если добавится новая страница в категории, то придется прибавлять +1 ко всем имеющимся (постраничная навигация)
4. DeepVarvar - 07 Декабря, 2013 - 12:43:29 - перейти к сообщению
kir55rus пишет:
Руки отвалятся прописывать для каждой страницы свой url
Ну вот пример, где там руки отвалятся?
(Добавление)
Он там автоматом от названия генерится.
5. kir55rus - 07 Декабря, 2013 - 13:02:19 - перейти к сообщению
DeepVarvar пишет:
kir55rus пишет:
Руки отвалятся прописывать для каждой страницы свой url
Ну вот пример, где там руки отвалятся?
(Добавление)
Он там автоматом от названия генерится.


Понял суть. Возьму на заметку, как запасной вариант

Пугает лишь такая картина:
Была категория "Новости" с url "/Новости". Редактирую url на "/Новости2"
Захожу на сайт, перехожу на страницу со статьей (адрес "/Новости/Статья...")
В силу своей привычки я не нажимаю "Назад" в браузере, а стираю в адресной строке "/Статья...", ожидая попасть в раздел с новостями. Попадаю на 404

Ваш вариант отличается от моего лишь тем, что у меня в планах было редактировать все значения в базе, а у Вас - одну запись
Благодарю за вариант
6. DeepVarvar - 07 Декабря, 2013 - 13:05:12 - перейти к сообщению
kir55rus пишет:
Захожу на сайт, перехожу на страницу со статьей (адрес "/Новости/Статья..
Верно, и это я считаю совсем не косяк, т.к. изменение УРЛ одного документа для СЕО менее болезненно, чем если я буду обновлять всех его потомков на новый урл, при их переносе в другой узел или при редактировании родителя.
В любом случае - технически я это сделать могу, но посчитал что будет меньше крови.
(Добавление)
Ах да - кроме того это все "статические страницы" разных типов, а вот с модулями, которые так же подключаются в дерево, там уже все как обычно - имена экшнов и параметров не изменяются.

 

Powered by ExBB FM 1.0 RC1