===== HTML.pm =====
====Ссылка====
$html->button('NAME', 'LINK_PARAMS', { %PARAMS });
^BUTTON | В виде кнопки. По умолчанию выводится в виде линка |
^GLOBAL_URL| Указать произвольный URL. По умолчанию система к параметру линка добавляет префикс биллинговой системе https://yoursystem.com:9443/ |
^NEW_WINDOW| Открыть в новом окне |
^NEW_WINDOW_SIZE| Размер нового окна |
^IMG | Картинка вместо текста |
^MESSAGE | строка, Вывести модальное окно для комментария и сообщением и перейти по ссылке только после ввода и подтверждения |
^CONFIRM | строка, Вывести модальное окно с сообщением и кнопкой подтверждения перехода |
^ex_params= | Дополнительные параметры \\ |
** Пример ** \\
$html->button('NAME', 'LINK_PARAMS', { ex_params => "class=new" });
Вывод
NAME
\\
** Кнопка с иконкой **
$html->button($lang{ADD}, "index=$index&form_add=1", { ADD_ICON => 'glyphicon glyphicon-plus', BUTTON => 1 })
Добавить
\\
** Пример кнопки для копирования текста в буфер обмена **
$html->button('COPY TEXT', '', { COPY => 'text for copy' })
====Сообщения (предупреждения)====
Информация о выполненной операции или предупреждение об ошибке
$html->message('TYPE', 'CAPTION', 'MESSAGE', { PARAMS });
^TYPE | Тип сообщения \\ **info** - Информация \\ **err** - ошибка \\ **warn** - Предупреждение |
^CAPTION | Оглавление сообщения |
^MESSAGE | Текст сообщения. \\ Для переноса строк используется '\n' |
^PARAMS | Дополнительные параметры |
^ | ID | Вывести номер сообщения (см. [[abills:docs:development:errors_list:ru|Систематизация ошибок]]) |
====Формы====
контейнер формы
$html->form_main({ %PARAMS })
Параметры:
^CONTENT | Тело контейнера форм |
^HIDDEN | Сыылка на массив скрытых полей ввода. HIDDEN => { index => $index } |
^NAME | Название формы |
Форма ввода
$html->form_input('NAME', 'VALUE', { %PARAMS });
Спадающее меню
$html->form_select("NAME", { %PARAMS });
Параметры:
^SELECTED| активное значение |
^SEL_OPTIONS| Дополнительные параметры, списка не указанные в главном значении.\\ Укажите {""=>""}, чтобы добавить первое пустое значение ( и крестик для скидывания выбраной опции)|
^NO_ID| Не показывать идентификатор элемента списка только его значение |
Много уровневый масив:
^SEL_MULTI_ARRAY | ссылка на масив |
^MULTI_ARRAY_KEY | Поле для ключа |
^MULTI_ARRAY_VALUE| поле значения. Можно указывать несколько полей через запятую |
Много уровневый массив хешей удобный для приёма списков
^SEL_LIST | ссылка на масив |
^SEL_KEY | Поле для ключа |
^SEL_VALUE| поле значения. Можно указывать несколько полей через запятую |
**Пример** \\
Список тарифных планов ключ поле id значение поле name
$html->form_select(
'TP_ID',
{
SELECTED => $FORM{TP_ID} || q{},
SEL_LIST => $tariffs->list({ MODULE => 'Dv', COLS_NAME => 1 }),
SEL_KEY => 'id',
SEL_VALUE=> 'name'
}
);
Масив:
^SEL_ARRAY | ссылка на масив |
^ARRAY_NUM_ID | ид элементов в виде цифр. По умолчанию равно значниею |
Хеш:
^SEL_HASH | Ссылка на хеш |
====Таблицы====
Создание элемента таблицы
$table = $html->table({ %PARAMS });
^width | Ширина таблицы. Можно задавать как в пикселях так и в процентах |
^caption | Названеи таблицы |
^border | Отображать границу таблицы |
^title | Масив значений для заголовков колонок |
^cols_align | Масив выравнивания колонок. Значения: left \\ right \\ center \\ center:noprint - Не выводить при печати страницы |
^pages | Количество сстрок передаваемых таблице. Используется для формирования строки переходов страниц |
^qs | Дополнительные URL параметры для элементов таблицы |
^ID | ИД таблицы |
^COLS_NAME | Возврат значений не массивом, а хешем |
^EXPORT | кнопки экспорта содержимого таблицы |
^IMPORT | форма импорта данных. Указывает на линк вызова функции \\ **Пример:** \\ IMPORT => "$SELF_URL?get_index=form_users&import=1&header=2" |
**Пример**
my $table = $html->table( { width => '100%',
caption => $_COMPANIES,
border => 1,
title => [$_NAME, $_DEPOSIT, $_REGISTRATION, $_USERS, $_STATUS, '-', '-'],
cols_align => ['left', 'right', 'right', 'right', 'center', 'center'],
pages => $company->{TOTAL},
qs => $pages_qs,
ID => 'COMPANY_ID'
} );
Заполнение строк таблицы
**Пример**
foreach my $line (@$list) {
#Добавление строк
$table->addrow($line->[0],
$line->[1],
$line->[2],
$html->button($line->[3], "index=13&COMPANY_ID=$line->[5]"),
"$status[$line->[4]]",
$html->button($_INFO, "index=13&COMPANY_ID=$line->[5]", { BUTTON => 1 }),
(defined($permissions{0}{5})) ? $html->button($_DEL, "index=13&del=$line->[5]", { MESSAGE => "$_DEL $line->[0]?", BUTTON => 1 }) : ''
);
}
Вывод содержимого таблицы
print $table->show();
**Формирование таблицы с заполненными строками**\\
**Пример**
$table = $html->table( { width => '100%',
cols_align => ['right', 'right'],
rows => [ [ "$_TOTAL:", $html->b($company->{TOTAL}) ] ]
} );
print $table->show();
**Вывод таблицы используя вывод хешем** \\
Список администраторов
$list = $admin->list({ %LIST_PARAMS,
COLS_NAME => 1
});
foreach my $line (@$list) {
$table->addrow(
$line->{aid},
$line->{login},
$line->{name},
$line->{raddate}
);
}
print $table->show();
**Добавление ячеек таблицы**
$table->addtd(
$table->td($value, { bgcolor => 'red', valign => 'top', align => 'center' }),
$table->td($value)
);
==== Напоминание ====
Создаёт напомнание, которое позже выносится в верхнюю часть страницы.\\
Можно задавать цвет через аттрибут ''CLASS''. По умолчанию, это ''info''.
$html->reminder($lang{REMINDER}, $lang{PLEASE_CHANGE_DEFAULT_PASSWORD});
==== Функциональные поля таблицы ====
Набор кнопок, для возможных действий над обьектом, который представляет строка таблицы.
Возможные прописаные значения:
* **form_payments** - переход на страницу оплат
* ** *_stats** - имя функции для показа статистики
* **change** - перейти по тому же индексу с параметром ''chg=$line->{id}''
* **info** - перейти по тому же индексу с параметром ''info=$line->{id}''
* **company_id** - перейти по тому же индексу с параметром ''COMPANY_ID=$line->{id}''
* **ex_info** - Информация в модуле Info
* **del** - спросить подтверждение и перейти по тому же индексу с параметром ''del=$line->{id}&COMMENTS=%COMMENTS%''
Добавить свою кнопку:
Формат : ''$function_name:$name:$param:$ex_param''
\\
Если ''$name'' совпадает с ('del', 'change', 'add'), будет присвоена соответсвующая иконка.\\
или будет произведена попытка перевести ''$name'' с помощью _translate()\\
Если не совпадает с указаным форматом, будет считаться, что ''$function_name'' и ''$name'' равны указаной строке.\\
В ссылку кнопки, передается index=(get_function_index(''$function_name'') || индекс текущей страницы). \\
\\
Если в строке базы есть ''$uid'', так же к ссылке добавится ''UID=$line->{uid}''.
==== Фильтры result_former ====
=== FILTER_VALUES ===
Задаются ссылкой на функцию, передаются 2 параметра ($value - значение строки, $line - вся строка ссылкой на хеш)\\
\\
**Пример :**
{
...,
FILTER_VALUES => {
name => sub { my ($name, $line) = @_; $html->button($name, "get_index=foo_main&full=1&chg=$line->{id}") },
url => sub { my $link = shift; $html->button($link, $link) },
comments => sub { my $comments = shift; $html->element('abbr', $lang{COMMENTS}, { title => $comments }) }
},
...
}
=== FILTER_COLS ===
Задаются в виде хеша
{
...,
FILTER_COLS => {
column => '$filter_fn[:$plain_params]:$params'
},
...
}
Будет вызвана ''$filter_fn'' с аргументами (значение $line->{column}, { VALUES => ..., PARAMS => ..., LINK_NAME => ... );\\
\\
В PARAMS передается ссылка на масив в котором лежат $plain_params(если указаны), $params:\\
В VALUES, в зависимости от заполнения $params, могут передаваться:\\
* значения из $line
пример ''NAME,VALUE'' => ''{ NAME => $line->{name}, VALUE => $line->{value} }''
* значения указаные через ''='', заранее определённые значения
пример ''TYPE=1,LAST=5'' => { TYPE => 1, LAST => 5 }
В LINK_NAME передаются значения из SELECT_VALUE, если они заданы.
=== Пример FILTER_COLS ===
Отобразить ссылку на функцию типа обьекта. \\
Для формирования ссылки необходимо знать **Имя типа** (для текст в ссылке), **Название/Индекс функции** для перехода на функцию, **ID** (для перехода на редактирование/просмотр именно этого типа).
Если прописан фильтр для ''type_name'', то название типа у нас уже есть в первом аргументе ($line->{column}). \\
\\
Название равны для всех строк таблицы, поэтому можно передать через предзаданный аргумент VALUES ''FUNCTION_NAME=module_types'' \\
\\
Остаётся получить ID типа. Предположим, он отдаётся из list в поле ''$line->{type_id}''. Добавляем в HIDDEN_FIELDS ''TYPE_ID'', и добавляем в строку фильтра ''TYPE_ID'';
Получается, что в аргументах result_former должны присутствовать:
{
...
DEFAULT_FIELDS => '...,TYPE_NAME,...',
HIDDEN_FIELDS => '...,TYPE_ID,...',
FILTER_COLS => {
type_name => 'make_chg_button::FUNCTION_NAME=module_types,TYPE_ID'
}
...
}
Пример реализации фильтра:
sub make_chg_button {
my ($name, $attr) = @_;
return '' unless ($name);
my $fn_name = $attr->{VALUES}{FUNCTION_NAME};
my $id = $attr->{VALUES}{TYPE_ID};
my $fn_index = get_function_index($fn_name);
return $html->button($name, '?index=' . $fn_index . '&chg=' . $id);
}