Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
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>​