Ключевые слова:perl, html, cgi, web, (найти похожие документы)
Date: Tue, 10 Dec 2002 18:14:08 +0500
From: Alexey Mahotkin <[email protected]>
Newsgroups: ftn.ru.perl
Subject: Использование HTML::Template в CGI-скриптах на Perl
MG> Проблема скорее в том что я не
MG> понимаю какую структуру данных надо скормить param чтоб внешний и
MG> втнутренний масивы заполнились так как мне нужно. В приведенном
MG> скрипте структура даних @stats выглядит так:
Всё очень просто.
В HTML::Template есть некий "основной" хэшреф, из которого берутся
значения "переменных". Hапример, если ты сказал
$tmpl->param('username', 'vasya');
$tmpl->param('fullname', 'V. Poopking');
то "основной" хэшреф будет выглядеть так:
{
username => 'vasya',
fullname => 'V. Poopking',
}
Теперь "переменные" 'username' и 'fullname' можно использовать в tmpl_var,
tmpl_if, etc.
"Оператор" tmpl_loop требует, чтобы значением переменной был arrayref
хэшрефов. Hапример, васины покупки:
<!--tmpl_loop name='purchases'-->
Купил: <!--tmpl_name='what'-->; ценой <!--tmpl_name='price'-->
<!--/tmpl_loop-->
Список покупок будет храниться в массиве
my @purchases = (
{ what => 'хлеб', price => '20', },
{ what => 'молоко', price => '30', },
...,
);
Этот список можно поместить в "основной" хэшреф с помощью
$tmpl->param('purchases', \@purchases);
Дальше всё рекурсивно повторяется: в каждом из хэшрефов, находящихся в
массиве, могут находиться обычные скаляры или опять же ссылки на массив
хэшрефов.
Больше никакой функциональности в HTML::Template нет :)
--alexm
P.S.: оказывается, некоторые этого не знают: вот такая конструкция
<!--tmpl_if name='purchases'-->
<!--tmpl_loop name='purchases'-->
Купил: <!--tmpl_name='what'-->; ценой <!--tmpl_name='price'-->
<!--/tmpl_loop-->
<!--tmpl_else-->
Список покупок пуст.
<!--/tmpl_if-->
допустима. Пустой arrayref считается "false" в рамках оператора tmpl_if
(хоть и не считается таковым в рамках перла).