| Новости | FAQ | Авторы | Документация | В действии | Библиотека |
| Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Sumo 16.09.2002 22:54
Идея следующая:## Класс TNavigation
##
## 1. В переменную Sroot загружается файл /_root.cfg, содержащий основное меню сайта
## Структура файла:
## uri/title/status/... [любое количество дополнительных полей]
## поле status может содержать одно из значений:
## hide - скрыто в основном меню,
## admin - только для администратора
##
## 2. Если в текущей папке находится файл _section.cfg, то грузим его в переменную $section
## Структура файла:
## uri/title/... [любое количество дополнительных полей]
## если в поле uri стоит знак ~, то это не ссылка, а начало новой секции
## если поле uri не определено, то это ссылка на текущий раздел
##
## 3. Методы:
## Init[] - инициализация переменных
## SecondNav[] - строит таблицу со вторичной навигацией ("градусник", "хлебные крошки")
## и записывает ее в переменную secondnav.
##
##
##
@CLASS
TNavigation
## ***********************************
## Инициализация переменных
## ***********************************
@Init[]
$sitename[$env:SERVER_NAME]
## Загружаем главное меню сайта
$root[^table::load[/_root.cfg]]
## Вычисляем количество записей
$rootcount(0)
^root.menu{
^if(def $root.status){}{
$rootcount($rootcount + 1)
}
}
## ***********************************
## Вторичная навигация
## ***********************************
@SecondNav[][tempsection]
## Инициализируем secondnav и записываем в него главную страницу
$self.secondnav[^table::create{uri title}]
^self.secondnav.append{/ $sitename}
## Разбираем uri
$uri[$request:uri ]
$urisplit[^uri.lsplit[/]]
## Проходим по urisplit
^urisplit.menu{
^if((^urisplit.line[] > 1) && (^urisplit.line[] < $urisplit)){
^if(^urisplit.line[] == 2){
^if(^root.locate[uri;/$urisplit.piece/]){
^secondnav.append{^if(^urisplit.line[] == ($urisplit - 1)){}{$root.uri} ^taint[as-is][$root.title]}
}
$currenturi[$root.uri]
}{
## Если в текущей папке есть файл _section.cfg, то ищем в нем
^if(-f "${currenturi}_section.cfg"){
$tempsection[^table::load[${currenturi}_section.cfg]]
^if(^tempsection.locate[uri;$urisplit.piece/]){
^secondnav.append{^if(^urisplit.line[] == ($urisplit - 1)){}{${currenturi}$tempsection.uri} ^taint[as-is][$tempsection.title]}
}
}
$currenturi[${currenturi}$urisplit.piece/]
}
}
}
@ShowSecondNav[]
^SecondNav[]
^secondnav.menu{
^if(def $secondnav.uri){
<a href="$secondnav.uri" class=secondnav>^secondnav.title.lower[]</a>
}{
<b>^secondnav.title.lower[]</b>
}
}[ ^;> ^;]
@ShowRoot[]
^root.menu{
^if(def $root.status){}{
^if($root.uri eq $request:uri){
<a href="$root.uri"><b>$root.title</b></a><br>
}{
<a href="$root.uri">$root.title</a><br>
}
}
}где нужно в auto.p что-то такое: $nav[^TNavigation::Init[]] ^nav.ShowSecondNav[]