Welcome! Log In Create A New Profile

Advanced

blitz, ошибка при повторном использовании load

Posted by akalend 
blitz, ошибка при повторном использовании load
December 17, 2009 10:14AM
Алексей,

так по ходу дела:

$b = new blitz();
$b-> load( $template);
.....
$b->parse();
...
$b-> load( $template2 ); // вызываем повторно

пишет ошибку, $b->clean() шаблон не чистит, а только переменные

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

хотелось бы в этом случае иметь метод $b->clearTemplate() или чистить при новом вызове load() автоматически

попробую профиксить самостоятельно.
как фичереквест можно принять, типа, метод unset. лучше такое в багтрак занести
http://alexeyrybak.com/blitz/bt/

2009/12/17 Alexandre Kalendarev <akalend@mail.ru>:
> Алексей,
>
> так по ходу дела:
>
> $b = new blitz();
> $b-> load( $template);
> ....
> $b->parse();
> ...
> $b-> load( $template2 ); // вызываем повторно
>
> пишет ошибку, $b->clean() шаблон не чистит, а только переменные
>
> по идеи - если я в каком-то классе создал экземпляр блица (в конструкторе), то могу использовать загрузку шаблона в методе только один раз, либо в методе каждый раз инициализировать блитц, что не совсем правильно.
>
> хотелось бы в этом случае иметь метод $b->clearTemplate() или чистить при новом вызове load() автоматически
>
> попробую профиксить самостоятельно.
>
>



--

wbr,
fisher
Я один ничего не понял?

2009/12/18 Alexandre Kalendarev <akalend@mail.ru>

> Алексей,
>
> так по ходу дела:
>
> $b = new blitz();
> $b-> load( $template);
> ....
> $b->parse();
> ...
> $b-> load( $template2 ); // вызываем повторно
>
> пишет ошибку, $b->clean() шаблон не чистит, а только переменные
>
> по идеи - если я в каком-то классе создал экземпляр блица (в
> конструкторе), то могу использовать загрузку шаблона в методе только один
> раз, либо в методе каждый раз инициализировать блитц, что не совсем
> правильно.
>
> хотелось бы в этом случае иметь метод $b->clearTemplate() или чистить при
> новом вызове load() автоматически
>
> попробую профиксить самостоятельно.
>
>
17.12.2009, в 23:43, Anatoly Pashin написал(а):

> Я один ничего не понял?


У блитца есть особенность - load загружает шаблон только один раз. А
clean очищает только использованные переменные. Получается, один блитц
- один шаблон. Я когда в первый раз использовал - тоже смущался, в
итоге код блитца поправил, но затем мне объяснили, что так править не
нужно )
--
Yours, Oleg Roschupkin
jjahson@gmail.com
Re[2]: blitz, ошибка при повторном использовании load
December 21, 2009 02:54AM
> У блитца есть особенность - load загружает шаблон только один раз. А
> clean очищает только использованные переменные. Получается, один блитц
> - один шаблон. Я когда в первый раз использовал - тоже смущался, в
> итоге код блитца поправил, но затем мне объяснили, что так править не
> нужно )

как раз - это просится: Зачем плодить несколько экземпляров блица на парсинг нескольких разных шаблонов. По крайней мере такой код более правильный:

{{{
foo class {

private $b = null;

public function __construct() {}
$this->b = new blitz();
}

public function bar($data) {
$this->b->load( $this->someTpl );
$this->b->block('myblock', $data);
return $this->b->parse();
}

}}}

нежели код особенно если у тебя несколько вызовов foo->bar() для разных шаблонов:
{{{
public function bar($data) {
$b = new blitz();
$b->load( $this->someTpl );
$b->block('myblock', $data);
return $b->parse();
}
}}}

Вышли мне пожалуйста патч.


Александр.
21.12.2009, в 15:53, Alexandre Kalendarev написал(а)
>
> как раз - это просится: Зачем плодить несколько экземпляров блица на
> парсинг нескольких разных шаблонов. По крайней мере такой код более
> правильный:
>
> {{{
> foo class {
>
> private $b = null;
>
> public function __construct() {}
> $this->b = new blitz();
> }
>
> public function bar($data) {
> $this->b->load( $this->someTpl );
> $this->b->block('myblock', $data);
> return $this->b->parse();
> }
>
> }}}
>
> нежели код особенно если у тебя несколько вызовов foo->bar() для
> разных шаблонов:
> {{{
> public function bar($data) {
> $b = new blitz();
> $b->load( $this->someTpl );
> $b->block('myblock', $data);
> return $b->parse();
> }
> }}}
>
> Вышли мне пожалуйста патч.
>
>
> Александр.


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

