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

AnToXa

prodigy-одаренный ребенок
кстати, имхо open types (возможность расширять уже существующие классы и даже объекты этих классов отдельно) - это одна из самых сильных сторон ruby, которые в пхп заиметь было бы круто очень.
 

Develar

Новичок
AnToXa
http://pecl.php.net/package/runkit

Четность и нумерация это counters в CSS и проблемы верстальщика, но наличие инвалида IE вынуждает делать это на стороне сервера - и решение вопроса четности там, где у нас максимум информации - в методе движка что производит текущую операцию - оптимальный для скорости вариант, да и разработчику не надо париться - как и в случае fetchAll из базы, только вот fetchAll нужен почти всем, а эта четность - за год - вот только сейчас и возник вопрос - и это попахивает "если верстальщику дать хоть сколь либо богатый синтаксис, то шаблоны превратятся в месиво".
 

fisher

накатила суть
Develar
поясни плз про счетчики - и ты тоже против того чтобы включить это дело (предлагаю уже наконец перейти на ты кстати)?

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

fixxxer

К.О.
Партнер клуба
для хелперов вполне достаточно __call ;)

-~{}~ 24.07.07 18:31:

>надо плодить ровно столько методов, сколько есть разных списков
или один метод и аргумент.

кстати можно добавить что-нибудь типа $current_block_name и $current_block_fullpath :)

а вообще, счетчики это, по-хорошему, действительно проблема css. в ie это можно делать через expression - если конечно js не отключен.
 

Develar

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

>> в ie это можно делать через expression
реализовывать наследование для last/first и ключевых слов типа after в js побоится и программист, не то что верстальщик.
 

AnToXa

prodigy-одаренный ребенок
Develar
ага, только вот сравним синтаксис и семантику create_function с нормальными functions as first class values и прослезимся.
комплексная штука короче, в общем оффтопик наверное здесь :)
 

AP

Новичок
[offtop]
AnToXa,
кстати, имхо open types (возможность расширять уже существующие классы и даже объекты этих классов отдельно) - это одна из самых сильных сторон ruby, которые в пхп заиметь было бы круто очень.
В Limb Toolkit есть что то вроде расширения объектов
[/offtop]
 

pachanga

Новичок
[offtop]
Автор оригинала: AP
[offtop]
AnToXa,
В Limb Toolkit есть что то вроде расширения объектов
[/offtop]
Ну это слишком громко сказано. Это довольно специфичный функционал, который не является полноценным аналогом тех же mixins в ruby.
[/offtop]
 

fisher

накатила суть
v 0.4.25, http://sourceforge.net/project/downloading.php?group_id=188147&use_mirror=osdn&filename=blitz-0.4.25.tar.gz&8349819

Predefined loop variables were added: $_total, $_num, $_even, $_odd, $_first, $_last - they can be used in any context. Variable $_total is the total number of context iterations, $_num is the current iteration number starting with 1, $_even and $_odd are 1 when the current iteration is even or odd and 0 otherwise, $_first and $_last are 1 when the current iteration is first or last and 0 otherwise. Fixed bug#68 (nonexistant context iteration "cleans" previous data set in the root iteration). Fixed bug#69 (problems with date() function tests and optional second parameter).

для тех, кому интересны будущие планы, основных фич будет добавлено ещё совсем чуть-чуть (сорри за английский просто копирую из письма)
-improve include and parse methods: now they can accept an
array of global parameters (old optional functionality) but I will
make them comply with block, fetch
and set methods. But AFAIK these optional features are very rarely
used by blitz users, I hope to process this insensibly.
- things like {{ $hash.key }} or even {{ $object.property }}
- extend if to have simple expressions like <> or == but these
expressiona will operate on a basic variables only, there wuill be no
language, just a possibility to use something more than non-empty
check

первые две фичи будут точно в теч ближайшего времени, последняя фича под некоторым вопросом.
 

juks

Новичок
Поставил 0.5.2

Что-то не работает.

Лог апача (Apache/1.3.37):

[Sat Aug 18 20:30:07 2007] [notice] child pid 24307 exit signal Bus error (10)

А вот такой тест:
# php run-tests.php

