Разработка сайта с использованием Smarty

lantastic

Новичок
Разработка сайта с использованием Smarty

Изучаю Smarty.

Как лучше всего проектировать сайт с использованием Smarty? Сделал несколько шаблонов: overall_header.tpl, overall_footer.tpl, news.tpl, price.tpl, admin.tpl ... Теперь везде вставляю три строки вида (например в price.php):

PHP:
$smarty->display('overall_header.tpl');
$smarty->display('price.tpl');
$smarty->display('overall_footer.tpl');
Или же надо было сделать по одному шаблону на каждую страницу, путем включения overall_header.tpl и overall_footer.tpl инструкциями Smarty?

P.S. Подскажите пожалуйста статьи по Smarty ... кроме руководства с описанием функций ничего не нашел ... а интересует именно методика разработки сайта, сколько должно быть шаблонов на страницу? как они проектируются?

Заранее спасибо. :)
 

kvf77

Red Devil
lantastic

в шаблон price.tpl логичнее включить include первого и третьего шаблонов

какая методика? ты чего? как тебе удобнее таки пишешь. никто за тебя не скажет - так лучше, а так плохо. Я, например, разбиваю страницу на логические шаблонные части - каждая форма, скажем - это свой шаблон. считаю это очень удобным и эффективным. Править большие шаблоны дюже неудобно. а при разводе на маленькие шаблоны я очень ыбстро нахожу тот, где надо править.
 

alexhemp

Новичок
lantastic

Используй include в шаблонах. хинт - передавай смарти их имена.

Также еще есть хороший и удобный прием - передавать ИМЯ шаблона страницы.

Примерно так

1. php скрипт
Код:
$smarty->assign('body', 'index.body.tpl');
$smarty->display('page.tpl');
2. page.tpl

Код:
<html>
<title>{$TITLE}</title>
<body>

Общий шаблон для всех страниц, грубо говоря - сверху - твой overall_header снизу overall_footer

А по центру между ними

{include file=$body}

</body>
</html>
Очень удобственно... А если еще немного почитать мануал, можно из шаблонов передавать данные "наверх", в основной шаблон. Например присвоить значение $TITLE
 

lantastic

Новичок
пасиб... щас буду разбираться... я просто думал, что вызывать шаблоны из шаблонов через include слишком медленно, решил везде вставлять php код вида:

PHP:
$smarty->display('overall_header.tpl'); 
$smarty->display('price.tpl'); 
$smarty->display('overall_footer.tpl');
 

kvf77

Red Devil
lantastic

Smarty компилит шаблоны, потому как раз твои вызовы по идее будут медленнее чем инклуд из шаблона
 

alexhemp

Новичок
lantastic
kvf77

Я не думаю что будет какая-то вообще измеримая разница между тем делать display из скрипта или include в шаблоне.

Я предлагаю не заниматься лже-оптимизацией а сделать как удобно. В любом случае оверхед от компиляции смарти перекрывает все возможные выигрыши от разных стилей шаблонов.
 

kvf77

Red Devil
alexhemp

а я и не занимаюсь - просто функция display самая жрущая у Смарти. Я в общем-то выступаю за помещение инклуда в шаблон - потому что так понятнее где и что прикреплаяется - не надо лазить по скриптам
 

crocodile2u

http://vbolshov.org.ru
Не забирался ни разу в недра кода смарти, но, думается, инструкция include внутри шаблона должна вызывать те же действя, что и display из скрипта. Да и насчет "удобнее" - имхо, дело вкуса.
 

_RVK_

Новичок
Зато в случае инклюда можно задавать логику отображения подшаблона в основном, в самом шаблоне. В случае с дисплейем, эту логику прийдется прописывать в скрипте. Это не верно, так как получается мешанина бизнес-логики и логики представления.
 

crocodile2u

http://vbolshov.org.ru
_RVK_
Не думаю, что можно для всех случаев определить единственно верный подход. Впрочем, имхо, эта проблема - невелика, и мы скатываемся во флейм.
 

lantastic

Новичок
Хорошо, тогда такая задача. Шаблон header.tpl вызывает подшаблон блока новостей, .. новости меняются не часто, поэтому хорошо бы кешировать этот блок .. можно ли указать в шаблоне, что он вот этот подшаблон должен кешироваться?
 

kvf77

Red Devil
lantastic

давай ты откроешь доку, а она ведь на русском, и внимательно прочитаешь про кэширование - а потом придешь и ответишь нам на свой вопрос
 

lantastic

Новичок
Читал ее (правда немного) и понял, что кеширование настроено на уровне всех страниц. То есть нельзя сделать кеширование части страницы ... конечно, если она представляет собой шаблон, то можно выкрутиться вот так:

PHP:
$smarty->display('top.tpl');
$smarty->caching = true;
$smarty->display('block_news.tpl');
$smarty->caching = false;
$smarty->display('bottom.tpl');
но ведь это не выход - переключать флажок на ходу? хорошо, бы сразу указать, что вывод block_news всегда должен кешироваться (скажем на срок 1 час)!
 

kvf77

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

потому что при использовании кэширования НЕ кэширование должно быть ЧАСТНЫМ случаем
 

lantastic

Новичок
так то верно ... ты имеешь ввиду тег {dynamic} .... что ж, попробуем так сделать, пасиб ;)
 
Сверху