Новости | 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[]