=====================================================================
CWD : /usr/local/src/blitz
PHP : /usr/local/bin/php
PHP_SAPI : cli
PHP_VERSION : 5.2.3
ZEND_VERSION: 2.2.0
PHP_OS : FreeBSD - FreeBSD cockroach 6.2-RELEASE FreeBSD 6.2-RELEASE #0: Fri Jan 12 08:32:24 UTC 2007 [email protected]:/usr/obj/usr/src/sys/GENERIC amd64
INI actual : /usr/local/lib/php.ini
More .INIs :
Extra dirs :
=====================================================================
TIME START 2007-08-18 20:37:00
=====================================================================
FAIL block [tests/block.phpt]
PASS clean [tests/clean.phpt]
FAIL contexts [tests/context.phpt]
FAIL date output wrapper [tests/date.phpt]
FAIL errors and warnings: syntax [tests/errors1.phpt]
PASS errors and warnings: execution [tests/errors2.phpt]
PASS escape output wrapper [tests/escape.phpt]
FAIL fetch#1 [tests/fetch1.phpt]
PASS fetch#2 [tests/fetch2.phpt]
FAIL fetch#3 [tests/fetch3.phpt]
FAIL get context [tests/get_context.phpt]
PASS has context [tests/has_context.phpt]
FAIL predefined methods: if [tests/if.phpt]
FAIL controller include method [tests/include-method.phpt]
FAIL predefined methods: include [tests/include.phpt]
FAIL include with context iteration [tests/include_ctx.phpt]
FAIL multiple include cache test [tests/include_multi.phpt]
PASS ini-values settings test [tests/ini.phpt]
PASS nonexistant path iteration [tests/iterate_nonexistant.phpt]
FAIL user-defined methods [tests/method.phpt]
FAIL method call from inner include [tests/mfi.phpt]
PASS mix #1 [tests/mix1.phpt]
PASS mix #2 [tests/mix2.phpt]
PASS mix #3 [tests/mix3.phpt]
PASS mix #4 [tests/mix4.phpt]
PASS mix #5 [tests/mix5.phpt]
FAIL mix #6 [tests/mix6.phpt]
PASS numerical and non-numerical keys in the iteration set [tests/non_num_iter.phpt]
FAIL parse with iteration set [tests/parse_with_iterations.phpt]
PASS relative path (blitz.path) [tests/path.phpt]
PASS partial php_templates syntax compability [tests/phpt_compability.phpt]
PASS returning non-strings from user methods [tests/return_non_string.phpt]
PASS set and get [tests/set_and_get.phpt]
PASS mixed set [tests/set_mixed.phpt]
FAIL variables [tests/var.phpt]
=====================================================================
TIME END 2007-08-18 20:37:01

=====================================================================
TEST RESULT SUMMARY
---------------------------------------------------------------------
Exts skipped : 0
Exts tested : 27
---------------------------------------------------------------------

Number of tests : 35 35
Tests skipped : 0 ( 0.0%) --------
Tests warned : 0 ( 0.0%) ( 0.0%)
Tests failed : 17 ( 48.6%) ( 48.6%)
Tests passed : 18 ( 51.4%) ( 51.4%)
---------------------------------------------------------------------
Time taken : 1 seconds
=====================================================================

=====================================================================
FAILED TEST SUMMARY
---------------------------------------------------------------------
block [tests/block.phpt]
contexts [tests/context.phpt]
date output wrapper [tests/date.phpt]
errors and warnings: syntax [tests/errors1.phpt]
fetch#1 [tests/fetch1.phpt]
fetch#3 [tests/fetch3.phpt]
get context [tests/get_context.phpt]
predefined methods: if [tests/if.phpt]
controller include method [tests/include-method.phpt]
predefined methods: include [tests/include.phpt]
include with context iteration [tests/include_ctx.phpt]
multiple include cache test [tests/include_multi.phpt]
user-defined methods [tests/method.phpt]
method call from inner include [tests/mfi.phpt]
mix #6 [tests/mix6.phpt]
parse with iteration set [tests/parse_with_iterations.phpt]
variables [tests/var.phpt]
=====================================================================

-~{}~ 18.08.07 21:20:

Вроде бы синтаксис основных директив не менялся?
 

fisher

накатила суть
ВСЁ ПРОЩЕ
если вы проверяете тесты как make test или php run-tests.php в корне проекта - то отвалятся все тесты с чтением файлов.
там есть run-tests.sh которым тестирую я, я это сделал криво и не по стандарту, там банально слетают пути до шаблонов, если тестить как-то по-другому. короче в следующей версии я подправлю тесты, чтоб никакого гемора с ними не было.
 

fixxxer

К.О.
Партнер клуба
не работает - это не описание проблемы. у меня вот работает)
bt сделай чтоли...
 

fisher

