Создание сайта для ОАО усмань табак

Автор: Пользователь скрыл имя, 10 Января 2012 в 22:18, дипломная работа

Описание работы

Бурное развитие информационных технологий и совершенствование компьютерной техники привело к глобальной интеграции их во все сферы человеческой деятельности. Не является исключением и сфера торговли.

В настоящее время очень велико разнообразие товаров и услуг в Internet. Для того, что бы организовать рекламную компанию в Internet, фирме необходимо иметь Web-страницу, где потенциальные клиенты смогли бы ознакомиться с фирмой, и узнать чем она занимается, интересны ли им предложения данной фирмы, задать (через форму обратной связи) интересующие их вопросы и т.д.

Цель данной работы является создание Web-сайта для компании ОАО «Усмань-табак». Необходимостью создания сайта ОАО «Усмань-табак» является, прежде всего, реклама продукции и услуг, которые предлагает данное предприятие. Интерактивная реклама – новый способ предложить товары и услуги потребителю. Интернет же являет собой наиболее динамично развивающуюся среду вещания. За последние пять лет кол-во пользователей сети Internet в России выросло в десятки раз, и на сегодняшний момент достигло 571 миллионов человек.

Работа содержит 1 файл

Диплом усмань-табак.doc

— 1,008.00 Кб (Скачать)

 

Листинг 3.3.

############################################################################# 
sub get_pages($){
# Считываем структуру страниц 
   my $access=esc_sql shift; 
   my(%parent,%pages); 
   my $res=$main::db->prepare(
"SELECT id,pid,name,title,hide,`left`

                               FROM pages

                               WHERE access<=$access

                               ORDER BY sort DESC"); 
   $res->execute() or die
"Error $main::DBI::err \"$main::DBI::errstr\"."
   while(my $s=$res->fetchrow_hashref){
#Построение дерева первые три строчки 
    
# Если для текущего ID уже имеется подуровень создаем для него ссылку 
     $s->{
'sub'}=$pages{$s->{id}}->{'sub'} if defined($pages{$s->{id}}); 
    
# Записываем ссылку на значения текущего ID 
     $pages{$s->{id}}=$s; 
    
# Добавляем ссылку на текущий ID к подуровеню родителя 
     push(@{$pages{$s->{pid}}->{
'sub'}},$s) if $s->{id} ne $s->{pid};

     # Записываем ID несуществующих родителей 
     $parent{$s->{pid}}=
0 unless defined $parent{$s->{pid}}; 
    
# Текущий ID может являться родителем 
     $parent{$s->{id}}=
1
   } 
   $res->finish(); 
   my @not_id;
# Массив содержащий ID'ы несуществующих родителей 
   foreach my $id (keys %parent){ 
       push(@not_id,$id) unless $parent{$id} 
   } 
   return wantarray?(\%pages,\@not_id):\%pages; 
}

############################################################################# 

      В процедуре get_pages, из листинга 3.3 в SQL запросе мы считываем так же значения колонок name, title, hide, left необходимые нам для генерации меню. В разработанной CMS в качестве наиболее подходящей основы для генерации меню являются маркированные списки html, применяя к ним каскадную таблицу стилей (CSS), в сформированном html-документе, мы можем добиться требуемого вида отображения (рис. 3.1) и многоуровневого выпадающего меню (рис. 3.2). 
 

Рис. 3.1 Отображение меню на разработанном  сайте 

Рис. 3.2 Отображение многоуровневого выпадающего меню на разработанном сайте 

      Однако  в сформированном дереве (листинг 3.3) зависимости страниц, для генерации  меню навигации, не хватает самого главного – ссылок. Конечно, в качестве ссылки можно использовать и идентификатор страницы, но все же лучше всего будет использование ЧПУ (Человекопонятный УРЛ). Такие адреса проще запомнить, т.к они ассоциируются с содержанием страницы и выше стоящих разделов.

      Для генерации ЧПУ мы использовали структуру страниц сайта в качестве названия которых использоваться поле name сформированного дерева (листинг 3.4). При этом так же формируется хэшь обратной связи ЧПУ=ID.

    Листинг 3.4.

sub add_href($;$$){ 
       my($i,$pid,$puri)=@_; 
       $pid =defined($pid)?$pid:
0
       $puri=defined($puri)?$puri:
''; 
       $puri.=
'/'
       foreach my $k (@{$i->{$pid}->{
'sub'}}){ 
           my $uri=$puri.$k->{name}; 
           my $suri=small_liter($uri); 
           if(exists($furl{$suri})){ 
               $suri.=
' '.$k->{id}; 
               $uri.=
' '.$k->{id}; 
           } 
           $k->{href}=decode_uri($uri); 
           $furl{$suri}=$k->{id}; 
           &add_href($i,$k->{id},$uri) if defined($k->{
'sub'}); 
       } 
}
 
 

      После генерации ЧПУ можно приступить к генерации меню навигации выполнением процедуры main_menu  (листинг 3.5).

 

     Листинг 3.5.

############################################################################# 
sub main_menu($;$$){ 
    my ($m,$u,$l)=@_; 
    $u=defined($u)?($u+
1):0
    my $menu=$l?
'<ul class="left">':'<ul>'
    foreach my $li (@{$m}){ 
        $menu.=
'<li>'
        if(defined $li->{
'sub'} && $u <= $cfg->{menu}->{levels}){ 
            if(LTE_IE6){ 
                $menu.=$u? 
                     
"<a href=\"".$li->{href}."\" title=\""
                      $li->{title}.
"\">".$li->{name}."<table><tr><td>"
                     
"<a class=\"sub\" href=\"".$li->{href}."\" title=\""
                      $li->{title}.
"\">".$li->{name}."<table><tr><td>"
            }else
                $menu.=
"<a class=\"hide\" href=\""
                  $li->{href}.
"\" title=\""
                  $li->{title}.
"\">"
                  $li->{name}.
"</a>"
            } 
            $menu.=&main_menu($li->{
'sub'},$u,$li->{left}); 
            $menu.=
'</td></tr></table></a>' if LTE_IE6; 
        }else
            $menu.=
"<a href=\""
                  $li->{href}.
"\" title=\""
                  $li->{title}.
"\">"
                  $li->{name}.
"</a>"
       } 
        $menu.=
'</li>'
    } 
    $menu.=
