Автор: Пользователь скрыл имя, 10 Января 2012 в 22:18, дипломная работа
Бурное развитие информационных технологий и совершенствование компьютерной техники привело к глобальной интеграции их во все сферы человеческой деятельности. Не является исключением и сфера торговли.
В настоящее время очень велико разнообразие товаров и услуг в Internet. Для того, что бы организовать рекламную компанию в Internet, фирме необходимо иметь Web-страницу, где потенциальные клиенты смогли бы ознакомиться с фирмой, и узнать чем она занимается, интересны ли им предложения данной фирмы, задать (через форму обратной связи) интересующие их вопросы и т.д.
Цель данной работы является создание Web-сайта для компании ОАО «Усмань-табак». Необходимостью создания сайта ОАО «Усмань-табак» является, прежде всего, реклама продукции и услуг, которые предлагает данное предприятие. Интерактивная реклама – новый способ предложить товары и услуги потребителю. Интернет же являет собой наиболее динамично развивающуюся среду вещания. За последние пять лет кол-во пользователей сети Internet в России выросло в десятки раз, и на сегодняшний момент достигло 571 миллионов человек.
Листинг 3.3.
##############################
sub get_pages($){#
Считываем структуру
страниц
my $access=esc_sql shift;
my(%parent,%pages);
my $res=$main::db->prepare("
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}}->
#
Записываем ссылку на
значения текущего ID
$pages{$s->{id}}=$s;
#
Добавляем ссылку на
текущий ID к подуровеню
родителя
push(@{$pages{$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):\
}
##############################
В
процедуре 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}
"<a class=\"sub\"
href=\"".$li->{href}."\" title=\"".
$li->{title}."\">".$li->{name}
}else{
$menu.="<a
class=\"hide\" href=\"".
$li->{href}."\"
title=\"".
$li->{title}."\">".
$li->{name}."</a>";
}
$menu.=&main_menu($li->{'sub'}
$menu.=
}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}=
do "apanel.pl";
unless($uri eq '/apanel'){
if(exists($furl{$uri})){
my $res=$main::db->prepare("
$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 в подготовленный шаблон и последующего его передачи в браузер пользователя. За подстановку в шаблон и его последующий вывод отвечают строки кода представленные в листинге 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\
$html=~s/\$([A-Z\d\-_]+)\$/$
$html;
}
my $template=readfile(
$cfg->{template}->{dir}.’/’.$
print engine($template,\%skin);
При этом используется три процедуры readfile(), engine() и engine_array(). Процедура readfile возвращает все содержимое файла, имя которого передано ей в качестве аргумента. (Полный листинг ядра сайта смотрите в листинге 1 приложения).
Так
как управление содержимым сайта
выполняется непосредственно в
нем самом, нам нужно было разграничить
права доступа к
В своей работе модуль авторизации использует 5 таблиц БД:
Вход пользователя осуществляется путем получения от пользователя логина и пароля с последующим их поиском в таблице “User”. Если пользователь с таким логином и паролем найден, то для него создается сессия с уникальным идентификатором пользователя которая передается в качестве cookies, что позволяет совершенно прозрачно (пользователю не требуется каждый раз вводить пароль) работать с пользователем (см. листинг 3.7).
Листинг 3.7.
my $query="SELECT pass FROM User WHERE user='$user' AND
$res=$::db->prepare($query);
$res->execute() or die "Error
$::DBI::err \"$::DBI::errstr\".";
my($user_pass)=$res->fetchrow_
$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_
$res->finish();
if($addr eq $ENV{REMOTE_ADDR}){
$::db->do("UPDATE Sessions SET
id='$sid',
etime=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_
}