Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
abills:docs:development:manual:ru [2018/01/14 19:29]
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''​ )| 
 +| 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}''​). \\
  
 Конструктор в общем случае должен реализовать как минимум этот функционал Конструктор в общем случае должен реализовать как минимум этот функционал
Строка 186: Строка 194:
 </​code>​ </​code>​
  
-В таком ​случае в классе становятся доступны следующие ​методы:\\ +Рассмотрим работу с каждым из унаследованных методов детальнее.
-| 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}''​). \\ +
- +
-Рассмотрим работу с каждым из методов детальнее.+
 <​accordion><​panel title="​**Таблица,​ которая используется в запросах**"><​code mysql> <​accordion><​panel title="​**Таблица,​ которая используется в запросах**"><​code mysql>
  
Строка 239: Строка 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>​