Объясните подключение менюшек в шаблоне

Товарищи, объясните, пожалуйста, как происходит подключение разных файлов меню в шаблоне.

Имеем в nav.tpl:

<nav id="nav">
	{if $menu}
		{if in_array($menu,$aMenuContainers)}{$aMenuFetch.$menu}{else}{include file="menu.$menu.tpl"}{/if}
	{/if}
</nav>


В нужном экшене просто указываем к примеру:

{include file='header.tpl' menu='people'}


и для него подключается соотвествующий файл меню.

У меня задача следующая: есть div в котором необходимо выводить разную информацию для разных экшенов. Соответственно, хотелось бы по аналогии указывать в нужном экшене что подключать, а не прописывать в нем кучу условий.

Или же тут не решается одним шаблоном, а $menu прописывается в движке? Тогда как можно поступить в моем случае?

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

avatar
Не понял сути вопроса.
  • ort
  • 0
avatar
Хочу разобраться, как подключаются файлы менюшек в шаблоне в зависимости от экшена для того, чтобы сделать по аналогии.

Пробовал так:

— в header.tpl
{if $banner}
    {include file="banner.$banner.tpl"}
{/if}


— в нужном экшене
{include file='header.tpl' banner='one'}


— и соответственно создавал файл banner.one.tpl

Не заработало.
avatar
должно работать
попробуй в шаблоне header.tpl вывести значение $banner и посмотреть, что в ней
avatar
Ок, спасибо.
avatar
Все из-за невнимательности: здесь
{include file="banner.$banner.tpl"}

вместо двойных ковычек ставил одинарные… причем сюда правильно написал )

Всем спасибо за помощь!
avatar
Ранее думал в выводе чего-либо по подобию вывода менюшек.
И кстати, обратил внимание что для экшена blogs менюшки в дефолтном шаблоне нет. Плагин, который добавлял пункты меню в blogs «требовал» добавления в шаблон файла менюшки. Соответственно имеем проблему совместимости.

Поэтому думаю, было бы удобнее:
— создать папку с менюшками (баннерамми и т.п.)
— поместить туда файлы менюшек с названиями в соответствие с экшенами
— плюс один файл дефолтный пустой, но с хуком
— в header.tpl:
{if файл существует}
    {include file="banner.`$sAction`.tpl"}
{else}
    {include file="banner.default.tpl"}
{/if}
— в экшенах при инклуде header.tpl можно уже ничего не указывать

По поводу {if файл существует} — не знаю возможно ли это.

В итоге если закинуть файл в папку (например, banner) файл с названием соответствующем экшену — то он туда инклудится. Если файла для какого-либо экшена нет — инклудится дефолтный пустой файл, но с хуком, по которому можно вставить что-то плагинами
avatar
Возможно вас спасет примерно такой код.
Но $sActionName нужно изначально задавать в контроллерах. Ну и добавить к этой конструкции немного if-ов
{assign var="sIncludeName" value="file_`$sActionName`.tpl"}
{include file=$sIncludeName}
avatar
Хотя вру, в шаблон и так пробрасываются переменные sAction и sEvent из роутера.
avatar
Кажется, как-то так можно сделать.

{assign var="sIncludeName" value="div_`$sAction`.tpl"}
{if $sIncludeName|template_exists){
    {include file=$sIncludeName}
} else {
    {include file='div_default.tpl'}
}


Для каждго экшена, которому нужно отдельно содержание создаете свой шаблон и его инклудите.
avatar
Спасибо! Как вариант подойдет, но с подключением менюшех все же хотелось бы разобраться до конца.
avatar
Ну блин, как задачу понял =) Думал возможности в шаблоне прокидывать переменные возможности нет.
avatar
Думал возможности в шаблоне прокидывать переменные возможности нет.

Не совсем понял о чем Вы.
avatar
Я думал, что ищется способ вставлять уникальный фрагмент только на основе экшена и нет возможности передать допольнительный параметр, так как это делается при включении header.tpl
avatar
Разыскивается просто более красивое решение, нежели я делал ранее: просто через условия прописывал «если экшен такой-то — выводим то-то, иначе...». Иногда в этих многоэтажках запутаться можно было. :)

Вспомнил про подключение меню, решил по аналогии сделать и вот что-то не выходит, видимо, что-то упускаю. Выше Орту ответил, как пробовал сделать.

Вы решение подсказали и оно меня вполне устраивает, но зуд-то остался… :)
avatar
А с аналогией менюшек точно нигде кеш почистить не забыли? Трассирова (т.е. вместо инклуду тупо вывести на страницу содержимое переменной) пробовали?
avatar
У меня в белую страницу вываливалось с ошибкой, завтра воспроизведу отпишусь.

Т.е., впринципе, мои действия были верны? Из самого движка ничего передавать не нужно? Я просто думал, может та же переменная $menu (в случае с меню) где-нибудь еще в движке прописана и поэтому у меня только на уровне шаблона ничего не получается.
avatar
Вот тут говорят, что правильно делали. Но может где еще косякнули.
avatar
Ага, спасибо, завтра более внимательно пересмотрю.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.