Вопрос по автоматическому формированию меню

Добрый вечер!

Интересует, как можно формировать меню страниц (page) автоматически?

Я добавил в header_top нужные разделы, а хочу, чтобы при нажатии на любой из них снизу в подменю перечислялись подразделы текущего. Я понял, что надо создать файл menu.page.tpl, однако это мне не помогло.

Надеюсь на вашу помощь! Заранее спасибо.

18 комментариев

avatar
Присоединяюсь.
Очень хочется узнать.
avatar
Похоже задача нерешаема?
avatar
Невнятно поставленная задача нерешаема по определению
avatar
Надо описать ТЗ понятнее… из написанного ничего не понятно
avatar
Нужно вывести подстраницы страниц, как это сделано в БЛОГАХ напримет.
Т.е. к примеру у нас есть статическая страница FAQ, у неё есть подстраницы. Ссылка на FAQ прописывается в header_top.tpl темы так:

<li {if $sAction=='page' and $sEvent=='faq'}class="active"{/if}><a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_PAGE}/faq/">{$aLang.page_faq}</a></li>

Как сделать так, чтобы при переходе по ссылке отображались и подстраницы страницы FAQ?
avatar
Ну вот, теперь более внятно все объяснил.

Если в actions/ActionPage/page.tpl самую первую строку запишешь так:
{include file='header.tpl' menu=page}
то шаблонизатор в качестве меню будет использовать шаблон menu.page.tpl. Но в этом случае в самом шаблоне должна быть логика, которая выводит в меню подстраницы.

Если есть желание для каждой страницы свой файл-меню сделать, то можно так:
{include file='header.tpl' menu="page.$sEvent"}
тогда для страницы faq будет цепляться файл menu.page.faq.tpl, для страницы aboutmenu.page.about.tpl, и т.д.
avatar
Огромное спасибо! Теперь все работает.
Огорчает, что это не предусмотрено по-умолчанию =(
avatar
Еще маленький вопрос: url страницы получаем переменной $sEvent, а как получить URL подстраницы?
avatar
Опять невнятный вопрос. Какой подстраницы? Где?
Если речь о том, как получить урл текущей страницы в шаблоне то $oPage->getUrl()
avatar
Именно то, что нужно. Спасибо.
З.Ы. Как бы Вы внятно сформулировали вопрос, будучи только изучающим все тонкости движка?
avatar
Вот именно так и сформулировал бы, как в своем комменте:
а как можно в шаблоне получить урл текущей страницы?

Внятность формулировки, как правило, мало зависит от знаний нюансов движка. В данном случае четко проговариватеся, что именно требуется, и где именно это требуется.
avatar
если у меня используется такая структура для многоязычности:

{$DIR_WEB_ROOT}/{$ROUTE_PAGE_PAGE}/{$oLang->lang}/advert/

$sEvent возвращает только первый уровень {$oLang->lang}

как мне получить advert, чтобы выяснить текущую активную страницу?
avatar
Вообще урл парсится так:
site.com/action/event/param0/param1/param2/...

Соответственно доступ к элементам урла:
action -> Router::getAction()
event -> Router::getActionEvent()
paramN -> $this->getParam(N)
avatar
премного благодарен, Вадим!
avatar
Подскажите, как правильно добавить paramN сюда:
{include file='header.tpl' menu="page.$sEvent"} 

как подправить шаблон меню, что бы активный пункт в нем выделялся? т.е. как движку дать это понять?
avatar
подскажите где и как обозначить:

$sMenuItemSelect
$sMenuSubItemSelect

т.е. есть в меню, например, $sMenuItemSelect=='blog' как сделать $sMenuItemSelect=='123' что бы это было правильно и понималось движком?
avatar
Начал так:
в конфиге добавил в \распределение action\
$config['router']['page']['page']['123']   = 'Action123';

создал САЙТ.РУ\classes\actions\Action123.class.php, но что в него писать, и правильно ли это вообще?
avatar
Я думаю, меню надо выполнить в виде управляемого блока (класс Block), тогда им можно будет управлять программно, без ручного насилия над шаблонами для добавления каждого элемента меню
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.