blitz templates: вопросы

Rynor

stay hungry
Решил рефактореный в данный момент проект перенести на blitz, т.к. его подход с выносом логики из шаблона в PHP мне нравится.

При добавлении под вендой в php.ini конфига:
blitz.tag_open = {
blitz.tag_close = }
выдаётся ошибка парсинга при запуске апача.

Перeнёс конфиг в .htaccess, так заработало (через ini_set тоже всё ОК):
php_value blitz.tag_open {
php_value blitz.tag_close }

Собственно вопрос.
На смарти, например, есть такая конструкция в шаблоне index.tpl:
Код:
{if $SCRIPT_NAME == '/index.php'}
<script type='text/javascript' src='/index.js'></script>
{/if}
Думаю, на blitz это будет так:
Код:
{ if($condition, "<script type='text/javascript' src='/index.js'></script>", ''); }
Вопрос - как установить condition?
Доку почитал, лаконичная, и сразу просветления нет.
Хотя, в принципе, можно сделать не if, а блок, счас попробую :)

Блок не работает, сделал вот так в шаблоне:
{BEGIN jsIndex}<script type='text/javascript' src='/index.js'></script>{END}
и вот так в скрипте:
PHP:
$T = new View('templates/index.tpl');
$aTpl = array(....);
$T->block('/jsIndex');
echo $T->parse($aTpl);
Где туплю?
 

Semen

Семён
PHP:
$T = new View('templates/index.tpl');
$aTpl = array(....);
$T->block('jsIndex', $aTpl);
echo $T->parse();
 

fisher

накатила суть
>>ошибка парсинга при запуске апача
ошибку в студию

>>Вопрос - как установить condition
лучше такие вещи блоками, пример выше. а установить можно разными способами например тупо $T->parse(array('condition' => TRUE)), см также set. Аналогично работабт переменные в block и fetch.
 

Rynor

stay hungry
fisher:
Посмотрю в логах, я запускаю апач через трей-монитор, всплывает окно с ошибкой, сделаю скриншот. Апач 2.0.49, php 5.2.3.

Semen:
>$T->block('jsIndex', $aTpl);
$aTpl не имеет никаких данных, используемых в блоке (блок, как видно в примере, не содержит переменных), массив передаётся в parse для всего шаблона, а не для отдельного блока. Тем более в доке второй параметр для метода block опционный.

Про if уже понял на практике, что блоки удобнее.
 

fixxxer

К.О.
Партнер клуба
если $aTpl формируется условно можно делать
$aTpl=array(array());
$T->block('jsIndex', $aTpl)

ну и это единственный (кроме dummy vars) способ итерировать через set() когда не нужны данные.
выглядит конечно стремно, но привыкнуть можно ;) тем более в php_templates та же хрень.
 

Rynor

stay hungry
Автор оригинала: fisher
ошибку в студию
Студия здесь: http://raynor.ru/tmp/php_error.gif
Если убрать [blitz], ошибку это не устраняет.

Выскакивает 2 раза, в error_log ничего подозрительного нет, PHP также работает:
[Fri Aug 24 22:08:41 2007] [notice] Apache/2.0.59 (Win32) PHP/5.2.3 configured -- resuming normal operations
[Fri Aug 24 22:08:41 2007] [notice] Server built: Jul 27 2006 15:55:03
[Fri Aug 24 22:08:41 2007] [notice] Parent: Created child process 1996
[Fri Aug 24 22:08:47 2007] [notice] Child 1996: Child process is running
[Fri Aug 24 22:08:47 2007] [notice] Child 1996: Acquired the start mutex.
[Fri Aug 24 22:08:47 2007] [notice] Child 1996: Starting 10 worker threads.

-~{}~ 24.08.07 22:21:

Автор оригинала: fixxxer
если $aTpl формируется условно можно делать
$aTpl=array(array());
$T->block('jsIndex', $aTpl)

ну и это единственный (кроме dummy vars) способ итерировать через set() когда не нужны данные.
выглядит конечно стремно, но привыкнуть можно ;) тем более в php_templates та же хрень.
Можете объяснить подробнее идею с array(array()), я не понял. Примера кода будет достаточно :) Спасибо.
Вот код.

index.php:
PHP:
$T = new Blitz('templates/index.tpl');
$aTpl = array('title' => 'мегасайт.ру');
$T->block('/jsIndex');
echo $T->parse($aTpl);
index.tpl:
{$title}
{BEGIN jsIndex}<script type='text/javascript' src='/index.js'></script>{END}

$title без проблем парсится, блок - нет.

Блоков может быть сколь угодно много, множественные block() для меня пока что нагляднее, чем создание сложного массива для parse.
Буду пробовать, возможно, изменю мнение :)
 

Semen

Семён
убери из блока "/"
PHP:
$T->block('jsIndex');
смотри внимательней доки:
название в block('jsIndex') должно быть
одикавое с {BEGIN jsIndex}
 

Rynor

stay hungry
Тьфу, я забыл указать важную деталь.
Блок находится не в index.tpl, а в другом шаблоне, header.tpl, который подключается внутри index.tpl
Блок в index.tpl корректно обрабатывается как block('jsIndex'), и как block('/jsIndex'), по-моему, это одно и то же :)
Извините за напрасное беспокойство.

Ага, вот нашёл эту темку: http://phpclub.ru/talk/showthread.php?s=&threadid=98055
Что-то изменилось с тех пор к лучшему в деле парсинга инклудов?
 

fisher

накатила суть
>>название в block('jsIndex') должно быть
>>одикавое с {BEGIN jsIndex}

это неправильно. работает это всё по аналогии с файлами - какая директория текущая такой и путь. вначале мы в корне, плэтому block('name') эквивалентно block('/name').

что касается блоков из других шаблонов - blitz умный и наследует итерации. поэтому неважно есть инклюд или нет, главное чтобы вы не напутали с путями. если в корне есть блок root в нём подключение шаблона в котором в корне блок child, то достаточно для корневого шаблона сказать что-то типа
$T->block('/root/child'); /* array(array()) тут не нужен! */
и в подключаемом шаблоне будет проитерирован блок child

объясняю почему не нужен array(array())
block состоит из 2х операций: 1) создать новую итерацию блока 2) положить туда значения если есть
а set array(array()) это более низкоуровневый метод - сразу создаем одну пустую итерацию

далее читаем ошибку ini: это ж parsing error, кавычки-то где?

если у вас остались ещё какие-то вопросы, то рекомендую:
1) создавать темы в "PEAR/Smarty, PECL & другие модули PHP", а не в новостях
2) четко формулировать по пунктам, что именно непонятно. приводить короткие но полные тесткейсы, которые можно скопировать и сразу повторить, а не телепатировать ;)
 

Rynor

stay hungry
Большое спасибо за подробный ответ.

С блоками беру таймаут до утра, я так и делаю в принципе - как написано, да вот что-то не так.

Про php.ini, да, с кавычками работает, однако обычно все настройки работают и без кавычек, впрочем, это уже мелочи.
blitz.tag_open = "{"
blitz.tag_close = "}"
blitz.var_prefix = "$"
 

fisher

накатила суть
>>обычно все настройки работают и без кавычек
обычно настройки не начинаются с $ или { } ;) ещё разик - у вас пишется "parsing error", это значит ошибка парсинга ini - модули тут непричем
 
Сверху