...
Сами функции должны быть доступны в webinterface (или быть импортированы из других пакетов внутри webinterface).
Поскольку все webinterface выполняются в глобальной области видимости, к имени каждой функции нужно добавлять имя модуля.
...
В основном случае, логика вебинтерфейса проста и прозрачна - получить данные, обработать и вывести в каком-то виде (шаблон или таблица).
Фреймворк неявно (через глобальную область видимости) передаёт в webinterface следующие переменные:
Имя | Описание |
---|---|
%LANG | Хеш-массив словаря |
%FORM | Хеш-массив значений переданных на страницу (GET или POST запросом) |
$html | Объект визуализации (экземпляр класса Abills::HTML ) |
$users | Менеджер работы с пользователями (экземпляр класса Users ). Использовать только в функциях админ. интерфейса. |
$db | Соединение с БД |
$admin | Менеджер работы с администраторами (экземпляр класса Admins ) |
%conf | Хеш-масcив конфигурационного файла |
Для примера рассмотрим работу с сущностью entity
в модуле Example
...
Все классы работы с БД наследуются от dbcore
.
В таком случае в классе становятся доступны следующие методы:
query($query, $type, $attr) | Выполнение запроса к БД (в основном используется для операции SELECT ) |
changes($table, $data, $attr) | Обёртка над query("UPDATE …"). Сравнивает данные в таблице и изменяет только поля с обновлёнными значениями. Может добавлять в системный лог записи об изменении |
query_add($table, $data, $attr) | Обёртка над query("INSERT …"). Добавляет данные в таблицу, инкапсулирует логику обработки значений некоторых типов (ip , netmask , attachment , reply , text …) |
query_del($table, $data, $extended_params, $attr) | Обёртка над query("DELETE …"), В нормальном случае используется для удаления строки с id = $data->{ID} |
search_former($search_columns, $attr) | Специальный метод формирования WHERE части запроса. |
Все эти методы должны вызываться в объекте с заданными полями conf
, db
, admin
($self->{db}
, $self->{conf}
, $self->{admin}
).
...
Expand | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||
|
query($query, $type, $attr)
Метод query() выполняет запрос к базе и в . В зависимости от аргумента $type получает результат и , в зависимости от значений в $attr применяет к нему некоторые преобразования.
Рассмотрим примеры запросов и результат выполнения.
...
Создание базовой страницы
Создаем базовую страницу сервиссервиса
cgi-bin/hello.cgi
Code Block | ||
---|---|---|
| ||
#!/usr/bin/perl =head1 NAME Hello world =cut use strict; use warnings; # Включение нужных путей BEGIN { our $libpath = '../'; my $sql_type = 'mysql'; unshift(@INC, $libpath . "Abills/$sql_type/", $libpath . "Abills/modules/", $libpath . '/lib/', $libpath . '/Abills/', $libpath ); } #Модуль# Модуль конфигурации use Conf; our ( $libpath, %conf, %lang, $base_dir, ); # конфигурационный файл do "../libexec/config.pl"; # HTML визуализация use Abills::HTML; my $html = Abills::HTML->new( { IMG_PATH => 'img/', NO_PRINT => 1, CONF => \%conf, CHARSET => $conf{default_charset}, } ); # Подключение базы use Abills::SQL; my $db = Abills::SQL->connect($conf{dbtype}, $conf{dbhost}, $conf{dbname}, $conf{dbuser}, $conf{dbpasswd}, { CHARSET => ($conf{dbcharset}) ? $conf{dbcharset} : undef }); # Включение базовых словарей if($html->{language} ne 'english') { do $libpath . "/language/english.pl"; } if(-f $libpath . "/language/$html->{language}.pl") { do $libpath."/language/$html->{language}.pl"; } # Подключение модуля работы с шаблонами require Abills::Templates; # Включение конфигурационного файла Conf->new($db, undef, \%conf); $html->{METATAGS} = templates('metatags_client'); print $html->header(); # Диалоговое окно приветсвия print $html->message('info', $lang{INFO}, "Hello world\nSystem name '$conf{WEB_TITLE}'"); 1; |
...