FastTemplate: помогите разобраться с динамическими блоками!

d_xtc

Guest
FastTemplate: помогите разобраться с динамическими блоками!

Вопрос в следующем. Заказчику нужен сайт, который бы работал с FastTemplate.

Сайтик простой, вроде бы уже все получилось, но немогу справиться с динамическими блоками. На главной странице сайта должны располагаться опросы, причем их может быть несколько.

делаю следующий tpl:
<!-- BEGIN DYNAMIC BLOCK: NOT_ACTIVE_VOTE_ON_TOP -->
{NOT_ACTIVE_VOTE_QUESTION}<br>
<!-- BEGIN DYNAMIC BLOCK: NOT_ACTIVE_VOTE_ANSWER -->
{NOT_ACTIVE_VOTE_ANSWER_FLOAT}%&nbsp;(87)&nbsp;&nbsp;{NOT_ACTIVE_VOTE_ANSWER_TITLE}
<!-- END DYNAMIC BLOCK: NOT_ACTIVE_VOTE_ANSWER -->
{NOT_ACTIVE_VOTE_TOTAL}
<!-- END DYNAMIC BLOCK: NOT_ACTIVE_VOTE_ON_TOP -->

начинаю выводить
$tpl->define_dynamic( "NOT_ACTIVE_VOTE_ANSWER" , "body" );

$res = mysql_query("select SUM(count) as sum from answers where id_test=$id_test");
$total = mysql_result($res,0,"sum");
$res = mysql_query("select id_answer, answer, count from answers where id_test=$id_test order by id_answer");
while(list($id_answer, $answer, $count) = mysql_fetch_row($res))
{
$percent = $count * 100 / $total;
$percent_int = floor($percent);
$percent_float = number_format($percent, 1);

$tpl->assign( array(
NOT_ACTIVE_VOTE_ANSWER_INT => $percent_int,
NOT_ACTIVE_VOTE_ANSWER_FLOAT => $percent_float,
NOT_ACTIVE_VOTE_ANSWER_TITLE => stripslashes($answer)
));

$tpl->parse("NOT_ACTIVE_VOTE_ON_ANSWER_", ".NOT_ACTIVE_VOTE_ANSWER");
}
$tpl->assign( array(
NOT_ACTIVE_VOTE_QUESTION => stripslashes($question),
NOT_ACTIVE_VOTE_TOTAL => $total
));
$tpl->parse(NOT_ACTIVE_VOTE_ON_TOP_, ".NOT_ACTIVE_VOTE_ON_TOP");
$tpl->clear_dynamic("NOT_ACTIVE_VOTE_ANSWER");

в результате во втором опросе "прилепляются" ответы от первого опроса, в третьем от первого и второго и т.д.
попытка "чистить" $tpl->clear_dynamic("NOT_ACTIVE_VOTE_ANSWER"); ни к чему не приводит.

Смотрите здесь http://ya.rikt.ru, ошибка сразу броситься в глаза.

Что нужно сделать, чтобы не повторялся вывод "прилепляющихся ответов".
 

[DAN]

Старожил PHPClub
FastTemplate не поддерживает вложенные блоки.
Придется тебе их разносить.
 

d_xtc

Guest
Пытаюсь разнести
первый блок
<!-- BEGIN DYNAMIC BLOCK: NOT_ACTIVE_VOTE_ON_TOP -->
{NOT_ACTIVE_VOTE_QUESTION}<br>

{NOT_ACTIVE_VOTE_ON_TOP_ANSWERS}

{NOT_ACTIVE_VOTE_TOTAL}
<!-- END DYNAMIC BLOCK: NOT_ACTIVE_VOTE_ON_TOP -->
второй блок
<!-- BEGIN DYNAMIC BLOCK: NOT_ACTIVE_VOTE_ANSWER -->
{NOT_ACTIVE_VOTE_ANSWER_FLOAT}% (87) {NOT_ACTIVE_VOTE_ANSWER_TITLE}
<!-- END DYNAMIC BLOCK: NOT_ACTIVE_VOTE_ANSWER -->

вывожу
$tpl->define_dynamic( "NOT_ACTIVE_VOTE_ANSWER" , "body" );

$res = mysql_query("select SUM(count) as sum from answers where id_test=$id_test");
$total = mysql_result($res,0,"sum");
$res = mysql_query("select id_answer, answer, count from answers where id_test=$id_test order by id_answer");
while(list($id_answer, $answer, $count) = mysql_fetch_row($res))
{
$percent = $count * 100 / $total;
$percent_int = floor($percent);
$percent_float = number_format($percent, 1);

$tpl->assign( array(
NOT_ACTIVE_VOTE_ANSWER_INT => $percent_int,
NOT_ACTIVE_VOTE_ANSWER_FLOAT => $percent_float,
NOT_ACTIVE_VOTE_ANSWER_TITLE => stripslashes($answer)
));
измененая строка
$tpl->parse(NOT_ACTIVE_VOTE_ON_ANSWERS, ".NOT_ACTIVE_VOTE_ANSWER");
}
$tpl->assign( array(
NOT_ACTIVE_VOTE_QUESTION => stripslashes($question),
NOT_ACTIVE_VOTE_TOTAL => $total
));
$tpl->parse(NOT_ACTIVE_VOTE_ON_TOP_, ".NOT_ACTIVE_VOTE_ON_TOP");
$tpl->clear_dynamic("NOT_ACTIVE_VOTE_ANSWER");

