NAME
TblEdit - библиотека для просмотра и редактирования таблиц БД.
DESCRIPTION
В библиотеке TblEdit реализованы функции обработки команд
- показать всю таблицу
- вывести строку таблицы для просмотра
- вывести строку таблицы для редактирования
- вывести форму для ввода новой строки
- сохранить изменения
- удалить строку
Соответствующие методы возвращают 1 при успехе операции или 0 при ошибке и заполняют передаваемый им в аргументах хэш соответствующими результату полями.
CONFIGURATION
Все настройки, необходимые для показа таблицы и редактирования строк, представлены в двух атрибутах класса:
tableConfig - хэш описания таблицы. Имеет следующие поля:
config_id - идентификатор конфигурации tbledit
table_title - название таблицы
table_keys - имена полей, входящих в ключ (разделенные запятой)
table_fields - имена полей table_sql в порядке формата fmt_tablerow
table_sql - запрос для вывода таблицы
row_sql - запрос для вывода строки
del_sql - запрос для удаления строки
upd_sql - запрос для изменения строки
ins_sql - запрос для добавления новой строки
upd_fields - имена полей для upd запроса
fmt_header - формат (printf) вывода строки заголовков при просмотре таблицы
fmt_tablerow - формат (printf) вывода полей строки при просмотре таблицы
fmt_row - формат (printf) вывода поля при просмотре строки
fmt_view - формат (printf) ссылки на форму просмотра
fmt_edit - формат (printf) ссылки на форму редактирования
fmt_ins - формат (printf) ссылки на форму новой строки
fmt_del - формат (printf) ссылки удаления строки
Поля, не используемые библиотекой, но включенные в структуру для
удобства использующих ее программ:
fields_sql - запрос для таблицы описания полей. Используется для получения
атрибута конфигурации rowConfig (см. ниже).
tmpl_table - темплейт просмотра таблицы
tmpl_row - темплейт просмотра строки
tmpl_row_edit - темплейт редактирования строки
tmpl_saved - темплейт страницы "изменения сохранены"
tmpl_deleted - темплейт страницы "строка удалена"
tmpl_error - темплейт страницы про ошибку удаления
rowConfig - список хешей описаний полей для построчного просмотра/редактирования
Для каждого выводимого/редактируемого поля хэш содержит поля:
config_id - идентификатор конфигурации tbledit
type_id - Идентификатор типа
order_id - номер в списке
is_readonly - Поле не изменяемо в режиме редактирования
is_escape - заменять < на < при просмотре
vdefault - Значение по умолчанию
type_def - аргументы типа (описаны в vartype.def_desc)
name - название поля
note - комментарий при редактировании
Идентификатор типа и аргументы типа определяют, каким образом будет выведено значение поля, и имеют следующие значения:
Ид Тип Содержимое поля "Описание типа"
1 Строка длина строки (значение size элемента <input type=text>) при редактировании
2 Текст количество строк в элементе <textarea> при редактировании
3 Радио перечисленные через запятую пары код:название для элемента <input type=radio>,
код будет помещен в атрибут value, название - справа от элемента
4 Селект перечисленные через запятую пары код:название для элемента <select>,
код и название будут использованы в элементе <option>
5 СелектБД SQL возвращающий список пар [код, название]. Результат используется аналогично 4
Значения этих атрибутов формируются произвольным внешним способом и передаются объекту после его создания (в методе init)
Методы, реализованные в библиотеке:
- new - Конструктор экземпляра класса.
- Аргументы: хэш из двух полей (перечислены в константе CONFIG):
-
req - объект интерфейса к web-серверу - класса TblEdit::Request или с аналогичными методами db - объект интерфейса к БД - класса TblEdit::DB или с аналогичными методами -
Пример:
-
my $req = TblEdit::Request->new({ prefix => CONFIG_PREFIX}); -
my $dbconf = $req->getConf(TblEdit::DB::CONFIG); my $db = TblEdit::DB->new(%$dbconf); -
my $server = TblEdit->new({ req => $req, db => $db}); - init - Инициализация настроек модуля
- Используется для удобства задания значения атрибутов tableConfig и rowConfig
-
Аргументы:
-
tableConfig - хэш описания таблицы rowConfig - список хешей описаний полей для построчного просмотра/редактирования -
Пример:
-
my $tableConfig = $db->hash($conf->{'SQL'}); $server->init ( $tableConfig, $db->arrayHash($tableConfig->{'fields_sql'}) ); - conf - Доступ по ключу к хэшу описания таблицы
- Аргументы:
-
$key - ключ хэша tableConfig -
Пример:
-
my $fields_sql = $server->conf('fields_sql') - getConf - Получить часть хэша описания таблицы по списку ключей
- Аргументы:
-
@keys - список ключей хэша tableConfig -
Пример:
-
my $conf = $server->getConf(TblEdit::Template::CONFIG); - rowKeys - список ключевых полей
- Аргументы:
-
нет -
Пример:
-
# список значений ключевых полей из аргументов запроса my @ret = map { $self->{'req'}->param($_) } @{$self->rowKeys}; -
Возвращаемое значение:
-
список полей, полученный из строки поля конфигурации table_keys - getTable - Получить html-код содержимого таблицы
- Аргументы:
-
\%ret - хэш для возврата результата -
Пример:
-
$self->getTable($ret); -
Заполняемые поля хэша-результата:
-
DATA - html-код строк таблицы BTN_INS - html-код ссылки на добавление новой записи -
Возвращаемое значение:
-
Всегда 1 Неуспех выполнения SQL или доступа к настройкам - это ошибка конфигурации, приводящая к die и последующему error 500 - getRow - Получить html-код таблицы просмотра/редактирования строки
- Аргументы:
-
\%ret - хэш для возврата результата $mode - режим вывода 0 - просмотр 1 - редактирование 2 - редактирование новой строки 3 - редактирование после ошибки \%error - хэш данных из предыдущего редактирования строки с полями ERROR => "" - строка системной ошибки БД (если возникла) errors => {} - хэш кодов ошибок в полях из предыдущего редактирования values => {} - хэш введенных значений из предыдущего редактирования Хэш %error формируется в методе saveRow и используются только при $mode == 3 Так же при $mode == 3 значения берутся из аргументов запроса и для $mode используется значение аргумента _mode -
Пример:
-
$self->getRow($ret, 0); или $self->getRow($ret, 3, $ret1); -
Заполняемые поля хэша-результата:
-
ERROR - строка системной ошибки БД (если возникла) DATA - html-код строк таблицы MODE - значение для hidden поля формы _mode (позволяет в save отличать ins от edit) BTN_DEL - html-код ссылки на добавление новой записи (кроме $mode == 2) BTN_EDIT - html-код ссылки на редактирование записи (если $mode == 0) BTN_VIEW - html-код ссылки на форму просмотра записи (если $mode == 1) -
Возвращаемое значение:
-
Всегда 1 Неуспех выполнения SQL чтения данных или доступа к настройкам - это ошибка конфигурации, приводящая к die и последующему error 500 - saveRow - Сохранение измененной строки в БД
- Аргументы:
-
\%ret - хэш для возврата результата -
Пример:
-
my $ret1 = {}; if ( $self->saveRow($ret1) ) { # данные сохранены успешно return 'tmpl_saved'; } else { $self->getRow($ret, 3, $ret1->{'values'}, $ret1->{'errors'}); return 'tmpl_row_edit'; } -
Заполняемые поля хэша-результата:
-
Только в случае ошибок заполняется элементами вида {имя_поля} = "текст ошибки из БД" -
Возвращаемое значение:
-
1 - при успехе 0 - при ошибках, тогда %$ret содержит возвращенный БД список кодов ошибок в полях - delRow - Удаление строки
- Аргументы:
-
\%ret - хэш для возврата результата -
Пример:
-
my $ret1 = {}; if ( $self->delRow($ret) ) { # успешное удаление return 'tmpl_deleted'; } else { # при удалении возникли ошибки return 'tmpl_error'; } -
Заполняемые поля хэша-результата:
-
Только в случае ошибок заполняется элементом {ERROR} = "текст ошибки из БД" -
Возвращаемое значение:
-
1 - при успехе 0 - при ошибках, тогда %$ret содержит поле ERROR - сообщение БД об ошибке - _args - список значений ключевых полей из аргументов запроса
- Приватный метод
-
Аргументы:
-
нет -
Пример:
-
# список значений ключевых полей из аргументов запроса my @row_keys = @{$self->_args}; -
Возвращаемое значение:
-
список значений ключевых полей - _split - получение списка значений из строки-параметра конфигурации,
в которой значения разделены запятой
- Приватный метод
-
Аргументы:
-
$key - ключ хэша конфигурации -
Пример:
-
# список ключевых полей my @key_fields = $self->_split('table_keys'); -
Возвращаемое значение:
-
список, полученный из строки поля конфигурации - _list_value - получить значение из списка, соответствующее ключу
- Приватный метод
-
Аргументы:
-
$key - ключ \@list - список пар [ ключ, значение_ключа ] -
Пример:
-
$f = _list_value($f, $typeVars); -
Возвращаемое значение:
-
значение_ключа, для которого ключ == $key - _format_field - получить html код для поля согласно его типу.
- Приватный метод
-
Аргументы:
-
$type $typeDef $typeVars $name $value -
Пример:
-
$s .= _format_field($fld->{'type_id'}, $fld->{'type_def'}, $fld->{field_name}, $value); -
Возвращаемое значение:
-
html код
AVAILABILITY
The latest version of the tarball, RPM and SRPM may always be found at:
http://dev.jast.ru/tbledit
AUTHOR
Alexey Kovrizhkin <jean@jast.ru>
COPYRIGHT
Copyright (C) 2006 Alexey Kovrizhkin
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
$Id: TblEdit.html,v 1.1 2006/06/29 19:12:18 aleko Exp $