blitz templates - теперь на sf.net

faraon111

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

[Sun Mar 13 23:59:51 2011] [error] [client 127.0.0.1] PHP Warning: blitz::blitz(): SYNTAX ERROR: end with no begin (/var/www/anti/templates/nova/head.tpl: line 188, pos 1) in /var/www/anti/core/functions.php on line 47
/usr/sbin/apache2: symbol lookup error: /usr/lib/php5/20090626/blitz.so: undefined symbol: timelib_time_ctor

как решить данную проблему?
спасибо
 

faraon111

Новичок
/usr/sbin/apache2: symbol lookup error: /usr/lib/php5/20090626/blitz.so: undefined symbol: timelib_time_ctor

теперь тока это выскакивает, и белая страница(((
 

tony2001

TeaM PHPClub
это криво собранный экстеншен.
хидеры PHP были от одной версии, а сам PHP - другой.
 

IvanCh

Новичок
Добрый день!
Начал пользоваться blitz'ом - пока всё устраивает и радует :)

Но, возникла проблема со скинами (планируется их несколько): да, я видел, что для этого был создан ini-параметр blitz.path, но либо дело в том, что я тестирую всё на локальном ПК с win7 и денвером, либо я неверно устанавливаю значение. Или всё сразу )

Например, я делаю так:
ini_set('blitz.path','Z:\home\site.ru\www/tpl/default/');
Но в итоге выпадает "template was not loaded/initialized (cannot find template descriptor)"

Можно, конечно, сделать это по-другому, но главная проблема в том, чтобы непосредственно в шаблоне использовать include('item.tpl'), а не указание пути и т.п.

- ini-параметр blitz.path задает корневую директорию для шаблонов. по умолчанию пуст, если не пуст и путь шаблона не начинается с / то все пути считаются относительными blitz.path
 

IvanCh

Новичок
И ещё небольшой вопрос: каким образом получить имена тех шаблонов, которые были проинклудены?

Или придется для такого обернуть метод include(), использовав пользовательский метод? //сказывается ли сильно на производительности?
 

fisher

накатила суть
Добрый день!
Например, я делаю так:
ini_set('blitz.path','Z:\home\site.ru\www/tpl/default/');
Но в итоге выпадает "template was not loaded/initialized (cannot find template descriptor)"
А может правильно
ini_set('blitz.path','Z:\home\site.ru\www\tpl\default\');
?

И какая версия? blitz должен по идее писать полностью имя файла, который не удалось подгрузить.
 

fisher

накатила суть
И ещё небольшой вопрос: каким образом получить имена тех шаблонов, которые были проинклудены?

Или придется для такого обернуть метод include(), использовав пользовательский метод? //сказывается ли сильно на производительности?
Метода нет, на производительности скажется - в зависимости от числа инклюдов на страницу. Но сама цель получить такой список - непонятна.
 

IvanCh

Новичок
А может правильно
ini_set('blitz.path','Z:\home\site.ru\www\tpl\default\');
?

И какая версия? blitz должен по идее писать полностью имя файла, который не удалось подгрузить.
Версия php 5.2.4, blitz 0.6.10 - в ней он не выводит ошибку с путем до файла, который хотелось инклудить.
Насчет слешей в пути - я просто не то вставил, но пробовал, наверное, все возможные варианты :)
Не работает ни в какую.

Повторюсь, что это всё под локальным Денвером.

Но вот обновил php до 5.3.3 и проч. поставил blitz 0.7.1.6 и там всё прекрасно работает с ini-параметром, да и если в пути ошибешься, то варнинг вменяемый :)

Видимо возникала не разбериха с win.
 

IvanCh

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

Пару дней назад думал, что это будет лучше.
 

fisher

накатила суть
Но вот обновил php до 5.3.3 и проч. поставил blitz 0.7.1.6 и там всё прекрасно работает с ini-параметром, да и если в пути ошибешься, то варнинг вменяемый :)Видимо возникала не разбериха с win.
Так под виндой проблема осталась или нет?
 

IvanCh

Новичок
fisher, проблема осталась только с предыдущими версиями под виндой. Хотя, я читал, что "blitz.path global should work fine with Windows-like systems ("C:/dir/" paths) версия 0.6.7"
 

fixxxer

К.О.
Партнер клуба
У меня где-то валялись мои патчи для оверрайда template path в конструкторе Blitz вторым параметром. Если очень надо, могу поискать :)
 

IvanCh

Новичок
Не, не надо морочиться : ), эту мелкую проблему решил обновлением.

Главное, чтобы потом, юзеры нашли, что она есть и не мучались )
 

IvanCh

Новичок
Возникла проблема с условными операторами. Либо я что-то не понял или пропустил в мануале, либо это ошибка.

Есть test.tpl:
PHP:
    {{BEGIN item}}     
    <table width="100%">
        <tr>
            <td width="100%">
                {{ IF $category }} 
                    {{$category}}
                {{ELSE}}                    
                no cat
                {{ END if-category}}
                
                {{$text_short}}
                {{$text_full}}
            </td>
        </tr>
    </table>
    <br /><br />
    {{END item}}
test.php:
PHP:
    $t = new Blitz('test.tpl');
    $t->set(
        array(
            'item' => array(
                0 => array(
                        'category' => '2',
                        'text_short' => 'text_short',
                        'text_full' => 'text_full',
                     ),
                1 => array(
                        'category' => '0',
                        'text_short' => 'no_cat text_short',
                        'text_full' => 'no_cat text_full',
                     ),
            )
            
        )
    );
    $t->display();
И данный код выводит:
PHP:
2 text_short text_full  


no cat no cat {{ END if-category}} no_cat text_short no_cat text_full
Почему так?

Если убрать переменные {{$text_short}}, {{$text_full}} из шаблона то будет работать.
Если тоже самое делать без item, то условники работают верно.


//О существовании if(predicate, output_true [, output_false]) - знаю, но намного удобнее блочный вариант.

UPD:
Если делать вот так вот (писать полный вариант условного блока):
PHP:
    {{BEGIN item}}     
    <table width="100%">
        <tr>
            <td width="100%">
                {{ IF $category }} 
                    {{$category}}
                {{ ELSEIF $nocategory }} 
                    no category
                {{ELSE}}
                {{ END if-category}}
                
                {{$text_short}}
                {{$text_full}}
            </td>
        </tr>
    </table>
    <br /><br />
    {{END item}}
И в коде создавать переменную $nocategory, которая является отрицанием $category, то всё работает.
 

fixxxer

К.О.
Партнер клуба
О, elseif появился.

Вообще можно делать просто (0.6x style)
Код:
{{ IF category }}
 {{ category }}
{{ END }}{{ UNLESS category }}
  no category
{{ END }}
 

IvanCh

Новичок
fixxxer, я, конечно, так тоже пробовал сразу :)
Но у меня опять же не работает:
PHP:
2 {{$text_short}} text_full  


no category {{$text_short}} no_cat text_full
Если убрать переменные после условных блоков - всё нормально.

Повторюсь, что тестирую я из-под винды ( пхп 5.3.3, blitz 0.7.1.6).
По другими ОС нет возможности сейчас.
 

fisher

накатила суть
просьба - проверить на последней версии и если баг есть, то запостить его в багтрекер
 

IvanCh

Новичок
Что-то меня раньше переклинило, что 0.7.1.6 - последняя версия (сорри).
На ней как раз баг с условниками есть.

Обновил до 0.7.1.8 - всё окей! //пока, тесты мои всё прошло :)
0.7.1.9 не смог проверить, так как она не собрана под вин32 VC6 TS.
 
Сверху