Разобрать URL

romanich

Новичок
Разобрать URL

Разбираем ссылку типа:
http://www.mysite.ru/рубрика/Россия/Москва

Разбиваем ссылку на части:
<?php
$my_url=$REQUEST_URI;
$aa=explode('/',$my_url);
?>
получаем:
рубрика Россия Москва

Хотелось бы самому присвоить индексы каждому элементу массива - [1] рубрика, [2] Россия, [3] Москва

Но проблема состоит в том, что "рубрикой" могут быть, как и газеты, так и справочная литература, а может и совсем не быть. Т.е. такие ссылки:
http://www.mysite.ru/газеты/Россия/Москва
здесь [1] газеты, [2] Россия, [3] Москва

http://www.mysite.ru/журналы/Россия/Москва
здесь [1] журналы, [2] Россия, [3] Москва

http://www.mysite.ru/журналы/Россия/Москва
Здесь [2] Россия, [3] Москва

Как это можно реализовать, алгоритм действия? Заранее спасибо.
 

lucas

Guest
1. Ты не должен этого хотеть.
2. (Возможно, в качестве костыля подойдет [m]array_unshift[/m].)

updated.
проблема состоит в том, что "рубрикой" могут быть, как и газеты, так и справочная литература, а может и совсем не быть
Нужно попросту избавиться от этой неопределенности.
Запретить "выпадение" рубрики из URI. :)
 

SelenIT

IT-лунатик :)
Вероятно, в третьем примере подразумевалось http://www.mysite.ru/Россия/Москва ?

Имхо, можно завести массив существующих главных рубрик и проверять наличие первого элемента пути в этом массиве. Если есть - то он рубрика, а остальные соответствуют своим номерам. Если нет - то рубрика пуста, а первый элемент на самом деле второй и т.д. (3-й случай).

Но вообще я согласен с lucasом, что лучше продумать структуру сайта по-другому.
 

romanich

Новичок
Автор оригинала: Ak85
Объястни, какая разница между
и

И в любом случае используй parse_url
Между http://www.mysite.ru/журналы/Россия/Москва и http://www.mysite.ru/журналы/Россия/Москва ни какой.

А между http://www.mysite.ru/журналы/Россия/Москва и http://www.mysite.ru/газеты/Россия/Москва уже есть.
Еще большая разница если http://www.mysite.ru/Россия/Москва то разница еще больше.

Хочу сделать как в Yndex-каталоге, а для этого мне нужно присвоить каждому элементу массива свой индекс. Проблема, как это сделать?
 

romanich

Новичок
Автор оригинала: SelenIT
Вероятно, в третьем примере подразумевалось http://www.mysite.ru/Россия/Москва ?

Имхо, можно завести массив существующих главных рубрик и проверять наличие первого элемента пути в этом массиве. Если есть - то он рубрика, а остальные соответствуют своим номерам. Если нет - то рубрика пуста, а первый элемент на самом деле второй и т.д. (3-й случай).

Но вообще я согласен с lucasом, что лучше продумать структуру сайта по-другому.
Да, с тертьим примером я ошибся, все точно.
Попробую сделать через проверку, хотя гиморою будет много. Спасибо

-~{}~ 06.07.05 13:45:

Автор оригинала: lucas
1. Ты не должен этого хотеть.
2. (Возможно, в качестве костыля подойдет [m]array_unshift[/m].)

updated.

Нужно попросту избавиться от этой неопределенности.
Запретить "выпадение" рубрики из URI. :)
Не пойдет. Рубрики нужны для определения переменных, чтобы потом тащить что-то из БД.
 

lucas

Guest
Ну вот и прописывай всегда рубрику в URI.
Что бы не возникало ситуации примера 3.
 

Кром

Новичок
>Не пойдет. Рубрики нужны для определения переменных, чтобы потом тащить что-то из БД.

romanich, ты вообще понимаешь, что тебе говорят?
Алгоритм прост. У тебя есть рубрики первого уровня: 1,2,3 и рубрики второго уровня: 4,5,6
Тебе приходит значение 5, что нужно делать. Посмотреть на первом уровне, если нет - на втром и т.д. Это что так трудно?
 

romanich

Новичок
Автор оригинала: lucas
Ну вот и прописывай всегда рубрику в URI.
Что бы не возникало ситуации примера 3.
Может я не совсем ясно выразился, заранее прошу прощения.
Но если имеем такой адрес:
http://www.mysite.ru/журналы/Россия/Москва
значит нужно вывести все журналы по Москве
если такой http://www.mysite.ru/Россия/Москва
нужно вывести по Москве не только журналы, но и газеты, и справочную лит-ру и все остальное.

