php_templates 1.3

Что нужнее?

  • Пофиксить tmpl_unset()

    Голосов: 1 5,3%
  • Реализовать кэширование шаболнов

    Голосов: 9 47,4%
  • Сделать benchmark'и, сравнивая с другими движками

    Голосов: 5 26,3%
  • Сделать РНР-клон php_templates.php

    Голосов: 7 36,8%
  • Улучшить документацию

    Голосов: 6 31,6%

  • Всего проголосовало
    19
Статус
В этой теме нельзя размещать новые ответы.

su1d

Старожил PHPClubа
2LENNY:
насчёт 1.5 верю. там были баги, crash'ащие РНР к такой-то матери..
про 1.6 - соответственно, не очень.. у меня он ещё ни разу не упал. =)
кинь мне пример скрипта с шаблоном, пожалуйста.

2wizards:
неа.. не знаю.. тут есть идея вместе со следующим релизом сделать РНР-клон движка и wrapper'ы для популярных библиотек типа FastTemplate, IT[x], etc. тогда всё будет.
но это будет не очень скоро.. у меня сейчас практически нет времени на разработку чего-то фундаментального.. разве что вот bugfix-release выброшу, если подтвердится баг LENNY.
 

LENNY

Guest
вот к примеру такой код 100% валит Apache...

!bug.php

<?

$d=tmpl_open("bug.tpl");

$style[1]=555;
$style[2]=777;

tmpl_set_global ($d,'s1',$style[1]);
tmpl_set_global ($d,'s2',$style[2]);


tmpl_unset($d,'f1');

echo tmpl_parse($d);
tmpl_close

?>

!bug.tpl

123{s1}

<tmpl:f1>
555{s2}

<tmpl:time>

777

</tmpl:time>

</tmpl:f1>

<tmpl:fo>
123
</tmpl:fo>

555

--------
вроде бы баг проявляется при использовании tmpl_unset(), короче погляди

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

su1d

Старожил PHPClubа
а-а.. tmpl_unset().. уверен, именно она и валит..
ых, и зачем я её вообще добавил - не знаю.. разве только для полного набора функций в АПИ, хотя сам никогда её не использую... признаЮ, что ф-ция эта жутко глючная, результат её выполнения не всегда однозначен, в общем в след. релизе подправлю там что-нибудь, чтобы хотя б ошибку выдавало...
но вообще, не совсем понимаю: зачем она нужна.. =) у меня она ни разу нигде ещё не юзалась..
 

LENNY

Guest
Хорошо, tmpl_uset(); юзать не будем... но тогда -

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

P.S. Если не использовать глобальных переменных, то тогда всё правильно, т.е. его не видно. Но я без глобальных переменных не могу, в них
я передаю загловки и цвета и прочую фигню...
 

su1d

Старожил PHPClubа
прямо и не знаю что ответить.
у меня как-то всегда получалось строить шаблоны так, чтобы и глобальные переменные были не нужны. =)
выходов вижу несколько:
а) как я уже сказал: get a life без глобальных переменных (нехорошо)
б) можно изменить tmpl_set_global() так, чтобы она не заходила в ещё неитерированные контексты (нарушит обратную совместимость)
в) можно добавить четвёртый параметр к tmpl_set_global(), принимающий значения true (по умолачнию) и false, и говорящий движку соответственно "заходить" или "не заходить" в неитерированные контексты (всё ОК, но усложнится АПИ)
г) оставить всё как есть и юзать вот такую функцию вместо tmpl_set_global():
PHP:
function tmpl_set_global_php($tmpl, $global_tag, $value) {
static $STRUCT;

    if(!isset($STRUCT[$tmpl])) {
        $structure = tmpl_structure($tmpl, '/', TMPL_TAG, TMPL_LONG);
        foreach($structure as $tag) $STRUCT[$tmpl][basename($tag)][] = $tag;
    }

    if(!isset($STRUCT[$tmpl][$global_tag])) return false;

    foreach($STRUCT[$tmpl][$global_tag] as $tag) {
        $content = tmpl_get($tmpl, dirname($tag));
        if(!sizeof($content)) continue;
        tmpl_set($tmpl, $tag, $value);
    }
    return true;
}
думаю, что я её максимально оптимизнул на скорость.

хотя.. честно говоря, мне больше нравится вариант б)
 

LENNY

Guest
я конечно понимаю, что тебе нет никакого удовольствия менять код и совместимость движка, но тем не менее...

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

б) мне тоже этот вариант очень нравиться, ИМХО это было бы намного логичнее, но с обратной совместимостью могут быть действительно проблемы :-( может стоит просто ввести новую функцию типа tmpl_set_global2() и т.п.?

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

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

кстати если решишь сделать по варинату б) то не затруднило бы тебя прислать мне временную версию на 4.3.0 Win dll?
 

su1d

Старожил PHPClubа
может стоит просто ввести новую функцию типа tmpl_set_global2()
не хочется нагружать АПИ новыми функциями...


насчёт б) подниму тему на родном форуме на Sourceforge. пускай там повисит некоторое время.. если для кого-то это будет критичным, то выскажется.. а если промолчит - значит не настолько и критично, а значит можно и подумать о смене поведения..
 

LENNY

Guest
как скоро можно узнать результат твоего решения?

кстати код который ты дал выше не работает :-(
 

su1d

Старожил PHPClubа
1. я б уже выложил движок с новым поведением, но у меня сейчас исходники полностью разгромлены и находятся в состоянии "кишки наружу"... это я типа добавляю новую фичу.. =) как приведу всё в божеский вид, сменю поведение tmpl_set_global() и посмотрим, что из всего этого получится...

2. код должен работать. как именно он у тебя не работает? =)
 

LENNY

Guest
ну что я делаю: беру этот твой код и вставляю, далее глобальные переменные объявляю как

tmpl_set_global_php ($tmpl,'test','555');

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

LENNY

Guest
значит проверил я сей код и могу точно сказать, что он работает не правильно, как минимум у меня :)

значит если объявлять переменные через tmpl_set_global_php, то контекст всё равно показывается, и при этом самой переменной в нём не видно...
 

su1d

Старожил PHPClubа
у-у-у.. там жили баги.. у них там было гнездо =)
теперь уже нет.

...разве что какие-нидь новые теперь появились ;)
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху