parser

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

 

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

запросто

agat 29.08.2007 16:01 / 29.08.2007 16:06

вам передается $request:query и $request:uri. Обычным сплитом разобрали строки, посмотрели что от нас хотят. Если хотят в том порядке, в котором мы можем отдать - отдаем страничку с переданными в нее параметрами. Если порядок не такой, какой мы ждем - 404.

продолжая код, указанный постом выше
process.html
################################################
@main[][result]
^if(^request:uri.match[process\.html]){
	^Lib:location[/404/]
}{
	^Request:process[]
}
# end of @main[]
Request.p
@CLASS
Request

################################################
@auto[][sUri;tUri;sClearPath]
$sQuery[$request:query]
$sUri[$request:uri]
$tUri[^sUri.split[?;lh]]
$sPath[$tUri.0]
$sClearPath[^sPath.trim[both;/]]
$tBasePath[^sClearPath.split[/]]
^if($tBasePath.piece eq "ru" || $tBasePath.piece eq "en" || $tBasePath.piece eq "tr"){
	$sLanguage[$tBasePath.piece]
}
^if(def $sLanguage){
	$tPath[^tBasePath.select(^tBasePath.line[] > 1)]
	$sPath[/^if($tPath){^tPath.menu{$tPath.piece/}}]
}{
	$tPath[$tBasePath]
}
^tPath.offset(-1)
^if(^tPath.piece.int(0)){
	$iScrollerPage(^tPath.piece.int(0))
	$tPath[^tPath.select(^tPath.line[] < ^tPath.count[])]
	$sPath[/^if($tPath){^tPath.menu{$tPath.piece/}}]
}{
	^tPath.offset[set](0)
}
# end of @auto[]

################################################
@makePath[hParams]
$result[^makeUri[
	$.targetUrl[^if(def $hParams.sLanguage){/$hParams.sLanguage}/^tPath.menu{$tPath.piece/}^if($iScrollerPage && $iScrollerPage != $hParams.iScrollerPage){$iScrollerPage/}]
	$.hExclude[
		$.groupUri[]
		$.itemID[]
	]
]]
# end of @makePath[]

################################################
@process[][bFound;sGroupUri;iItemID]
$bFound(0)
^if(-f $sPath || -d $sPath){
	$bFound(1)
	^Lib:location[$sPath^makeUri[]]
}{
	^if($tPath){
		^if($tPath.piece eq "item"){
			$iItemID($iScrollerPage)
			^if($iItemID){
				$bFound(1)
				^Lib:location[/?itemID=$iItemID]
			}
		}{
			^tPath.menu{
				$sGroupUri[$tPath.piece]
			}
			^if(def $sGroupUri){
				$bFound(1)
				^Lib:location[/?groupUri=$sGroupUri]
			}
		}
	}
}
^if(!$bFound){
	^Lib:location[/404/]
}
# end of @process[]

################################################
@makeUri[hParams][hFields]
$hParams[^hash::create[$hParams]]
$hFields[$hParams]
$hFields[^hFields.union[$form:tables]]
$hFields[^hFields.union[$form:fields]]
^if(def $hParams.hExclude && $hParams.hExclude is "hash"){
	^hFields.sub[$hParams.hExclude]
	^hFields.sub[$.hExclude[]]
}
$sTarget[$hParams.targetUrl]
^hFields.sub[$.targetUrl[]]
$result[$sTarget^if($hFields){?^hFields.foreach[sField;uValue]{^if($uValue is "table"){^uValue.menu{$sField=^taint[uri][$uValue.field]}[&]}{$sField=^taint[uri][^if($uValue is "file"){^getNameFromFile[$uValue]}{$uValue}]}}[&]}]
# end of @makeUri[]
Объяснять не стану - думаю разберетесь. Код не идеален, т.к. сам только учусь использовать данный подход. Но на текущем проекте он работает идельно. Пока багов не нашел.