Использую FilesMatch поэтому вытянуть переменные могу только из адреса.

-~{}~ 06.07.05 14:02:

Автор оригинала: Кром
>Не пойдет. Рубрики нужны для определения переменных, чтобы потом тащить что-то из БД.

romanich, ты вообще понимаешь, что тебе говорят?
Алгоритм прост. У тебя есть рубрики первого уровня: 1,2,3 и рубрики второго уровня: 4,5,6
Тебе приходит значение 5, что нужно делать. Посмотреть на первом уровне, если нет - на втром и т.д. Это что так трудно?
Это я уже понял и ответил:
"Да, с тертьим примером я ошибся, все точно.
Попробую сделать через проверку, хотя гиморою будет много. Спасибо".
 

Кром

Новичок
>нужно вывести по Москве не только журналы, но и газеты, и справочную лит-ру и все остальное.

Так выводит, это не проблема.

>Использую FilesMatch поэтому вытянуть переменные могу только из адреса.

Это еще что значит?

>Это я уже понял и ответил:

Если бы ты понял, ты бы заодно понял что никакого геморроя там нет.
 

lucas

Guest
romanich

Сделай так:
/газеты/россия/москва
/журналы/россия/москва
/газетыжурналыивсеостальное/россия/москва
 

romanich

Новичок
Автор оригинала: Кром
>Использую FilesMatch поэтому вытянуть переменные могу только из адреса.

Это еще что значит?
Ну .htaccess, как "модно" стало выражаться ЧПУ.

-~{}~ 06.07.05 14:18:

Автор оригинала: lucas
romanich

Сделай так:
/газеты/россия/москва
/журналы/россия/москва
/газетыжурналыивсеостальное/россия/москва
Такая идея была опробую это и перебор.
Еще один вопрос. Если делать перебором, то сильно данный скрипт будет тормозить сервер?
 

Мутник

Новичок
romanich
Если делать перебором, то сильно данный скрипт будет тормозить сервер?
ну, наверное смотря как сделаешь... если сделаешь правильно, то ничего никого не будет тормозить.
 

SelenIT

IT-лунатик :)
romanich

Зачем перебор? Можно одним запросом к базе узнать, есть ли такая рубрика на соотв. уровне. Можно даже одним запросом узнать уровни для всех элементов пути и соответственно интерпретировать их. Когда я говорил про массив, я просто не знал, откуда будут браться данные, но даже для массива есть [m]in_array[/m]...
 

romanich

Новичок
Автор оригинала: SelenIT
romanich

Зачем перебор? Можно одним запросом к базе узнать, есть ли такая рубрика на соотв. уровне. Можно даже одним запросом узнать уровни для всех элементов пути и соответственно интерпретировать их. Когда я говорил про массив, я просто не знал, откуда будут браться данные, но даже для массива есть [m]in_array[/m]...
Вот это подсказочка:) , огромное тебе человеческое спасибо. Не знал про такую функцию. Теперь проблему решу, еще раз спасибо, и спасибо всем остальным, кто нашел время и ответил в данном топике. Удачи.
 

Кром

Новичок
>Ну .htaccess, как "модно" стало выражаться ЧПУ.

То что ЧПУ это понятно. Не понятна фраза "вытянуть переменные могу только из адреса.". К чему ты это вообще сказал? Откуда ты еще хочешь "вытянуть переменные"?

>/газетыжурналыивсеостальное/россия/москва
Это делать совершенно необязательно. Достаточно в своем скрипте ввести значение по умолчанию и использовать его если значение первого уровня не найдено.
 

lucas

Guest
Кром

Это, конечно, понятно.

Однако для юзера, я думаю, странно видеть такие URL'ы...
http://foo.ru/russia/
http://foo.ru/magazines/
...в одном контексте.

Нужно думать о юзабилити. ;)
 

romanich

Новичок
Автор оригинала: lucas
Кром

Это, конечно, понятно.

Однако для юзера, я думаю, странно видеть такие URL'ы...
http://foo.ru/russia/
http://foo.ru/magazines/
...в одном контексте.

Нужно думать о юзабилити. ;)
На мой взгляд кажется - нет. Приведу свою логику, конечно может я и не прав, поэтому хотелось бы услышать и Ваше мнение.
Если foo.ru это каталог с множеством рубрик и возможностью географической фильтрации, то:
http://foo.ru/russia/
печатает все ссылки по России которые только есть в базе
http://foo.ru/magazines/
печатает все ссылки журналов, которые только есть в базе (не только по России) по всем странам

У меня вопрос такой, как индексируются эти ЧПУшки поисковыми системами? Может кто-то сталкивался.
 
Сверху