parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Ответ

G100m 12.12.2002 16:34

Я просто хочу с использованием parser-а формировать ЧПУ

Т.е.:
В адреcной строке юзер набирает
http://www.bla-bla-bla/lib/bulhgakov/fatal_eggs/
Запрос идет на сервер

Сервер, обрабатывая запрос, в пустом каталоге /lib/ наталкивается на примерно такой .htaccess:
RewriteEngine on
RewriteRule !\.(gif|jpg|png|css)$ /redirect.html
Запрос передается парсеру, который пытается сформировать запрос к базе данных или обработать xml или text файл:
@redirect[]
# Тут что-то типо защиты
# Получаем запрошенный путь
$uri_request[$request:uri]

# Находим длинну строки
$uri_request_length[^uri_request.length[]]

# Если строка больше, чем 100 знаков
^if(${uri_request_length} > 100){
# Посылаем пользователю привет
^fack[]
}{
# Посылаем парсеру строку 
^redirect_second_step[]
}


@redirect_second_step[]
# Вычислям $section_match
^if(in "/lib"){	
# LIB/bulhgakov	
^if(in "/lib/bulhgakov"){
^if(^uri_request.match[(lib/bulhgakov)\/.+][i]){$section_match[lib/bulhgakov/*]}{$section_match[lib/bulhgakov/]}
}{$section_match[lib]}
# LIB/pushkin
^if(in "/lib/pushkin"){
^if(^uri_request.match[(lib/pushkin)\/.+][i]){$section_match[lib/pushkin/*]}{$section_match[lib/pushkin/]}
}{$section_match[lib]}		
}


# Определяем значения переменным, изходя из $section_match
^switch[$section_match]{ 
# Это корень lib
   ^case[lib]{$section_static[lib] $directory[root]}   
# Это корень lib_bulhgakov
   ^case[lib/bulhgakov]{$section_static[lib_bulhgakov] $directory[root]}
# Это раздел bulhgakov
   ^case[lib/bulhgakov/*]{$section_static[lib_bulhgakov] $directory[not_root]}  
# Это корень lib_pushkin
   ^case[lib/pushkin]{$section_static[lib_pushkin] $directory[root]}
# Это раздел pushkin
   ^case[lib/pushkin/*]{$section_static[lib_pushkin] $directory[not_root]}
# Если ничего похожего нет
   ^case[DEFAULT]{^fack[]} 
}

# Проверям, что выдавать - корень или запрос
^if(${directory} eq root){  
^shablon_root[$section_static]
}{ 
$request_to_shablon[^uri_request.match[(.+?)(\d+)(.?)][i]{$match.2}]
^shablon[$directory;$request_to_shablon]
}
Все очень глупо длинно и не автоматизированно