накатила суть
выложил свежую версию 0.5.3
http://downloads.sourceforge.net/blitz-templates/blitz-0.5.3.tar.gz
по сравнению с последними анонсами которые публиковались здесь реализованы фичи
- ini-параметр blitz.path задает корневую директорию для шаблонов. по умолчанию пуст, если не пуст и путь шаблона не начинается с / то все пути считаются относительными blitz.path
- из parse и include убраны атавизмы - раньше в аргументах могли быть массивы только глобальных переменных. теперь это обычный iteration set - такой же как в block, fetch и set. При include глобальные переменные наследуются от того шаблона, из которого вызвали include.
- теперь работают {{ $object.property }} и {{ $array.key }}. "." означает просто отношение объект-переменная (object->property) или хэш-значениеключа (array->key), могут быть и более сложные конструкции типа {{ $array.object_key.property_array.key }}. Константы теперь могут иметь не-скалярные значения, чтобы работали штуки типа {{
$config.param }}. Синтаксис поддерживается как при отображении значений в шаблоне так и в аргументах методов.
- подправлены тесты, так чтоб можно было тестировать в любом окружении (в прошлых версиях при прогонке тестов стандартными методами слетали пути до шаблонов)

это почти все фичи которые я собирался добавить - остался только set в шаблоне, который будет сделан в ближайшее время в виде {{ set($url, "/my/site/", $id, '/index.html') }} . это будет работать очень просто: значением первого аргумента $url после выполнения будет строка из последовательно сконкатенированных прочих аргументов.

да, за последнее время двое человек мне отрепортили проблемы со сборкой blitz под FreeBSD(4-ка и 6-ка), но посольку у меня нет доступа к этим серверам оценить в чем дело сложно. Мы специально сегодня собрали 0.5.2 на сервере у fixxxera (6-ка), никаких проблем кроме того что валятся тесты из-за неправильных путей - не обнаружили. Если у вас что-то не работает - присылайте тест-кейсы, мои телепатические способности имеют предел.
 

juks

Новичок
Автор оригинала: fixxxer
не работает - это не описание проблемы. у меня вот работает)
bt сделай чтоли...
Код:

PHP:
<?php
$tpl = new Template('fuck.tpl');
$tpl->set(array('key'=>'value'));

echo $tpl->parse();
?>
Шаблон:

<html>
test {{$key}}
</html>

Лог Апача:

Aug 20 12:40:15 cockroach kernel: pid 33215 (httpd), uid 1007: exited on signal 10

Соответственно, от сервера ничего не приходит, просто закрывается соединение.

FreeBSD 6.2 + Apache/1.3.37 + PHP 5.2.3 + Blitz 0.5.3

Если не вызывать parse(), то проблемы нет:

PHP:
<?php
$tpl = new Template('fuck.tpl');
$tpl->set(array('key'=>'value'));

echo "value";
#echo $tpl->parse();
?>
Если заменить blitz.so на 0.4.23, то тоже порядок
 

fisher

накатила суть
juks
кто такой Template, где его код?
исправьте на Blitz - проверьте работает ли. Если работает - обязательно пришлите код вашего класса Template. Попробуйте запустить ваш скрипт с консоли - если валится корка, то на чём. Также можно запустить скрипт под валгриндом - будет куда больше инофрмации.
 

juks

Новичок
Автор оригинала: fisher
juks
кто такой Template, где его код?
исправьте на Blitz - проверьте работает ли. Если работает - обязательно пришлите код вашего класса Template. Попробуйте запустить ваш скрипт с консоли - если валится корка, то на чём. Также можно запустить скрипт под валгриндом - будет куда больше инофрмации.
Прошу прощения, ступил.

New Blitz() — тоже не работает через апач.
Из консоли — работает всегда.

Валгринда сейчас нет. Если вариантов других нет, то можно, конечно, заняться. Но времени сейчас не очень.
 

fixxxer

К.О.
Партнер клуба
Freebsd 6.2 generic, Apache/1.3.37, mod_php 5.2.3 + последний blitz - на данном примере все работает.

пришли корку чтоли.
и покажи httpd -l и phpinfo()

да, кстати, вот сразу попробуй

- #if HAVE_MMAP
- result = blitz_read_with_mmap(tpl, filename_normalized TSRMLS_CC);
- #else
result = blitz_read_with_fread(tpl, filename_normalized TSRMLS_CC);
- #endif
 

fisher

накатила суть
был, был баг, и крайне тупой, mmap здесь непричем. обновляйтесь до 0.5.4. из консоли тоже не работало, скорее всего вы просто подгружали старый so-шник.
 

fixxxer

К.О.
Партнер клуба
что ты собрал - то я и подгружал :) работало же ж. красивый phpinfo это точно одна из последних версий же ;) ну баг нашелся и хорошо.

а вот freebsd порт blitz кому нить нужен? можно будет заняться, сделать и попробовать пропихнуть :)
 
Сверху