Template Toolkit(русская редакция) |
|
||
|
|||
Template::Plugin::Table |
|
ОБЗОР |
[ Индекс ] [ Модули ] [ Наверх ] |
[% USE table(list, rows=n, cols=n, overlap=n, pad=0) %] [% FOREACH item = table.row(n) %]
[% item %]
[% END %]
[% FOREACH item = table.col(n) %]
[% item %]
[% END %]
[% FOREACH row = table.rows %]
[% FOREACH item = row %]
[% item %]
[% END %]
[% END %]
[% FOREACH col = table.cols %]
[% col.first %] - [% col.last %] ([% col.size %] entries)
[% END %] |
ОПИСАНИЕ |
[ Индекс ] [ Модули ] [ Наверх ] |
Плагин Table позволяет построить виртуальную таблицу из массива элементов данных. При создании плагина Table с помощью директивы USE просто передайте ссылку на массив в качестве первого параметра, а затем укажите фиксированное количество строк или столбцов. [% USE Table(list, rows=5) %]
[% USE table(list, cols=5) %]
Имя плагина 'Table' можно указывать в нижнем регистре, как показано во втором примере выше. Также можно указать для плагина альтернативное имя переменной согласно обычному синтаксису Template Toolkit. [% USE mydata = table(list, rows=5) %] Затем можно использовать плагин для табличного представления набора данных. На самом деле данные никак не перстраиваются, но становятся доступны через row(), col(), rows() и cols() как если бы они были сформатированы в обычную двумерную таблицу. Так, если наш простой список состоит из букв алфавита от 'a' до 'z', приведенные выше директивы USE создадут плагины, содержащие следующие представления алфавита. [% USE table(alphabet, ... %] rows=5 cols=5
a f k p u z a g m s y
b g l q v b h n t z
c h m r w c i o u
d i n s x d j p v
e j o t y e k q w
f l r x
Запросить конкретные строку или колонку можно с помощью методов row() и col(). [% USE table(alphabet, rows=5) %]
[% FOREACH item = table.row(0) %]
# [% item %] set to each of [ a f k p u z ] in turn
[% END %]
[% FOREACH item = table.col(2) %]
# [% item %] set to each of [ m n o p q r ] in turn
[% END %]
Данные в строках возвращаются слева направо, в колонках сверху
вниз. Нумерация колонок строк ведется с 0. По умолчанию, неполные
строки или колонки будут дополнены неопределенными значениями,
чтобы их размер был одинаковым с остальными строками или колонками.
Например, последняя строка (строка 4) в первом примере будет содержать
значения [% FOREACH item = table.row(4) %]
[% IF item %]
Item: [% item %]
[% END %]
[% END %]
Можно явно запретить опцию "добивания" строк/колонок ('pad') при создании плагина. В этом случае последняя строка/колонка может быть возвращена неполной (то есть содержать меньшее число элементов). [% USE table(alphabet, cols=5, pad=0) %]
[% FOREACH item = table.col(4) %]
# [% item %] set to each of 'y z'
[% END %]
Метод rows() возвращает все строки/колонки в таблице как ссылку на массив строк (каждая из которых в свою очередь является ссылкой на массив). При вызове метода row() без аргументов вызывается rows(), которая возвращает все строки в таблице. Аналогично для cols() и col(). [% USE table(alphabet, cols=5) %]
[% FOREACH row = table.rows %]
[% FOREACH item = row %]
[% item %]
[% END %]
[% END %]
Template Toolkit предоставляет методы элементов массива (строк или колонок) first(), last() и size(), которые возвращают соответственно первый и последний элемент и общее количество элементов в строке/колонке. Следующий пример показывает, как можно это использовать для разбиения алфавита на 3 примерно одинаковых части. [% USE table(alphabet, cols=3, pad=0) %]
[% FOREACH group = table.col %]
[ [% group.first %] - [% group.last %] ([% group.size %] letters) ]
[% END %]
Вывод: [ a - i (9 letters) ]
[ j - r (9 letters) ]
[ s - z (8 letters) ]
Также можно использовать метод для работы с массивами общего назначения join() для объединения элементов массива в строку через определенный разделитель. [% USE table(alphabet, cols=5) %]
[% FOREACH row = table.rows %]
[% row.join(' - ') %]
[% END %]
Данные в таблице упорядочены сверху вниз, а не поперек, но это легко преобразуется при выводе. Например, чтобы сформатировать данные в 5 колонок, но вывести их не сверху вниз, а справа налево, указываем 'rows=5', чтобы выстроить данные следующим образом: a f . .
b g .
c h
d i
e j
а затем в цикле проходим каждую колонку (a-e, f-j, и т.д.), выводя данные слева направо. a b c d e
f g h i j
. .
.
Код этого примера будет выглядет примерно следующим образом: [% USE table(alphabet, rows=3) %]
[% FOREACH cols = table.cols %]
[% FOREACH item = cols %]
[% item %]
[% END %]
[% END %]
a b c
d e f
g h i
j . .
.
В дополнение к ссылке на массив конструктору плагина Table можно передать ссылку на объект Template::Iterator или его производного класса. В этом случае, вначале вызывается метод итератора get_all(), который возвращает все оставшиеся элементы, которые затем доступны через обычный интерфейс Table. [% USE DBI(dsn,user,pass) -%] # query() возвращает итератор
[% results = DBI.query('SELECT * FROM alphabet ORDER BY letter') %]
# передаем плагину Table
[% USE table(results, rows=8 overlap=1 pad=0) -%]
[% FOREACH row = table.cols -%]
[% row.first.letter %] - [% row.last.letter %]:
[% row.join(', ') %]
[% END %] |
АВТОР |
[ Индекс ] [ Модули ] [ Наверх ] |
Энди Уардли (Andy Wardley <abw@andywardley.com>) |
ВЕРСИЯ |
[ Индекс ] [ Модули ] [ Наверх ] |
2.65, поставляется в составе Template Toolkit версии 2.14, дата релиза - 4 октября 2004. |
АВТОРСКИЕ ПРАВА |
[ Индекс ] [ Модули ] [ Наверх ] |
Copyright (C) 1996-2004 Andy Wardley. All Rights Reserved. Copyright (C) 1998-2002 Canon Research Centre Europe Ltd. Этот модуль является свободно-распространяемым программным обеспечением; вы можете распространять и/или модифицировать его на тех же условиях, что и Perl. |
СМОТРИ ТАКЖЕ |
[ Индекс ] [ Модули ] [ Наверх ] |