Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Template toolkit - что лучше передавать в шаблон


Автор: sklins 29.9.2012, 15:57
Задача стоит такая. На вход подаётся .xls файл. Скрипт делает некоторые манипуляции с ним и генерируют html страницу. Пока что упростил себе задачу и просто хочу вывести таблицу.  Для парсинга xls использовал Spreadsheet::ParseExcel. Получал значения ячеек в массив и пытался их вывести. Но тут возник вопрос. Может зря я в массив все значения загонял? ТТ умеет работать с методами объекта. Что лучше в данном случае? Передавать в шаблон массив или вызывать из шаблона метод? И если не сложно, то с примерами. 

Автор: vadiml 29.9.2012, 19:37
Лучше в перле распарсить xls, как я понимаю там 2х уровневая структура получится, массив массивов, например.

А в ТТ сделаете 2 FOREACH.

Автор: alezzz 29.9.2012, 19:59
Вместе с передачей различных данный в TT можно также передать и ссылку на функцию, т.е. примерно так:
Код

$vars{'mysub'} = sub {
    my $param = shift;
    ...
}

в шаблоне:
Код

[% mysub(param) %]

ну вобщем как-то так, удобно это или нет и что возвращять функцией вам решать

Автор: sklins 29.9.2012, 23:25
Цитата(vadiml @ 29.9.2012,  19:37)
Лучше в перле распарсить xls, как я понимаю там 2х уровневая структура получится, массив массивов, например.

А в ТТ сделаете 2 FOREACH.

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

Автор: vadiml 30.9.2012, 00:08
Тут есть примеры:
http://www.template-toolkit.ru/Manual/Directives.html
глава "Циклическая обработка"

А вообще любую вложенность можно вывести, хотя мне больше 3 вложений (смесь массивов и хешей) не приходилось.

Автор: sklins 30.9.2012, 11:19
Из примера я так и не понял как вывести двумерный массив. Вот набросал код. Отрабатывается без ошибок, но ничего не выводит.
Код

[% FOREACH i IN array;
    FOREACH j IN array;
       array.i.j;
    END;
 END; %]

Мне бы пример глянуть. Может я просто не то передаю шаблону?
Код

my $vars = {
        title => "new",
       array => \@array,
    };

Автор: alezzz 30.9.2012, 14:03
Код

use strict;
use Template;

my @arr = (
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
);

my $tt = Template->new();
$tt->process(\*DATA, {'arr' => \@arr});

__DATA__
[% FOREACH i IN arr -%]
[% FOREACH j IN i -%]
[% j -%]
[% END %]
[% END -%]

Автор: sklins 30.9.2012, 14:48
Цитата(alezzz @ 30.9.2012,  14:03)
Код


[% FOREACH i IN arr -%]
[% FOREACH j IN i -%]
[% j -%]
[% END %]
[% END -%]

Спасибо, то что надо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)