parser

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

 

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

Ответ

G_Z 16.12.2015 15:48 / 16.12.2015 15:49

В предыдущих постах Я как раз публиковал код, в котором разбивал $request:uri по слэшам.
И спрашивали почему ваш громоздкий код не работает так, как вы ожидаете.
Потом находил соответствия полученным значениям в БД, если они были, передавал эти параметры обработчику, который выдавал содержимое.
Вам посоветовали так не делать и предложили более универсальную схему, примеры которой есть как в известных фреймворках, так и на Парсере — в pf.
Я пытаюсь повторить текст в код, начинаю с регулярных выражений, Вы пишите что так сложно не нужно, а Я с учетом расширения это делаю.
Вы разбираете не то, что нужно.


Пример на коленке, дающий понимание процесса.
Не комментирую.
@main[]
^dispatch[$form:url]


@dispatch[URL][locals]
$dispatchers[^table::create{handler	trap}]
$form[^hash::create[$form:fields]]
^form.delete[url]

$URL[^URL.trim[both;/]]
$URLs[^URL.split[/]]

^URLs.menu{
	$handler[^if(def $handler){$handler}^_upperFirstLetter[$URLs.piece]]
	$_URL[^if(def $_URL){$_URL/}$URLs.piece]

	^dispatchers.append{on$handler	^URL.mid(^_URL.length[] + 1)}
}

^dispatchers.sort(^dispatchers.line[])[desc]

$dispatched(false)
^dispatchers.menu{
	$handler[$[$dispatchers.handler]]

	^if($handler is junction){
		^handler[
			$.trap[$dispatchers.trap]
			$.slug[^dispatchers.trap.left(^dispatchers.trap.pos[/])]
			$.form[$form]
		]

		$dispatched(true)

		^break[]
	}
}

^if(!$dispatched){
	^onNotFound[
		$.trap[$URL]
		$.slug[^URL.left(^URL.pos[/])]
		$.form[$form]
	]
}


@_upperFirstLetter[string][locals]
$result[^string.match[(.)(.+);]{^match.1.upper[]^match.2.lower[]}]


@onNews[params]
onNews
^json:string[$params]


@onNewsBest[params]
onNewsBest
^json:string[$params]


@onNewsBest2015[params]
onNewsBest2015
^json:string[$params]


@onNotFound[params]
onNotFound
^json:string[$params]