Различия
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
abills:docs:development:manual:ru [2018/01/14 19:24] anton [Отображение списка обьектов сущностей] |
abills:docs:development:manual:ru [2019/02/21 10:57] (текущий) andriy [Основная часть модуля - вебинтерфейс] |
||
---|---|---|---|
Строка 36: | Строка 36: | ||
|%FORM |хеш-масив значений переданных на страницу (GET или POST запросом) | | |%FORM |хеш-масив значений переданных на страницу (GET или POST запросом) | | ||
|$html |Обьект визуализации (экземпляр класса ''Abills::HTML'') | | |$html |Обьект визуализации (экземпляр класса ''Abills::HTML'') | | ||
- | |$users |Менеджер работы с пользователями (экземпляр класса ''Users'') | | + | |$users |Менеджер работы с пользователями (экземпляр класса ''Users''). **Использовать только в функциях админ. интерфейса.** | |
|$db |Соединение с БД | | |$db |Соединение с БД | | ||
|$admin |Менеджер работы с администраторами (экземпляр класса ''Admins'')| | |$admin |Менеджер работы с администраторами (экземпляр класса ''Admins'')| | ||
Строка 164: | Строка 164: | ||
==== Работа с БД ==== | ==== Работа с БД ==== | ||
- | Все классы работы с БД наследуются от ''dbcore''. В таком случае в классе становятся доступны следующие методы:\\ | + | Все классы работы с БД наследуются от ''dbcore''. \\ |
+ | В таком случае в классе становятся доступны следующие методы:\\ | ||
| query($query, $type, $attr) | выполнение запроса к БД ( В основном используется для операции ''SELECT'' )| | | query($query, $type, $attr) | выполнение запроса к БД ( В основном используется для операции ''SELECT'' )| | ||
| changes($table, $data, $attr) | обёртка над query("UPDATE ..."). Сравнивает данные в таблице и изменяет только поля с обновлёнными значениями. Может добавлять в системный лог записи об изменении| | | changes($table, $data, $attr) | обёртка над query("UPDATE ..."). Сравнивает данные в таблице и изменяет только поля с обновлёнными значениями. Может добавлять в системный лог записи об изменении| | ||
Строка 173: | Строка 174: | ||
Все эти методы должны вызываться в объекте с заданными полями ''conf'', ''db'', ''admin'' (''$self->{db}'', ''$self->{conf}'', ''$self->{admin}''). \\ | Все эти методы должны вызываться в объекте с заданными полями ''conf'', ''db'', ''admin'' (''$self->{db}'', ''$self->{conf}'', ''$self->{admin}''). \\ | ||
- | Рассмотрим работу с каждым из методов детальнее. | + | Конструктор в общем случае должен реализовать как минимум этот функционал |
+ | <code perl> | ||
+ | #********************************************************** | ||
+ | =head2 new($db, $admin, \%conf) - Constructor for Example | ||
+ | |||
+ | =cut | ||
+ | #********************************************************** | ||
+ | sub new{ | ||
+ | my ($class, $db, $admin, $CONF) = @_; | ||
+ | my $self = { | ||
+ | db => $db, | ||
+ | admin => $admin, | ||
+ | conf => $CONF | ||
+ | }; | ||
+ | |||
+ | bless($self, $class); | ||
+ | return $self; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Рассмотрим работу с каждым из унаследованных методов детальнее. | ||
<accordion><panel title="**Таблица, которая используется в запросах**"><code mysql> | <accordion><panel title="**Таблица, которая используется в запросах**"><code mysql> | ||
Строка 217: | Строка 238: | ||
Использование этого ключа связано с системой шаблонов, по утверждённому стандарту, названия столбцом таблицы указываются в __lowercase__, а переменные шаблона указываются в __UPPERCASE__. Таким образом, для передачи данных из БД в шаблон, пришлось бы вручную переназначать переменные при передаче в шаблон. Ключ ''COLS_UPPER'' дублирует ключи в хеше в в виде UPPERCASE, что позволяет передавать строки результата в шаблон без дополнительной логики. | Использование этого ключа связано с системой шаблонов, по утверждённому стандарту, названия столбцом таблицы указываются в __lowercase__, а переменные шаблона указываются в __UPPERCASE__. Таким образом, для передачи данных из БД в шаблон, пришлось бы вручную переназначать переменные при передаче в шаблон. Ключ ''COLS_UPPER'' дублирует ключи в хеше в в виде UPPERCASE, что позволяет передавать строки результата в шаблон без дополнительной логики. | ||
+ | |||
+ | ==== Создание базовой страницы ==== | ||
+ | |||
+ | Создаем базовую страницу сервиса | ||
+ | |||
+ | ''cgi-bin/hello.cgi'' | ||
+ | | ||
+ | <code> | ||
+ | #!/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; | ||
+ | </code> |