И снова про ЧПУ

_et

Новичок
ПОДразделов не будет
т.е. будет только так news/nazvanie-categorii/nazvanie-novosti
 

craz

Нестандартное звание
Alien85
чем обусловлено ваше желание оказать человеку медвежью услугу?
через полгода он придет на этот же форум со "своим" кодом и будет спрашивать как он работает.
 

Alien85

I like my cat
ну тогда проще
PHP:
$tmp = array();
$url = explode("/", getenv('REQUEST_URI'));
foreach( $url as $v )
    if ( $v != false ) $tmp[] = $v;
$url = $tmp; 

$urlSection = ( isset( $url[1] ) ) ? $url[1] : false;
$urlQuery = ( isset( $url[2] ) ) ? $url[2] : false;

if ( $urlSection == false ) {
    // ЭТО СПИСОК НОВОСТЕЙ

elseif ( $urlQuery == false ) {
    // ЭТО СПИСОК НОВОСТЕЙ в разделе
    $q = sprintf("SELECT * FROM ".TABLE_NEWS." WHERE `section` LIKE '%s'",
            mysql_real_escape_string( $urlSection ));
} else {
    $q = sprintf("SELECT * FROM ".TABLE_NEWS." WHERE `section` LIKE '%s' AND `url` LIKE '%s' LIMIT 1",
        mysql_real_escape_string( $urlSection ),
        mysql_real_escape_string( $urlQuery ));
    $query = mysql_query($q);

    $row = mysql_fetch_array($query);
    if ( count( $row ) == 0 ) {
        // Страница не найдена
    } else {
        // ЭТО ПОЛНАЯ НОВОСТЬ
    }
}
 

craz

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

Xupypr

Новичок
PHP:
$url = explode("/", getenv('REQUEST_URI'));
for ($i=0; $i<count($url); $i++)
{
echo $url[$i];
$i--;
}
<irony>не пойму, что не работает</irony>
 

_et

Новичок
craz
Поверьте, я не приду на форум с такими вопросами!

Огромное СПАСИБО и низкий поклон Alien85 за готовые решения!!!
Без таких людей новичкам тяжко. Теперь сколько людей которые слабо разбираются в PHP смогут почерпнуть с этого топика по поводу реализации того, что сделали?

craz, я сам активный пользователь на форуме поддержки одного скрипта. И оказываю помощь в меру своих возможностей. И вы знаете, приятно, когда помогаешь человеку. Ведь не все имею возможность что-то изучать или во всем разбираться.

Да, Alien85 решил мою задачу! И что в этом плохого?
Я думаю не стоит по этому поводу раздувать такую тему. Вы как-то очень рьяно все это восприняли.
 

AmdY

Пью пиво
Команда форума
обсуждение о готовых ответах вынес в отдельную тему в мусорке
 

Alien85

I like my cat
Приведу свой урезанный класс для работы с REQUEST_URI, как с ним работать написано в комментариях.

PHP:
class URL {
	
	// Функция URL::Get(); работает так:
	// Допустим вы на странице: "/news/auto/audi.html?delete=1"
	// Первый вызов URL::Get(); вернет "news"
	// Второй вызов URL::Get(); вернет "auto"
	// Третий вызов URL::Get(); вернет "audi.html"
	// Четыертый вызов URL::Get(); вернет false
	public static function Get () {
		return array_shift (URL::$CurrentUrlGet);
	}
	
	// URL::GetAll(); - вернет "news/auto/audi.html"
	// на странице "/news/auto/audi.html?delete=1"
	public static function GetAll () {
		return implode('/', URL::$CurrentUrl);
	}
	
	// URL::GetVar('delete'); - то же самое, что и $_GET['delete']
	public static function GetVar ($name) {
		return ( isset( URL::$Parameters[ $name ] ) )
			? urldecode( URL::$Parameters[ $name ] )
			: FALSE;
	}
	
	// URL::GetPost('text'); - то же самое, что и $_POST['text']
	public static function GetPost ($name) {
		return ( isset( $_POST[ $name ] ) )
			? trim($_POST[ $name ])
			: FALSE;
	}
	
	// URL::Redirect(); - переадресация куда нибудь,
	// например: "/404.html" или "http://google.ru/"
	public static function Redirect ($URL) {
		header('Location: ' . $URL);
		exit;
	}
	
	private static $CurrentUrl = array ();
	private static $CurrentUrlGet = array ();
	private static $Parameters = array ();
	
	// Инициализация класса
	public static function Init () {
		
		$uri = getenv ('REQUEST_URI');
		$url = explode ('?', $uri, 2);
		
		$list = explode ('/', $url[0]);
		if ( isset( $list[0] ) ) unset( $list[0] );
		
		foreach ($list as $param)
			URL::$CurrentUrl[] = strtolower ($param);
		URL::$CurrentUrlGet = URL::$CurrentUrl;
		
		if (isset ($url[1])) {
			$list = explode ('&', $url[1]);
			
			if (count ($list) > 0) {
				foreach ($list as $string) {
					$arr = explode ('=', $string, 2);
					if (count ($arr) == 2)
						URL::$Parameters[$arr[0]] = trim($arr[1]);
				}
			}
		}
		
	}
	
}

URL::Init();
 

AmdY

Пью пиво
Команда форума
Alien85
3.14здец. нафик это всё? ты сделал кучу ограничений, например нельзя с постом работать как с неймспэсом Url::GetPost не имеет проверки is_array. Завязался на обязательный вызов Init перед вызовом Get*, нет никакой защиты перед повторным вызовом Url::Init() который сломает Url::Get(). Для чего ручной разбор $_GET параметров? разве что cli.
И, кстати, используй self
 

Alien85

I like my cat
Alien85
3.14здец. нафик это всё? ты сделал кучу ограничений, например нельзя с постом работать как с неймспэсом Url::GetPost не имеет проверки is_array. Завязался на обязательный вызов Init перед вызовом Get*, нет никакой защиты перед повторным вызовом Url::Init() который сломает Url::Get(). Для чего ручной разбор $_GET параметров? разве что cli.
И, кстати, используй self
Я же написал:
Приведу свой урезанный класс
ключевое слово здесь: "свой".

Кому нужно, тот доработает его к своим нуждам. is_array в POST мне не нужно, т.к. передается все через ajax - json.
И кто сказал, что получать POST нужно обязательно через класс?

Все классы добавляются в проект через include_once, поэтому повторный вызов не страшен. А так, я же написал, что это урезанный класс.

Так то этот класс задумывался только для поочередного получения url - URL::Get();, а все остальное так, для удобства.

Что за self?
 

AmdY

Пью пиво
Команда форума
Alien85
ключевое слово было нафик? то, что критиковал не обрезано, а именно криво продуманная реализация, а отмазки просто детские.

self это тоже самое что и имя класса только без жёсткого завязывании, знанительно улучшает переносимость кода
PHP:
public static function Get () {
        return array_shift (self::$CurrentUrlGet);// return array_shift (URL::$CurrentUrlGet);
}
 

VANHALEN

Новичок
а я вообще всю эту хрень реализовал внутри htaccess. Там внутри всё и разбирается на переменные.. Конечно это наверное не самое лучшее решение, но пока хватает и на наовсти и на страницы и на всякое.. Правда есть одна херня, которая впринципе не совсем к делу относится. Поставил в для гостевой переменную с номером старницы в конец - сайт.ru/gostevaya/2 так гугл начал выдавать в редультатах поиска этот номер вместо заголовка, хотя заголовок прописан как положено
 
Сверху