Эта тема на forum.dklab.ru


kzew: Правильная разборка ЧПУ
Здравствуйте!
Я пытаюсь написать систему, где есть дерево документов (пока на pid) и соответствующий ему ЧПУшный урл-маппинг.
Пока в системе 2 хэндлера: простые страницы и блоги. Чтобы не использовать каждый раз запросоемкую рекурсию к корню сайта, у меня есть поле, в котором лежит полный URI страницы.
Проблемы возникли при написании блога, т.к. хочется и для него сделать ЧПУ - /blog/2004/08/ или по id поста - /blog/23.

Как мне правильно разбирать URI, чтобы не пытаться найти в базе страницы 08 и 2004 или 23?

Если подойти с другой стороны: есть ли смысл делать систему с Nested Sets для сайтов из 10 страниц+блоги и проще ли будет в этом случае с разборкой урлов?
Юрий Насретдинов:
Проблемы возникли при написании блога
Блогов уже существует туева хуча... Зачем писать еще один?

чтобы не пытаться найти в базе страницы 08 и 2004 или 23?

$str='blog/2004/08'; //строка запроса
//**
$parts=explode('/',$str);
if(!empty($parts[2) && is_numeric($parts[2]))
{
//идет обработка по дате
$year=intval($parts[1]);
$month=$parts[2];
// дальше идет обработка
}else if(is_numeric($parts[1]))
{
$id=$parts[1];
// дальше идет обработка
}

bæv:
Просто строку, где слэшей больше, в .htaccess поставьте выше.
kzew:
yUAC:
Блогов уже существует туева хуча... Зачем писать еще один?
- свое роднее
- это не только блог
- идет упор не на YetAnother[CMS/Blog/...], а на очень интересную особенность организации типов данных
- как мне еще набраться опыта в php?! ;-)

Решение, которое Вы привели, я рассматривал. Хотелось чего-то универсальнее, но, видимо, придется делать именно так. Спасибо!

baev:
Просто строку, где слэшей больше, в .htaccess поставьте выше.
Хм. Возможно, я не совсем понял, но у меня разбор урла идет уже в php.
Если делать ЧПУ через mod_rewrite (сейчас делаю через FilesMatch), то будет что-то типа
RewriteRule ^(.+) index.php/$1 Так что никаких строчек я выше не могу поставить...
Rumata:

RewriteEngine on
RewriteRule ^blog/([0-9]+)/?$ blogging.php?num=$1
RewriteRule ^blog/([0-9]+)/([0-9]+)(/([0-9]+)/?)? blogging.php?year=$1&month=$2&day=$4

Rumata:
но у меня разбор урла идет уже в php.
и в blogging.php делаете разбор

http://site/blog/23 - вы получите $_GET["num"] == "23"

http://site/blog/2004/10 или
http://site/blog/2004/10/какое_то_число

$_GET == array(
"year" => "2004",
"month" => "10",
"day" => "" или "какое_то_число"
)

kzew:
Rumata:
Теперь понял, что от mod_rewrite не отвертеться (так удобнее просто).
Большое спасибо!
Дмитрий Котеров:
Тема закрыта.

Эта тема на forum.dklab.ru