Smarty: Много шаблонов друг в друге

expream

Новичок
Smarty: Много шаблонов друг в друге

Сорри за непонятное название топика, но не знаю как это правильно назвать. Вообщем чо хочется сделать:

1. newsBlock.tpl
2. newsPage.tpl

$news .= $smarty->display(newsBlock.tpl);
$news .= $smarty->display(newsBlock.tpl);
$news .= $smarty->display(newsBlock.tpl);

т.е. тут типо три новости... которые постороены из шаблона newsBlock.tpl и присвоены в переменную $news. Теперь что то типо:

$smarty->assging("news",$news);
$smarty->display(newsPage.tpl);

а в шаблоне newsPage.tpl есть переменная $news т.е. куда наши три сгенерированные новости передаются... так оно будет работать. это правильный подход или нет? Таким образом типо можно хоть кажлдую новост в свой шаблон пихат.... как правильно это селать? щас ещё пытаюсь сделать так:

{include file='modNewsMainNewsBlock.tpl' assign='newsMainBlock'}
{include file='modNewsMainCommentBlock.tpl' assign='commentMainBlock'}
{include file='modNewsAddCommentBlock.tpl' assign='addCommentBlock'}
<table>
<tr>
<td>

{$newsMainBlock}

</td>
</tr>
<tr>
<td>

{$addCommentBlock}

</td>
</tr>
<tr>
<td>

<table>
<tr>
<td>{$comments}</td>
</tr>
</table>

</td>
</tr>
</table>

modNewsMainNewsBlock.tpl
modNewsMainCommentBlock.tpl
modNewsAddCommentBlock.tpl

это три шаблона компонентов которые в цикле будут выводиться...
 

BRat

o_0
второй подход понагляднее будет, не находишь?
1. старайся в отдельные файлы шаблонов выделять только те блоки, которые ты планируешь использовать более чем в одном шаблоне.
2. ИМХО, будет наглядней, если делать {include} прямо на месте (если конечно один и тот же инклуд не используется в одном шаблоне несколько раз). Т.е. так
<td>
{* $newsMainBlock *}
{include file='modNewsMainNewsBlock.tpl'}
</td>
 

expream

Новичок
Мммм ну простой инклуд не подходит мне нужно ещё переменные туда передать...
 

BRat

o_0
в инклуд можно передать переменные -
{include file=... title="Title"} - передастся переменная {$title}
или используй в самом инклуде функцию, которая будет получать эти данные и присваивать их определенной переменной
 

expream

Новичок
А если вариант с fetch() ? т.е. в пхп постепенно в переменную $blocks .= fetch('blockOne.tpl'); и т.д.? И таким обьразом потом уже эти переменные передавать? или все таки лучше делать это через сами шаблоны? а?
 

alexhemp

Новичок
expream

Используй штатные возможности - {include}
Не выдумывай велосипеды.
 

expream

Новичок
alexhemp
что значит выдумывать велосипед? я так понимая функция fetch была сделана именно для этого. Ещё раз суть проблемы. Например, есть главный шаблон, куда инклидятся все "состовные части" сраницы. Но эти состовные части - они не просто хтмл, где только лого или текст, там ещё и переменные должны быть.

Первый вариант до которого я дошел это использовать include file=file.name asssign=varname , таким образом инклудить всё это дело. (то что предлагал BRat include=file.name title=tiele... не подходит потому как может быть очень много переменных) в таком случае вроде как пхп не изменится и будет работать как надо... но тогда мне нужно в шаблоне прописывать какую часть инклудить а какую нет (напрмер возьмом блоки) и если я захочу отключить блок, мне нужно это из шаблона убирать!!! извените - сложно (может я чето не понимаю???)

Второй вариан, к которому я склоняюсь, использовать fetch(), и уже в пхп будет переменная, например $blocks, которая будет содержать все блоки которые нужно загрузить (Эта инфа будет из базы) ну а дальше assign("blocks",$blocks) ... вот... есть какие ещё либо способы это реализовать? Может я где не прав!

Заранее всем спасибо!
 

alexhemp

Новичок
Ты не прав в том что не разделяешь логику приложения от логики представления.

Для отключения блоков - чем не годиться if ?

Вот например:
{if !$config.blocks.vote.hide}{include file="block.vote.tpl" colors="red,blue,green"}{/if}

Это значит - если для этого раздела не спрятан блок голосования, показать его, цвета для графика (аргументы для cycle) через параметр colors.

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

fetch в API сделан совсем для другого - например - чтобы отправить результат по EMail.

В шаблон стоит передавать ИМЕНА шаблонов-блоков.
Таким образом - логика отображения будет сосредоточена в одном главном шаблоне.

Впрочем уговаривать не буду - меньше конкурентов :)
 

expream

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

iSlayter

Новичок
Нне совсем в тему, но отдельную ветку создавать не хочется.
В smarty подключается скрипт ч-з include_php file ему нужно передать определенную переменную. Как это сделать?
Если переменную передать в подготовке к выводу шаблона то smarty её перебивает непостижимым моему уму образом. передавать переменную ч-з гет не вижу смысла, т.к. в моем случае переменная передается скрипту отвечающему за генерацию пути до выбранной категории. Необходимо передать CategoryID к которой относится эта новость, т.е. если передавать ч-з гет, то мы можем написать ?newsread=5&cid=9 хотя на самом деле у неё cid = 5 нам покажется путь до категории у которой cid = 9.
Пожалуйста подскажите как мне быть в моей ситуации?


все...проблема решена. результат работы класса определяю до вывода шаблона.
 
Сверху