не подскажете как все же запихать в эту переменную NOT_ACTIVE_VOTE_ON_ANSWERS динамический блок?
не хватает прыти (((
 

vasnas

Guest
а может попробуешь Smatry.. там очень просто
русская дока на poetry.hotbox.ru
 

d_xtc

Guest
2 [DAN] спасибо за пример!!! наглядно и понятно!!!

у меня счас крыша поедет... ))) писчит, но не лезет!

не могу понять где же собака порылась ))) твой пример работает отлично, как только беру свой начинается всякая дребедень.
Уже даже делаю для проверки
echo $tpl->fetch(NOT_ACTIVE_VOTE_ON_ANSWERS),"<br>";

все выводит так как нужно, но не подставляет в переменную {NOT_ACTIVE_VOTE_ON_TOP_ANSWERS}

закоментарил //$tpl->no_strict();
на сайте появляются в нужных местах {NOT_ACTIVE_VOTE_ON_TOP_ANSWERS}, но куски html туда не подставляются.... )))))

может у меня уже глюки, но вроде строка правильная, и все равно он не подставляет значения (((((((
$tpl->parse(NOT_ACTIVE_VOTE_ON_ANSWERS, ".NOT_ACTIVE_VOTE_ANSWER");

что то, где то не так, но никак не могу понять где и что ))))
 

d_xtc

Guest
2 admin

я не путаю
вообще переменная присваивается вот этой строкой
$tpl->parse(NOT_ACTIVE_VOTE_ON_ANSWERS, ".NOT_ACTIVE_VOTE_ANSWER");

fetch я делаю для того чтобы проверить промежуточные вычисления! и только!
даже если делаю так

$tpl->parse(UPS, ".NOT_ACTIVE_VOTE_ANSWER");

$tpl->assign( array(
NOT_ACTIVE_VOTE_ON_ANSWERS => $tpl->fetch("UPS"));

ничего не получается!

перенеси плиз тему обратно, там может кто прочитает и подскажет в чем ошибка.
В ее офтопике точно никто не увидит!
 

confguru

ExAdmin
Команда форума
Ее место в оффтопике - однозначно...
Обьясни свой алгоритм - скажем как правильно сделать..
 

d_xtc

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

еще раз спасибо [DAN]!!!
 

d_xtc

Guest
все!!!
все отлично работает!!!

причем tpl выглядит следующим образом
<!-- BEGIN DYNAMIC BLOCK: NOT_ACTIVE_VOTE_ON_TOP -->
{NOT_ACTIVE_VOTE_QUESTION}<br>
<!-- BEGIN DYNAMIC BLOCK: NOT_ACTIVE_VOTE_ANSWER -->
{NOT_ACTIVE_VOTE_ANSWER_FLOAT}% (87) {NOT_ACTIVE_VOTE_ANSWER_TITLE}
<!-- END DYNAMIC BLOCK: NOT_ACTIVE_VOTE_ANSWER -->
{NOT_ACTIVE_VOTE_TOTAL}
<!-- END DYNAMIC BLOCK: NOT_ACTIVE_VOTE_ON_TOP -->

2 [DAN]
FastTemplate 1.1.0 - PHP extension for mamanging templates and performing variable interpolation.
There are a few rules when using dynamic blocks
"dynamic blocks should not be nested inside other dynamic blocks"
правило вроде есть, но оно как то странно работает )))

может FastTemplate уже пофиксен, но все работает!
можете сами посмотреть http://ya.rikt.ru опросы в правой колонке.
 

DexizeR

Новичок
Кстати, FastTemplate 1.1 на самом деле поддерживает вложенные динамические блоки в динамические блоки. Кому интересно могу найти пример из своих проектов.

-~{}~ 22.01.06 18:46:

Ссылка http://dan.phpclub.net/ft.zip мёртвая... У кого остался этот пример, перезалейте, плз, куда нибудь.
 

confguru

ExAdmin
Команда форума
DexizeR

Дату сообщения смотрел?
FastTemplate уже устарел и уже давно не fast ;-)
 

Raziel[SD]

untitled00
admin
надо сделать, чтобы нельзя было писать в топики, если со времени последнего поста прошло более 3 месяцев, против реаниматоров ;)
 
Сверху