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. |
СМОТРИ ТАКЖЕ |
[ Индекс ] [ Модули ] [ Наверх ] |