'</ul>'
    $menu; 
}
 

      Перед выборкой из БД содержимого соответствующих запросу пользователя производится проверка наличия обратной зависимости ЧПУ-ID и если таковая имеется (исключением является ЧПУ ‘/apanel’), происходит выборка строки таблицы соответствующую идентификатору текущего значения ЧПУ. В противном случае CMS генерирует сообщение об ошибке.

      Листинг 3.5.

$pages->{0}->{href}='/'
$furl{
''} =0
$furl{
'/'}=0
# Если имеются данные для передачи модулю передаем ему управление 
do $in->{module} if exists $in->{module};

# Обрабатываем запрос  пользователя

my $uri=small_liter encode_uri(($ENV{REQUEST_URI}=~/^(.*?)(\?.*)?$/)[0]); 
do
"apanel.pl"
unless($uri eq
'/apanel'){ 
if(exists($furl{$uri})){ 
   my $res=$main::db->prepare(
"SELECT title,keywords,description,content FROM pages WHERE id='$furl{$uri}'"); 
   $res->execute() or die
"Error $main::DBI::err \"$main::DBI::errstr\"."
   my $s=$res->fetchrow_hashref; 
   $res->finish(); 
   $skinСоздание сайта для ОАО усмань табак       = $s->{title}; 
   $skinдоклады, рефераты, курсовые и дипломные работы, stud24    = $s->{keywords}; 
   $skinБурное развитие информационных технологий и совершенствование компьютерной техники привело к глобальной интеграции их во все сферы человеческой деятельности. Не является исключением и сфера торговли. В настоящее время очень велико разнообразие товаров и услуг в Internet. Для того, что бы организовать рекламную компанию в Internet, фирме необходимо иметь Web-страницу, где потенциальные клиенты смогли бы ознакомиться с фирмой, и узнать чем она занимается, интересны ли им предложения данной фирмы, задать (через форму обратной связи) интересующие их вопросы и т.д. Цель данной работы является создание Web-сайта для компании ОАО «Усмань-табак». Необходимостью создания сайта ОАО «Усмань-табак» является, прежде всего, реклама продукции и услуг, которые предлагает данное предприятие. Интерактивная реклама – новый способ предложить товары и услуги потребителю. Интернет же являет собой наиболее динамично развивающуюся среду вещания. За последние пять лет кол-во пользователей сети Internet в России выросло в десятки раз, и на сегодняшний момент достигло 571 миллионов человек. = $s->{description}; 
   $skin{CONTENT}     = $s->{content}; 
   $skin{SIDEBAR}     = $s->{sidebar}; 
   $skin{MENU}        = menu($pages,$uri); 
}else{$skin{CONTENT}  =
"Нет страницы $uri\n"
}
 

      Расширение  базового функционала осуществляется с помощь модулей в листинге 3.5 присутствует конструкция «do $in->{module} if exists $in->{module};» позволяющая передать управление модулю с именем $in->{module}. При этом модуль может самостоятельно завершить работу системы для передачи информации отличной от html. Для подстановки результата своей работы модулю доступны основные элементы подстановки в виде хэша %skin. Такие как:

    • $skinСоздание сайта для ОАО усмань табак – заголовок страницы;
    • $skinдоклады, рефераты, курсовые и дипломные работы, stud24 – ключевые слова страницы;
    • $skinБурное развитие информационных технологий и совершенствование компьютерной техники привело к глобальной интеграции их во все сферы человеческой деятельности. Не является исключением и сфера торговли. В настоящее время очень велико разнообразие товаров и услуг в Internet. Для того, что бы организовать рекламную компанию в Internet, фирме необходимо иметь Web-страницу, где потенциальные клиенты смогли бы ознакомиться с фирмой, и узнать чем она занимается, интересны ли им предложения данной фирмы, задать (через форму обратной связи) интересующие их вопросы и т.д. Цель данной работы является создание Web-сайта для компании ОАО «Усмань-табак». Необходимостью создания сайта ОАО «Усмань-табак» является, прежде всего, реклама продукции и услуг, которые предлагает данное предприятие. Интерактивная реклама – новый способ предложить товары и услуги потребителю. Интернет же являет собой наиболее динамично развивающуюся среду вещания. За последние пять лет кол-во пользователей сети Internet в России выросло в десятки раз, и на сегодняшний момент достигло 571 миллионов человек. – описание страницы;
    • $skin{CONTENT} – наполнение страницы;
    • $skin{SIDEBAR} – боковая панель;
    • и т.д.
 

      Визуализация  информации происходит путем подстановки хэша %skin в подготовленный шаблон и последующего его передачи в браузер пользователя. За подстановку в шаблон и его последующий вывод отвечают строки кода представленные в листинге 3.6.

      Листинг 3.6.

sub engine_array($$){ 
    my($htpl,$ar)=@_; 
    my $html=
''
    foreach my $h (@{$ar}){ 
        $html.=engine($htpl,$h); 
    } 
    $html; 

sub engine($$){ 
    my($html,$hr)=@_; 
    $html=~s/<!\-\-\s*ARRAY_([A-Z\d\-_]+)\s*\-\->(.*?)<!\-\-\s*END_ARRAY_\
1\s*\-\->/engine_array($2,$hr->{$1})/egs; 
    $html=~s/\$([A-Z\d\-_]+)\$/$hr->{$
1}/eg; 
    $html; 
}

my $template=readfile(

      $cfg->{template}->{dir}.’/’.$cfg->{template}->{name}.’/index.html’ );

print engine($template,\%skin); 

      При этом используется три процедуры readfile(), engine() и engine_array(). Процедура readfile возвращает все содержимое файла, имя которого передано ей в качестве аргумента. (Полный листинг ядра сайта смотрите в листинге 1 приложения).

3.2 Модуль авторизации

      Так как управление содержимым сайта  выполняется непосредственно в  нем самом, нам нужно было разграничить права доступа к администраторской  панели сайта. В результате чего был  написан модуль “mylogined.pm”, выполняющий следующие функции:

    • Вход пользователя по логину и паролю.
    • Создание и поддержка сессии пользователя.
    • Выход:
      • по требованию пользователя;
      • по неактивности пользователя за определенный промежуток времени.
    • Защита от брутфорса, основанная на:
      • временной блокировке IP-адреса, после n-го числа неудачных попыток входа;
      • временной блокировке логина пользователя подвергаемого атакой на подбор пароля.
    • Предоставление системе данных о пользователе (логин, группа и тд.).
 

      В своей работе модуль авторизации  использует 5 таблиц БД:

    1. User – для хранения зашифрованного пароля и других данных о пользователе.
    2. Session – для хранения информации о текущих сессиях.
    3. Group – для определения принадлежности пользователя к той или иной группе  доступа.
    4. IPBlock – для защиты от брутфорса по IP.
    5. UserBlock – для защиты логина от брутфорса.
 

      Вход  пользователя осуществляется путем получения от пользователя логина и пароля с последующим их поиском в таблице “User”. Если пользователь с таким логином и паролем найден, то для него создается сессия с уникальным идентификатором пользователя которая передается в качестве cookies, что позволяет совершенно прозрачно (пользователю не требуется каждый раз вводить пароль) работать с пользователем (см. листинг 3.7).

      Листинг 3.7.

my $query="SELECT pass FROM User WHERE user='$user' AND        

                                       pass=MD5(MD5('$pass')+'$salt')"
$res=$::db->prepare($query); 
$res->execute() or die
"Error $::DBI::err \"$::DBI::errstr\"."
my($user_pass)=$res->fetchrow_array(); 
$res->finish(); 
if(defined($user_pass)){ 
    
# Создаем новую сессию, Вход успешен!!! 
     $query=
"SELECT id,addr FROM Sessions WHERE user='$user' AND

                                         UNIX_TIMESTAMP()<=etime"
     $res=$::db->prepare($query); 
     $res->execute() or die
"Error $::DBI::err \"$::DBI::errstr\"."
     my($sid,$addr)=$res->fetchrow_array(); 
     $res->finish(); 
     if($addr eq $ENV{REMOTE_ADDR}){ 
         
# Пользователь уже в системе, обновляем сессию 
          $::db->do(
"UPDATE Sessions SET id='$sid',

                     etime=UNIX_TIMESTAMP()+($Session_timeout*60),

                                         atime=UNIX_TIMESTAMP()"); 
     }else{
# создаем новую сессию для пользователя 
      
# Если имеется сессия на другом компьютере выходим из нее 
          exit_session($sid) if defined($sid);  
         
# Генерируем идентификатор сессии 
          $sid=genUID;  
          $::db->do(
"INSERT INTO Sessions VALUES('$sid','$user', '$ENV{REMOTE_ADDR}', UNIX_TIMESTAMP()+($Session_timeout*60), UNIX_TIMESTAMP(), UNIX_TIMESTAMP());"); 
     }

Информация о работе Создание сайта для ОАО усмань табак