Существует ли Blitz на php ?

Alexandre

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

fixxxer

К.О.
Партнер клуба
да проще же намного компилировать. и работать будет быстрее.

методами set/context/iterate/block формируем массив итераций.

при вызове parse() инклюдим компиленный шаблон.

begin/end вполне ложится на <? foreach: ?>, if/unless - на <? if: ?>.

единственная проблема с fetch, тут надо либо отдельно прогонять компиляцию подблока, либо расставлять хитрые метки и дергать через ob.
 

pilot911

Новичок
Автор оригинала: fixxxer
да проще же намного компилировать. и работать будет быстрее.

методами set/context/iterate/block формируем массив итераций.

при вызове parse() инклюдим компиленный шаблон.

begin/end вполне ложится на <? foreach: ?>, if/unless - на <? if: ?>.

единственная проблема с fetch, тут надо либо отдельно прогонять компиляцию подблока, либо расставлять хитрые метки и дергать через ob.
для знающего человека работы тут на полвечера
 

pilot911

Новичок
половину сделал уже

не уверен, что правильно на все 100%:

делаю так - регеэкспом выделяю из кода блоки

{{BEGIN context}} {{$some_var}} kyky {{END}}

рекурсивно отправляю их на такой же парсинг

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

{{BEGIN context}} {{$some_var_1}} kyky {{END}}

some_text

{{BEGIN context}} {{$some_var_2}} kykyreky {{END}}


как быть?

хотелось бы вообще услышать самый оптимальный путь написания шаблонизатора в условиях синтаксиса блица - желательно поподробнее, чтобы все стало на свои места
 

HraKK

Мудак
Команда форума
это абзац. причем клинический. Смарти отдыхает.
убейте меня кому не лень.
 

HraKK

Мудак
Команда форума
Нет.
Есть смарти - это пхп написаный на пхп.
Теперь пишем:
пхп написаный на пхп на синтаксисе внешней программы да еще и без компиляции.

Вот досих пор не пойму преимущества того же блитз перед native. Может я действительно ограниченный?

П.С. сфоткал коробочную версию Blitz продаваемую в Киеве.
 

Lightning

Трудоголик
Вот досих пор не пойму преимущества того же блитз перед native
Говорят, что Blitz быстрее, т.к. выполнен в виде модуля.

-~{}~ 25.03.09 00:27:

Сам не проверял

-~{}~ 25.03.09 00:29:

люди, сделайте проще - вместо собственных шаблонизаторов - воплотите в пхп Blitz, чтобы будущие проекты могли легко переехать на бинарный шаблонизатор без изменения кода
Улыбнуло )))
 

weregod

unserializer
Автор оригинала: HraKK
Вот досих пор не пойму преимущества того же блитз перед native. Может я действительно ограниченный?
преимущество в том, что верстальщик какого-нибудь вечного цикла не создаст, я так понимаю
ну да не первый такой шаблонизатор, не первый...
 

AmdY

Пью пиво
Команда форума
weregod
забудь про потенциального неграмотного верстальщика. а зациклить может и программист.
 

weregod

unserializer
AmdY
программист зациклил - программист расциклит

AmdY, Lightning
расширим сознание следующим примером:
у Вас есть CMS-ка и сто тыщ клиентов с сайтами на Вашем же хостинге.
в админке CMS-ки шаблоны моржно редактировать, 10% клиентов начинают пользовать эту возможность, у 8% из них это получается через пятую точку, результат - увеличение бесполезной нагрузки на сервер.

чиселки абстрактные, но тема раскрыта
 

Lightning

Трудоголик
weregod
Само по себе создание языка шаблонов поверх PHP не решает описанную табой задачу.

-~{}~ 25.03.09 01:53:

Чтобы редактировать шаблоны на PHP или на каком-либо языке шаблонов, человек должен понимать что такое ветвления и циклы. Если он этого не понимает, то блочные шаблоны ему в руки. А блочные шаблоны тоже можно реализовать на нативе. А можно зачем-то использовать специальный блочный шаблонизатор...

-~{}~ 25.03.09 01:59:

weregod
При чем тут вообще CMS. В своей CMS ты можешь вообще сделать так, чтобы пользователь мог выбирать шаблонизатор.
 

AmdY

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

fixxxer

К.О.
Партнер клуба
iteration set это структура с рекурсивным определением:
PHP:
<set> ::= array(
    'scalar1' => 'value of scalar 1',
    'scalar2' => 'value of scalar 2',
    ....,
    'block 1' => array(
        0 => <set>,   
        1 => <set>,
        ....
    ),
);
Отбросив вариации на тему 'block1' => <set> (это хак), получаем, что шаблон вида

PHP:
{{ var1 }}
{{ BEGIN A }}
   {{ var2 }}
   {{ BEGIN B }}
      {{ var3 }}
      {{ f_callback(var4) }}
   {{ END }} 
{{ END }}
должен компилиться в нечто наподобие

PHP:
$_ = $this->globals;
$_0 = $this->set;
if (isset($_0['var1'])) echo $_0['var1']; elseif (isset($_['var1'])) echo $_['var1'];
if (isset($_0['A']) && is_array($_0['A'])) foreach ($_0['A'] as $_1):
    if (isset($_1['var2'])) echo $_1['var2']; elseif (isset($_['var2'])) echo $_['var2'];
    if (isset($_1['B']) && is_array($_1['B'])) foreach ($_1['B'] as $_2):
        if (isset($_2['var3'])) echo $_2['var3']; elseif (isset($_['var3'])) echo $_['var3'];
        echo $this->f_callback(isset($_2['var4'])?$_2['var4']:(isset($_['var4'])?$_['var4']:NULL)));
    endforeach;
endforeach;
Компилятор бы я писал на конечном автомате, чтобы не париться с рекурсивными регулярками, которые в pcre в плане пожирания стека шибко злы (не говоря уж о общей долбанутости).
 

iceman

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