3403 if (tpl->static_data.body) {
3404 php_error_docref(NULL TSRMLS_CC, E_WARNING,"INTERNAL
ERROR: template is already loaded");
3405 RETURN_FALSE;
3406 }

Как мимнимум с таким патчем есть проблема, что я сильно не уверен в
том, кае он чистит память.

По поводу block() - насколько я знаю, никто их ообо не использует -
даже те, кто сделал ) По большей части все данные вгружается set()'ом
и затем парсятся parse().
--
Yours, Oleg Roschupkin
jjahson@gmail.com
Re[4]: blitz, ошибка при повторном использовании load
December 21, 2009 05:58AM
-----Original Message-----
From: Oleg Roschupkin <jjahson@gmail.com>
To: highload-php-ru@googlegroups.com
Date: Mon, 21 Dec 2009 16:41:44 +0800
Subject: Re: Re[2]: blitz, ошибка при повторном использовании load

> 21.12.2009, в 15:53, Alexandre Kalendarev написал(а)
> >
> > как раз - это просится: Зачем плодить несколько экземпляров блица на
> > парсинг нескольких разных шаблонов. По крайней мере такой код более
> > правильный:
> >
> > {{{
> > foo class {
> >
> > private $b = null;
> >
> > public function __construct() {}
> > $this->b = new blitz();
> > }
> >
> > public function bar($data) {
> > $this->b->load( $this->someTpl );
> > $this->b->block('myblock', $data);
> > return $this->b->parse();
> > }
> >
> > }}}
> >
> > нежели код особенно если у тебя несколько вызовов foo->bar() для
> > разных шаблонов:
> > {{{
> > public function bar($data) {
> > $b = new blitz();
> > $b->load( $this->someTpl );
> > $b->block('myblock', $data);
> > return $b->parse();
> > }
> > }}}
> >
> > Вышли мне пожалуйста патч.
> >
> >
> > Александр.
>
>
> Патч - только если найду, и то с большими сомнениями, потому что я не
> разбирался особо, что сделал.. Найти что-то не могу, зато примерно
> вспомнил, что это было - я закомментировал вот эти строки :)
>
> 3403 if (tpl->static_data.body) {
> 3404 php_error_docref(NULL TSRMLS_CC, E_WARNING,"INTERNAL
> ERROR: template is already loaded");
> 3405 RETURN_FALSE;
> 3406 }
>
> Как мимнимум с таким патчем есть проблема, что я сильно не уверен в
> том, кае он чистит память.
>
> По поводу block() - насколько я знаю, никто их ообо не использует -
> даже те, кто сделал ) По большей части все данные вгружается set()'ом
> и затем парсятся parse().

Олег, спасибо,

Ладно, разбирусь при наличии свободного времени , если сделаю патч.
А почему block() не используют? Удобно же.



Александр.
21.12.2009, в 18:57, Alexandre Kalendarev написал(а):

> Олег, спасибо,

Да не за что ) Перечитал себя - ужас, сколько ошибок.

> Ладно, разбирусь при наличии свободного времени , если сделаю патч.
> А почему block() не используют? Удобно же.

block не используют видимо потому, что проще один раз приготовить
данные и вызвать parse, чем много раз вызывать block.
Т.е.

$B = new Blitz( 'template_name' );

$B->set( array(
'key1' => array( 0 => array( 'value' => 'a', 1 => 'value' => 'b' ),
'key2' => ...
...
) );
.... // Prepare $data
$B->set( $data );

return $B->parse();


Реализация такой работы с шаблоном много проще - шаблонизатор уносится
в один класс и не мучает никого дописыванием специфики.

Но у блитца есть минус в подобном подходе - данные, кроме глобальных
не протягиваются в шаблоны, подключённые через include (хотя в dev-
версии уже должны протягиваться).

--
Yours, Oleg Roschupkin
jjahson@gmail.com
Re[6]: blitz, ошибка при повторном использовании load
December 21, 2009 08:04AM
-----Original Message-----
From: Oleg Roschupkin <jjahson@gmail.com>
To: highload-php-ru@googlegroups.com
Date: Mon, 21 Dec 2009 20:04:21 +0800
Subject: Re: Re[4]: blitz, ошибка при повторном использовании load

> 21.12.2009, в 18:57, Alexandre Kalendarev написал(а):
>
> > Олег, спасибо,
>
> Да не за что ) Перечитал себя - ужас, сколько ошибок.
>
> > Ладно, разбирусь при наличии свободного времени , если сделаю патч.
> > А почему block() не используют? Удобно же.
>
> block не используют видимо потому, что проще один раз приготовить
> данные и вызвать parse, чем много раз вызывать block.
> Т.е.
>
> $B = new Blitz( 'template_name' );
>
> $B->set( array(
> 'key1' => array( 0 => array( 'value' => 'a', 1 => 'value' => 'b' ),
> 'key2' => ...
> ...
> ) );
> .... // Prepare $data
> $B->set( $data );
>
> return $B->parse();
>
>
> Реализация такой работы с шаблоном много проще - шаблонизатор уносится
> в один класс и не мучает никого дописыванием специфики.
>
> Но у блитца есть минус в подобном подходе - данные, кроме глобальных
> не протягиваются в шаблоны, подключённые через include (хотя в dev-
> версии уже должны протягиваться).
Ok
Олег,

спаисбо за информацию,
у меня, в данном контексте по мимо самой шаблонизации, Blitz используется как конструктор урлов, по этому блока вполне хватает.


Александр
Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 219
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready