===== 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); }