Blitz Templates: научите идиота

Spear

почемучка
Blitz Templates: научите идиота

Добрый вечер,
у меня тут инетресная штуковина приключилась - появилаьс необходимость использования шаблонизатора (из-за сложной структуры страницы проекта). Я могу в тестовом скриптике заменить {{$username}}, да, могу :)

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

Кидайте в меня камни, бейте лопатами. Только очень прошу - расскажите как правильно пользоваться шаблноизаторами.

Например,
есть общий шаблон, main.tpl

<html>...</html>

Скажем, исходя из данных полученных через класс файла /kernel/mod_public/user/settings.php нужно нарисовать на странице определенную разметку (layout), "табы", меню и пр.

Как это делается?
В рабочем классе создаю новый класс blitz templates, подключаю шаблон layout_3cols? потом все это - парсинг, и вместо print вставляю в переменную $display->content? (например)
потом эта перменная будет вставлена шаблонизатором в другом классе (class_print) в основной темплейт?
то есть кжадый раз где мне нужно что-то ортизсовать я запускаю новыую копию класса Blitz Templates, подставляю перменные и готовый хтм вставляю в переменную. А потом в конечном итоге подставлю полученные перменные (с них ХТМЛ) в главный шаблон и print?

Буду мегаблагодарен, потому как не хочу перегружать проект неправильно используемым шаблонизатором
 

Krishna

Продался Java
1) в этой книжке вопросу посвящен целый раздельчик http://www.ozon.ru/context/detail/id/2172211/
2)Blitz Templates - плохой выбор для начала, начни со smarty.php.net
3) попутно стоит почитать вообще на тему MVC
опять же, есть в книжке котерова
 

Spear

почемучка
Мне нужен именно блитз. Смарти по сравнению с ним - проигрывает в производителньости, да и сложнее.

Проект нагруженный. Сейчас используется свой шаблонизатор, практически native PHP.

Решено было перейти именно на блитз. Теперь мне интереснок а кего правилньо исопльзовать. Та схема которую описал я - верна?

-~{}~ 06.02.08 21:05:

Кстати у меня эта книга котерова вот лежит рядом ) купил давно, но особо не вчитывался
 

Krishna

Продался Java
Spear
Что тебе нужно ты не знаешь, иначе делал бы всё сам.

Я смотрю (по профилю) ты на все темы сначала задаешь глупые вопросы, а потом вместо того чтобы слушать ответы пытаешься показать, что и сам-с-усам.
Кстати у меня эта книга котерова вот лежит рядом ) купил давно, но особо не вчитывался
Это многое о тебе говорит.

Пополняешь мой игнор-список закостенелых ламеров пхп-клуба.

P.S.
пора бы ввести какую-то репутацию на форуме.
чтобы знать на чьи вопросы не имеет смысла отвечать :)
 

AmdY

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

Spear

почемучка
Блин, ну хочется мне Блитз исопльзовать и все тут ) вот, в очередной раз пересматриваю на форуме все что по блитзу нашел. Жаль, примеров немного.
 

Spear

почемучка
Blitz Templates

Здравствуйте,
я только начал осваиваться в Blitz Templates. и сразу же возникла странная ситуация.

Два шаблона:

main.tpl:
PHP:
test
{{ include('header.tpl') }}
header.tpl:
PHP:
{{ BEGIN userpanel }}
			{{ BEGIN user }}
				Привет, {{$username}}
			{{ END }}
			
			{{ BEGIN guest }}
				гость, регистрируйцся
			{{ END }}
		{{ END }}
код такой (index.php):
PHP:
$View = new Blitz('./main.tpl');
$View->context('userpanel');
$View->block('user', array('username' => 'Thomas', 'id' => 10));
echo $View->parse();
Блок userpanel/user не отображается.

НО если добавить ДУБЛИКАТ блока userpanel в шаблон main.tpl:

PHP:
test
{{ include('header.tpl') }}
{{ BEGIN userpanel }}
			{{ BEGIN user }}
				Привет, {{$username}}
			{{ END }}
			
			{{ BEGIN guest }}
				гость, регистрируйцся
			{{ END }}
		{{ END }}
то оба блока отображаются. ПодскажитЕ, пожалуйста, где я накосячил?
 

HEm

Сетевой бобер
Если ничего не помогает - прочитайте уже этот гр...й мануал
 

Develar

Новичок
Spear
Читать надо лучше. "In current version include doesn't support context iteration" и далее по тексту (я не использую include, поэтому могу ошибаться как оно сейчас). Использовать blitz можно по-разному, и все способы будут в корне отличаться. Krishna сказал, что blitz "плохой выбор для начала" потому, что он предназначен для программистов. читай lj fisher и т. п. - там все подробно разжевано и написано.

>> научите идиота
боюсь, этот диагноз окончателен
 

Spear

почемучка
Develar
да, про то что контексты в инклудах не поддерживаются я прочел, НО - каким тогда, простите, раком работает контекст, но только если есть дубликат этого блока?

и ещё 0 я нашел решение, правда мне кажется оно неверное (хоть и работает):
PHP:
if ($user)
	{
		$View->context('/userpanel/user');
		$View->iterate();
		$View->set(array('name' => $user, 'sec_key' => 'dsf43rrdsf32'));
		//$View->block('/userpanel/user', array('name' => $user, 'sec_key' => 'dsf43rrdsf32')); - не работает
	}
	else
	{
		$View->context('/userpanel/guest');
		$View->iterate();
		$View->set(array('name' => $user, 'sec_key' => 'dsf43rrdsf32'));
	// $View->block('guest'); - не работает
	}
