parser

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

 

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

например вот так

balin 02.02.2004 11:28 / 02.02.2004 12:11

Добавляем в sections.cfg (из Урока 1) еще одну колонку parent (это позволит использовать вложенную структуру сайта, например /about/company/)
section_id name uri parent
1 Главная index.html 0
2 Новости news 0

пример index.html
@main[]
#загружаем структуру 
$pages[^table::load[sections.cfg]]
#создаем hash параметров
$url_params[^hash::create[]]
#разбиваем строку урл
$str[$request:uri]
$dirs[^str.split[/;v]]
#сначала верхняя отстутсвует
$parent[0]
#перебор частей урла
^dirs.menu{
	$dir[$dirs.piece]
	^if( $dir ne '' ){
#есть ли в нашей структуре странца	    	
	   ^if( ^pages.locate[uri;$dir] && $pages.parent eq $parent ){
#если есть
		$cur_page[$pages.uri]
		$parent[$pages.section_id]
   	   }{
#иначе определяем как параметры	   
	    	$cn(^url_params._count[] + 1)
		$url_params.$cn[$dir]
	    }    
      }    
}
#теперь готовим контент
^switch[$cur_page]{
	^case[news]{^news[$url_params]}
	....
	^case[DEFAULT]{^error404[]}
}
#end @main[]

#метод для отображения новостей
@news[params]
#метод знает что параметры должны быть датой,
#поэтому создаем дату из парметров к sql виду
#за год (получается 2004-)
^if( def $params.1 ){$date[${params.1}-]}
#за месяц (получается 2004-02-)
^if( def $params.2 ){$date[${date}${params.2}-]}
#за день (получается 2004-02-02)
^if( def $params.3 ){$date[${date}-$params.3]}
#а дальше запрос
^connect[$connect_string]{ 
    $news[^table::sql{select * from news ^if(def $date){ where date like '$date%'} order by date desc}]
}    
^if( $news is table && ^news.count[] > 0 ){
    ^news.menu{
#выод новостей ....
	$news.date | <b>$news.title</b><br>
    }
}{
#новость не найдена
	^error404[]	
}
#end news[]    

@error404[]
ошибка 404
#end error404[]
Все части урла, не относящиеся к нашей структуре считаем параметрами для метода, отображающего контент
таким образом можно передавать номер страницы для гостевой,
и много еще чего, главное что бы метод, который эти парметры получает,
знал что они могут обозначать, если парматры не отвечают его требованиям, метод выдает error404