parser

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

 

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

Ответ

G_Z 16.12.2015 17:59

$param[$request:uri]
$fURI[^param.match[^(?:/(.+?))?(?:/(.+?))?(?:/(.+?))?(?:/(.+?))?(?:/(.+?))?(?:\?(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?(?:&(.+?))?^$][g]]
$_uri[
$.[$fURI.1][^existence[$.part[$fURI.1]]]
$.[$fURI.2][...]
$.[$fURI.3][...]
$.[$fURI.4][...]
$.[$fURI.5][...]
]
^if($_uri.[$fURI.1] eq 'true'){
$cSection[^get.getSections[$.url[$fURI.1]]]
^S.page[
$.s_id[${cSection.id}]
]
}
$_query[
$.[$fURI.6][...]
$.[$fURI.7][...]
$.[$fURI.8][...]
$.[$fURI.9][...]
$.[$fURI.10][...]
$.[$fURI.11][...]
$.[$fURI.12][...]
$.[$fURI.13][...]
$.[$fURI.14][...]
$.[$fURI.15][...]
]
Я не буду это комментировать.
Вот допустим @dispatch[URL][locals], Я не знаю что такое locals, в документации написано, что это использование локальных переменных внутри метода.
Что это дает, использование [locals]?
В документации всё написано верно.
Не заметил где Вы делаете сверку между полученными данными и данными в БД.
Любые необходимые проверки делаются в обработчике после вызова.
@onNews[params]
$news[^sql.table{SELECT … WHERE … = '$params.…'}]
Я понял код так
Всё верно.
Получается как Вы и говорили /news/2015/best
Нужно писать метод @onNews2015Best[] и в нем разбираем хеш $form.
Он уже разобран, остаётся только воспользоваться им.
А мне нужно немного другое, нужно чтобы было проще, чтобы был метод не onNews, а onEntries, в котором происходит вывод страницы с записью, а onGoods будет выводить страницу с товаром, onHeading страницу с подразделом.
И в чём проблема задать нужные обработчики?

/entries/
@onEntries[params]
Будет вызываться обращениях к /entries/.*? если не заданы более точные обработчики.

/entries/some-slug/
@onEntries[params], где в params будет $.slug[some-slug]

А для адреса
/entries/favorite/
можно задать свой обработчик
@onEntriesFavorite[params]
и в нём делать специфическую генерацию именно этой страницы.

Обработчик может звать другие обработчики.
У меня создано несколько классов, например класс страницы с записью, класс страницы с товаром, класс страницы с разделом.
Есть класс который разбивает $request:uri, проверяет каждую часть адреса, если такие записи в БД существуют, то вызываем нужный нам класс (метод).
Например /catalog/else/shit
Обработчик проверяет если shit, это товар который относиться к подкатегории else, которая тоже существует и относиться к категории catalog, которая в свою очередь тоже существет, то вызывается класс страницы товара, который выводит конкретный товар.
У вас же пример с новостями перед глазами.
@onCatalog[params]
^if(def $params.slug){
	^onSection[
		$.slug[$params.slug]
		$.trap[^params.trap.mid(^params.slug.length[] + 1)]
	]
}{
	catalogue root
}

@onSection[params]
^if(def $params.slug){
	^if(def $params.trap){
		^onItem[$.slug[$params.trap]]
	}{
		section $params.slug root
	}
}{
	^onNotFound[]
}

@onItem[params]
^if(){
	item $params.slug
}{
	^onNotFound[]
}
Код не универсален, это лишь пример того, как подобного рода маршрутизация работает.

Для случая, когда часть адреса является динамической, а часть статической и необходим разбор динамической части регулярными выражениями.
Известен префикс, остальное разбирается по частям и передаётся обработчику.
И у меня задача выводить title, keywords и description в head страницы
Повторюсь:
Мета-данные — такой же контент, привязанный к адресу.
Его стоит хранить и обрабатывать аналогично.
не знаю как в auto.p вызывать переменную, которая содержится в хеше класса страницы.
Этого я не понимаю, «сапоги всмятку».