такой контекст прекрасно в инклуде работает.

-~{}~ 07.02.08 14:34:

Ещё, такой вопроск:
на сайте сложная структура страниц, несколько модулей сайта используют практически разную структуру дизайна (одинакова только шапка)
Стоит ли мне делать один main.tpl, в нем - инклуд header,footer
а контентную чатсь сделать контекстами. Скажем если модуль - профиль, то обрабатывается контекст {{ begin profile }} {{ include('profile.tpl }} {{ end }}

или лучше сделать несколько корневых шаблонов (default.tpl, profile.tpl etc.)
чтобы не перегружать кучей конекстов\блоками один главный main.tpl ?
 

Develar

Новичок
http://phpclub.ru/talk/showthread.php?s=&threadid=98055&highlight=blitz в этой же теме ссылки на lj fisher которые тоже интересны

>> и ещё 0 я нашел решение, правда мне кажется оно неверное (хоть и работает):
мне сам include кажется бредовым функционалом не относящимся к функциональность core движка, но в самом деле интересно.
 

fixxxer

К.О.
Партнер клуба
встроенный инклюд тянется с версии которая была еще без блоков, вобщем забей на него ;) хотя там вроде были какие то исправления, но все равно смысла не вижу.

делаешь разметку типа {{ $BLOCK_HEADER }} {{ $BLOCK_FOOTER }} и сетишь что нужно во вьюхе
либо используешь методы (в них кстати всегда можно сделать new Blitz ;) то есть использовать для "псевдо инклюдов" еще один инстанс)

методы context и iterate это по сути php-templates compatibility, достаточно set и block (я обхожусь вообще одним set).
 

Spear

почемучка
делаешь разметку типа {{ $BLOCK_HEADER }} {{ $BLOCK_FOOTER }} и сетишь что нужно во вьюхе
ну чтобы что-то сетить - нужно же тоже как-то ХТМЛ сгенерировать. А для этого поулчается нужно делать инстансы класса блитз?

либо используешь методы (в них кстати всегда можно сделать new Blitz то есть использовать для "псевдо инклюдов" еще один инстанс)
ага понял. я как рза и спрашивал - верно ли использование такого подхода.


методы context и iterate это по сути php-templates compatibility, достаточно set и block (я обхожусь вообще одним set).
кстати, с этим тоже разобрался :) Точнее мне помог уважаемый Фишер - нужно делдать так
$view->block('/userpanel/user', $vars, <b>TRUE</b>)

теперь все будет обрабатываться

fixxxer, огромное спасибо за ответ!
 

fixxxer

К.О.
Партнер клуба
> А для этого поулчается нужно делать инстансы класса блитз?
ага.
вообще удобно сделать наследника blitz с нужными методами, который всякие стандартные штучки типа хедера-футера уже будет уметь.
еще более "продвинутый" подход - это фабрика blitz-объектов, смысл в том, что
1) в ее getInstance можно засунуть формирование полных путей, автоматическую установку кругом используемых глобальных переменных и т.п.,
2) если некоторые шаблоны используются несколько раз, можно немного сэкономить cpu путем повторного использования уже созданных обектов (см. метод clean).
 

Develar

Новичок
>> еще более "продвинутый" подход - это фабрика blitz-объектов
пример можно посмотреть http://svn.flyti.org/viewvc.cgi/trunk/classes/flyti/view/?root=flyti
 

Spear

почемучка
fixxxer
хм, я под словом "инстанс" имел ввиду создание нового объекта класса Blitz. Видимо, что-то не так я понимаю :( Можно простенький пример?

Develar
Спасибо за пример! Правда, пока разобраться не смог. Но буду стараться

-~{}~ 08.02.08 14:58:

кстати, расту над собой. Вчера часов 5 читал книгу Котерова (раздел ООП, РНР5), гуглил по ООП, синглтонам, мапперам. Уже хотя бы примерно предсавляю что это. Даже класс регистри написал :) Честное слово - стараюсь понять как правильно использовтаь Блитз, и прочитать код Develar :)
 

fixxxer

К.О.
Партнер клуба
я тоже самое имел в виду ;))

грубо говоря самый примитивный пример
PHP:
class MyTemplate extends Blitz {
 function header() {
   $HeaderTpl = new Blitz('/path/to/header.tpl');
   $HeaderTpl->set(array('title'=>'blabla'));
   return $HeaderTpl->parse();
 }
}
а вообще смотри код Девелара =) там как раз реализован подход о котором я говорил, хотя и черезчур заморочено как по мне %)
 

Spear

почемучка
fixxxer
отлично, понял. Спасибо большое!
А код Develar не простой (для меня) но обязательно буду стараться его понять. Все-таки (как бы это смешно не звучало) - работаю кодером в крупном проекте, плюс один сейчас разрабатываю.


Krishna, тебе тоже спасибо. На самом деле книга котерова мне открыла глаза на многие вещи :) А то купил и как-то небыло необходимости вчитываться (а теперь там даже стикеры вклеены, укмарки так сказать (жаль, нету аналога del.icio.us для оффлайнового использования :))
 
Сверху