Child pages
  • Пошаговое осваивание фреймворка ABillS

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Сами функции должны быть доступны в 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
titleТаблица, которая используется в запросах


Code Block
languagesql
CREATE TABLE `example_entity` (
  `id` INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
  `name` VARCHAR(40) NOT NULL,
  `value` SMALLINT(6) NOT NULL DEFAULT 0
);


idnamevalue
1name1101
2name2102


query($query, $type, $attr)

Метод query() выполняет запрос к базе и в . В зависимости от аргумента $type получает результат и , в зависимости от значений в $attr применяет к нему некоторые преобразования.

Рассмотрим примеры запросов и результат выполнения.

...

Создание базовой страницы

Создаем базовую страницу сервиссервиса

cgi-bin/hello.cgi

Code Block
languageperl
#!/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;

...