ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«БЕЛГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ
ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ»
(НИУ «БелГУ»)
ИНСТИТУТ ИНЖЕНЕРНЫХ ТЕХНОЛОГИЙ И ЕСТЕСТВЕННЫХ НАУК
КАФЕДРА МАТЕМАТИЧЕСКОГО И ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ
ИНФОРМАЦИОННЫХ СИСТЕМ
СОЗДАНИЕ WEB-САЙТА ДЛЯ МАГАЗИНА «МЕБЕЛЬНЫЕ РЕШЕНИЯ»
Выпускная квалификационная работа
обучающейся по направлению подготовки 02.03.02 Фундаментальная
информатика и информационные технологии
очной формы обучения, группы 07001301
Миколюк Татьяны Юрьевны
Научный руководитель
к.т.н., доцент
Чашин Ю.Г.
БЕЛГОРОД 2017
ОГЛАВЛЕНИЕ
ВВЕДЕНИЕ .................................................................................................................. 3
ГЛАВА 1 АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ ..................................................... 5
1.1 Общая характеристика магазина «Мебельные решения»................................. 5
1.2 Обоснование необходимости и цели создания Интернет-магазина ................ 6
1.3 Обзор существующих аналогов ........................................................................... 9
1.4 Выбор инструментальных средств и СУБД ..................................................... 13
1.5 Назначение и процесс создания Интернет-магазина ..................................... 21
ГЛАВА 2 ПРОЕКТИРОВАНИЕ ИНТЕРНЕТ-МАГАЗИНА «МЕБЕЛЬНЫЕ
РЕШЕНИЯ» ............................................................................................................... 26
2.1 Информационная модель и обеспечение комплекса задач ............................. 26
2.2 Проектирование логической и физической моделей БД ................................ 30
2.3 Функции модулей сайта и сценарии диалогов подсистем .............................. 37
2.4 Описание программных модулей ...................................................................... 40
2.5 Технологическое обеспечение ........................................................................... 42
ГЛАВА 3 АПРОБАЦИЯ WEB-ПРИЛОЖЕНИЯ ................................................... 44
3.1 Описание интерфейса пользователя ................................................................. 44
3.2 Описание интерфейса администратора ............................................................ 49
ЗАКЛЮЧЕНИЕ ......................................................................................................... 52
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ ................................................. 53
ПРИЛОЖЕНИЯ ......................................................................................................... 55
3
ВВЕДЕНИЕ
Бурное совершенствование сети Интернет, применение новейших
коммуникаций и технологий в предпринимательской деятельности, а также в
повседневной жизни, способствовало формированию новых составных
элементов электронного бизнеса, таких как электронная коммерция.
Электронная коммерция – это достаточно широкая сфера экономики, в
которой имеются разнообразные виды деятельности, такие как Интернетмаркетинг, реклама и Интернет-магазины, различные платёжные системы и
многие другие.
На сегодняшний день существует не один десяток предприятий, от
малых узкоспециализированных до крупных торговых сетей, которые
желают иметь своё представительство в сети Интернет, а часть из них
осуществляют свою торговую деятельность исключительно в сети. Интернет
дает возможность открытия новых каналов сбыта продукции, а также
открывает всевозможные пути для маркетинговых исследований и рекламы.
Актуальность данного дипломного проекта определяется следующими
факторами:
•
использованием
современных
средств
проектирования
и
разработки web-приложений;
•
активным внедрением компьютерных технологий в сочетании со
стремительным ежегодным ростом Интернет-продаж;
•
ростом физических объемов торговли и расширением ее
ассортимента.
Без
современного
программного
обеспечения
осуществление
электронной коммерции невыполнимо. На сегодняшний день имеется
большое многообразие таких технологий как PHP, JSP, ASP, ASP.NET,
которые
позволяют
разрабатывать
надежные
и
эффективные
web-
4
приложения и отвечают самым современным запросам. Нынешние webприложения удобны в использовании, как со стороны фирмы-продавца, так и
со стороны покупателя-пользователя сети Интернет.
Целью данной выпускной квалификационной работы является создание
web-приложения,
представляющего
собой
web-представительство
и
Интернет-магазин по продаже мебели для магазина «Мебельные решения».
Задачами данной выпускной квалификационной работы являются:
▪
анализ предметной области;
▪
формирование требований к программному обеспечению;
▪
выбор инструментальных средств разработки;
▪
проектирование и программная реализация web-приложения;
▪
испытание программного обеспечения и анализ результатов.
Разработанное приложение позволит принимать заказы клиентов, а
предприятию размещать в сети Интернет информацию о своей продукции.
Соответственно,
покупатели, просматривая каталог, могут заказывать
товары.
В первой главе производится анализ предметной области, связанных с
функционированием предприятия «Мебельные решения», будет произведён
обзор существующих Интернет-магазинов других мебельных торговых
предприятий, обзор инструментов для разработки.
Во второй главе будет описан процесс проектирования Интернетмагазина мебельной торговой организации.
В третьей главе будет произведена апробация прототипа.
Данная выпускная квалификационная работа состоит из 54 страниц, в
ней содержится 38 рисунков, 7 таблиц и приложения.
5
ГЛАВА 1 АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ
1.1 Общая характеристика магазина «Мебельные решения»
Магазин «Мебельные решения» занимается продажей мягкой мебели:
диван-кроватей, кресел для отдыха, кресел-кроватей, детских кроватей. В
магазине
установлены
низкие
цены,
есть
возможность
выбирать
комплектацию и материал для обивки. Руководители фирмы в своей
деятельности
основываются на изучении
спроса и
предложения
у
потребителей.
Покупателями являются
✓
физические лица, при их обслуживании магазин ориентируется
на покупателя со средним достатком из малометражных и средне
метражных квартир;
✓
юридические
лица,
при
их
обслуживании
общество
ориентируется на продажу узкоспециализированных видов товаров и на
комплексное
обслуживание
государственных
учреждений
(школы,
больницы).
Организация труда в магазине направлена на осуществление комплекса
экономических
и
организационно-технических
способствующих
стабилизации
торгово-технологических
мероприятий,
процессов,
эффективнее использовать торговые и другие площади, организовать
комфорт пространства клиентов и обеспечить высокий уровень условия
труда.
Структура и характер операций по продаже товаров зависят от наличия
используемых материалов и методов их продажи. В магазине «Мебельные
решения» применяют следующие методы продажи товаров:
•
самообслуживание;
6
•
индивидуальное обслуживание покупателей;
•
по образцам;
•
по предварительным заказам.
При решении вопроса об уровне сервиса руководство учитывает, что
потребителя интересуют не только определенные услуги сами по себе, но и
их объем и качество.
Сервис подразделяется на предпродажный и послепродажный.
В
практике
деятельности
магазина
«Мебельные
решения»
используются такие формы предпродажного сервиса как
-
консультирование;
-
подготовка товаров к продаже (проверка состояния, проверка
комплектности).
Предпродажный сервис всегда бесплатен.
1.2 Обоснование необходимости и цели создания Интернетмагазина
Далее рассмотрены основные показатели, позволяющие определить
экономическую целесообразность реализации Интернет-магазина [1]:
▪
посещаемость;
▪
конверсия;
▪
объем целевой аудитории;
▪
прибыль с транзакции;
▪
стоимость доставки;
▪
уровень конкуренции.
Перечисленные выше показатели являются основными в сети
Интернет. В списке они проранжированы в порядке убывания значимости.
Рассмотрим эти показатели подробнее.
Первым показателем является посещаемость. Как ясно из названия,
посещаемость – это число посетителей Интернет-магазина в сутки. В
7
офлайн-мире используется похожий показатель для оценки магазинов «проходимость». В сети Интернет имеется статистика конкурирующих
Интернет-магазинов в открытом доступе, что является удобством для оценки
посещаемости web-приложения. По ней мы можем определить, сколько в
среднем посещений приходится в рабочие дни и в выходные.
С
посещаемостью
коэффициент,
который
тесен
такой
определяет
показатель
соотношение
как
конверсия
между
-
количеством
переходов на сайт и количеством продаж. Иначе говоря, он демонстрирует,
сколько из людей, посетивших сайт, станут вашими заказчиками. Данный
показатель считается единственным труднодоступным, получаемым из
открытого источника.
Величина показателя конверсии в первую очередь зависит от качества
аудитории - от того, каким способом были привлечены посетители на сайт и
насколько точно.
От конверсии перейдем к следующему показателю - объему целевой
аудитории. Объем целевой аудитории - это численность потенциальных
покупателей, которые заинтересованы в покупке. Для оценки данной
аудитории
существует
простой
способ
-
использование
статистики
поисковых запросов. Такую статистику по запросам можно получить в
службе "Яндекс.Директ". Служба предоставляет информацию о числе поиска
того или иного слова в Интернете пользователями Yandex за минувший
месяц. Большая часть компаний используют именно эту службу для
профессионального продвижения в Интернете.
Рассмотрим следующий по важности показатель - прибыль с
транзакции, или иначе прибыль с одной продажи. Данная прибыль зависит от
торговой наценки определенного типа товара.
Стоимость размещения в сервисах может различаться в разы, что
зависит от уровня конкуренции в избранном сегменте рынка, а также от
желаемой позиции в выдаче. К примеру, стоимость поисковой оптимизации
8
по достаточному количеству запросов колеблется от 600 до 800 у.е. за
нахождение в десятке и от 800 до 1000 у.е. за нахождение в пятерке.
Стоимость
размещения
объявления
в
таком
сервисе
как
"Яндекс.Директ" можно определить по стоимости каждого клика (перехода)
по размещенному объявлению.
Перейдем к следующему, рассматриваемому нами показателю стоимости
доставки.
В
основном
стоимость
доставки
выявляется
следующими тремя критериями:
✓
дистанцией перевозки;
✓
массой и габаритами перевозимого товара;
✓
условиями транспортировки.
На первых порах существования проекта будет рациональным
использовать услуги других транспортных компаний. Это помогает снизить
риски, и позволяет уделить больше времени развитию продаж, а не
логистике.
Последний рассматриваемый показатель - это уровень конкуренции, от
которого зависит стоимость продвижения Интернет-ресурса. Чем сильнее
конкуренция, тем больше средств вынуждается потратить для получения
запланированной посещаемости. В используемых для продвижения сервисах
ценообразование устроено так, что цена одного перехода на сайт прямо
пропорциональна количеству конкурентов, которые так же используют
данный сервис для продвижения в Интернете.
Приведем пример наиболее эффективных средств продвижения сайтов
в настоящее время (в порядке убывания эффективности):
•
поисковая оптимизация (наличие вашего сайта в выдаче
поискового сервера по необходимым вам ключевым словам);
•
вывод объявления в службе "Яндекс.Директ";
•
рекомендация на торговой площадке "Яндекс.Маркет".
9
При сборе всех рассмотренных показателей воедино выполним расчет
маржинальной прибыли Интернет-магазина.
Для расчета возьмём среднюю себестоимость доставки 20 у.е. После
учёта расходов на доставку прибыль с транзакции получается равной 80 у.е.
На переменные издержки отнесем расходы на продвижение сайта, то есть
привлечение покупателей – 1 400 у.е. в месяц. Таким образом, на тринадцати
продажах в день получаем: 80 x 13 x 30 – 1 400 = 29 800 у.е.
Разумеется,
демонстрирует
это
достаточно
общий
подход
упрощенный
для
расчёт,
определения
однако
он
экономической
целесообразности создания Интернет-магазина.
1.3 Обзор существующих аналогов
Рассмотрим мебельный Интернет-магазин «Визит-Мебель».
Разработка мебельного Интернет-магазина осуществлялась на системе
управления контентом WebAsystShopScript [2].
При разработке сайта были решены следующие задачи:
•
двойная навигация "по мебельным брендам" (по производителям)
и "по каталогам мебели";
•
использование Интернет-магазина как
официального сайта
мебельной сети.
Первая задача двойной навигации была выполнена модификацией
стандартных
модулей
CMS
WebAsystShopScript
и
расширением
их
функционала.
Для решения второй, помимо размещения различной информации о
мебельной сети на сайте, была проведена фотосъёмка торговых зон. На сайте
размещаются красивые фотогалереи магазинов с картами проезда и их
контактной информацией.
10
Создание сайта мебельной сети «Визит-Мебель» было окончено в
сентябре 2010 года. Сразу же после этого началось продвижение Интернетмагазина с использованием различных видов контекстной рекламы.
На рис. 1.1 показана стартовая страница Интернет-магазина «ВизитМебель».
Рис. 1.1. Стартовая страница Интернет-магазина «Визит-Мебель»
Рассмотрим следующий аналоговый сайт Интернет-магазина офисной
мебели «Vior» [3].
Данный Интернет-магазин построен на основе CMS Simpla. Основные
возможности CMS Simpla [4]:
-
синхронизация с сервисами 1С, МойСклад и Класс365;
-
автоматическая синхронизация номенклатуры и заказов с
1С:Предприятие 8;
11
-
многоуровневый каталог товаров;
-
характеристики товаров;
-
скидочные купоны;
-
сопутствующие товары;
-
блог;
-
комментарии к товарам и статьям;
-
скидки для покупателей;
-
водяные знаки для изображений товаров.
Также реализована система шаблонов, которая позволяет полностью
настраивать дизайн через панель управления. HTML и CSS редактор с
подсветкой синтаксиса помогут вам в этом.
На рис. 1.2 показана стартовая страница Интернет-магазина «Vior».
Рис. 1.2. Стартовая страница Интернет-магазина «Vior»
Рассмотрим последний аналоговый сайт мебели для дома «Lazurit» [5].
На
стартовой
продемонстрирована
странице
работа
слайдера.
данного
Интернет-магазина
Слайдером
называется
блок
12
определенной ширины, который занимает часть web-страницы, либо всю ее
целиком. Его главной особенностью является динамическое изменение
контента вручную или автоматически.
Такой элемент сайта в наше время стал достаточно популярным
явлением в дизайне web-приложений. Все благодаря своей информативности,
функциональности и легкости в установке. С помощью слайдера появляется
возможность показывать картинки, картинки с надписями, картинки со
ссылками и новостями, что продемонстрировано на сайте магазина «Lazurit».
Реализция слайдера выполнена на основе технологии
JavaScript, с
использованием HTML-кода, а также библиотеки JavaScript jQuery.
Также в составе Интернет-магазина содержится каталог-витрина с
описанием основных групп продукции, раздел с акциями, скидками и другой
информацией.
На рис. 1.3 показана стартовая страница магазина мебели
«Lazurit».
Рис. 1.3. Стартовая страница магазина мебели для дома «Lazurit».
13
1.4 Выбор инструментальных средств и СУБД
Для
выбора
существующих
средств
средств
реализации
разработки
проекта
проведем
анализ
Наиболее
web–приложений.
распространенными являются PHP+ Apache и ASP.NET+IIS. Выбор будем
производить по следующим критериям:
•
простота освоения;
•
стоимость средств реализации и внедрения;
•
наличие справочной документации;
•
безопасность;
•
легкость внедрения программного продукта;
•
простота в администрировании.
Таблица 1.1
Анализ средств реализации проекта
Критерий
Простота
освоения
Стоимость
средств
реализации и
внедрения
Наличие
справочной
документации
Итого
PHP
5
5
5
15
ASP.NET
5
3
5
13
Средства
реализации
Исходя из проведенного анализа в табл. 1.1, в качестве средства
реализации выбираем PHP и сервер Apache.
Для РНР характерны [6]:
▪ высокое развитие функциональности для работы с базами данных,
сетевыми соединениями, строками, поддержка операций с файловыми
системами, Java, COM, XML, CORBA, WDDX и MacromediaFlash;
14
▪ совместимость
с
такими
платформами
как
UNIX
(любые
разновидности), Win32 (NT/95/98/2000), OSX, QNX, MacOS (WebTen), OS/2 и
BeOS;
▪ совместимость с серверами: модулем Apache (UNIX, Win32),
CGI/FastCGI, thttpd, fhttpd, phttpd, NSAPI (NetscapeiPlanet) и другими;
▪ краткосрочность
выпускаются
новые
разработки.
версии
с
Каждые
несколько
месяцев
исправлением
найденных
ошибок,
дополнительными функциями и прочими усовершенствованиями;
▪ доброжелательные
и
энергичные
разработчики.
Множество
бесплатного кода и программных примеров. Группа разработчиков РНР
хорошо справляется с поддержкой и обеспечением новичков ресурсами;
▪ простота расширения. Имеется возможность легкого создания
собственных расширений языка;
▪ простой синтаксис.
ASP
(ActiveServerPages)
представляет
собой
фирменный
язык
сценариев Microsoft. Если быть точнее, ASP – это не язык, а расширение
VisualBasic для формирования сценариев. По этой причине любому, кто
знаком с VisualBasic, относительно нетрудно в освоении ASP.
Рассмотрим основные недостатки данного языка. Во-первых, ASP
обычно работает медленнее, чем РНР. Фундамент ASP образует архитектура,
основанная на СОМ. Поэтому, обращение программы ASP к базе данных или
осуществление вывода данных для клиента происходит при посредстве
СОМ-объектов других сервисов NT или уровней операционной системы.
Связанные с СОМ
расходы могут накапливаться и приводить к
невысокой производительности во всех случаях, кроме выдачи простых
страниц при среднем трафике. Во-вторых, для переноса на другие платформы
и интеграции со средствами GNU, а также средами и серверами opensource,
ASP не вполне годится.
Являясь фирменной системой Microsoft, ASP чаще всего применяется с
Internet Information Server (IIS). Из-за этого ASP обычно выбирают
15
ограниченно - для 32-разрядных систем Windows, потому как для
большинства серверов эта технология служит бесплатным приложением.
Известны разные версии ASP для UNIX (к примеру, ChilliSoft ASP) и серию
интерпретаторов ASP для иных систем и web-серверов, однако для них
стоимость
системы
завышенной.
с
учетом
Решением
данной
ее
производительности
проблемы
является
может
стать
использование
программы asp2php, которая преобразует ASP в РНР.
Однако технология ASP.NET имеет существенные отличия. В будущем
ASP может значительно поднять возможность масштабирования и свою
производительность.
Это
будет
достигнуто
усилением
архитектуры
.NET/COM и управляющей среды. Впрочем реальных преимуществ можно
достичь лишь при условии больших затрат на различные сопутствующие
серверы.
Перейдем к выбору системы управления базами данных.
В качестве СУБД выбираем MySQL. Выбор данного продукта
обусловлен следующими преимуществами:
1.
Хранимые процедуры и триггеры. Благодаря поддержке СУБД
механизма триггеров и хранимых процедур возможен перенос части
вычислительной нагрузки по обработке данных на сервер,
что слегка
снижает сетевой трафик и облегчает модернизацию ПО.
2.
Средства создания приложений СУБД. Для своих систем
большинство
производителей
СУБД
выпускают
средства
разработки
приложений. Обычно, такие средства дают возможность наилучшим образом
реализовывать все возможности сервера БД, поэтому стоит рассмотреть
также возможности средств разработки приложений при анализе СУБД.
В MS SQL Server следует обратить особое внимание на основное
средство разработки и администрирования, которое включено в состав
дистрибутива - EnterpriseManager, который позволяет решать практически
весь список задач администрирования MS SQL Server, и к тому же удобен
для разработчика.
16
В InterBase средство разработки и администрирования, поставляемое в
составе
дистрибутива
(Interbase
Console)
обладает
необходимой
функциональностью, но при этом имеет некоторые неудобства. Поэтому,
существуют более удобные средства разработки и администрирования,
созданные сторонними разработчиками, такие как IB Expert, EMS IBManager.
Средства
приложение
разработки
MySQL
и
администрирования
Workbench.
Но
при
MySQL
желании
воспользоваться продуктами сторонних разработчиков:
входят
можно
в
также
EMS MySQL
Manager, WinSQL, PHP Admin.
3.
Многообразие операционных систем, под управлением которых
способна работать СУБД. Безусловно, как показано в табл. 1.2, в этой
категории
лидирует
MySQL,
способная
работать
под
управлением
большинства из имеющихся на данный момент операционных систем [7].
Таблица 1.2
ОС для СУБД
СУБД
ОС
InterBase
Windows XP/VISTA/8/10 и Linux-системы
MS SQL Server
Windows XP/VISTA/8/10(Intel и Alpha)
Linux (x86, libc6,S/390,IA64, Alpha, Sparc),
Windows XP/VISTA/8/10,
Solaris 2.9 (Sparc, 64-bit, 32-bit),
FreeBSD 4.x ELF (x86),
MySQL
Mac OS X v10.2,
HP-UX 10.20 (RISC 1.0),
HP-UX 11.11 (PA-RISC 1.1 или 2.0),
AIX 5.1 (RS6000),
QNX 6.2.0 (x86).
17
Опишем минимальные требования к серверу базы данных в табл. 1.3.
Таблица 1.3
Минимальные требования к серверу БД
СУБД
Сервер
Процессоры Intel x86 or Intel x86-64,
InterBase12.0
ОЗУ – 1Гбайт, 350 Мбайт свободного места на диске.
Процессор x64 с тактовой частотой 1,4 ГГц,
MS SQL Server 2016
ОЗУ – 1Гбайт, 6 Гбайт свободного места на диске
Процессоры Intel x86 or Intel x86-64, ОЗУ - 768 Мбайт,
MySQL 5.5
4.
100 Мбайт свободного места на диске
Производительность. Для сравнительного исследования СУБД,
была создана база данных TEST_DB после установки на каждой из них
встроенными средствами администрирования, в которую помещалась одна
таблица под именем TEST_TABLE (NUM: INTEGER; FIO_B: CHAR;
NUM_CARD: INTEGER; NUM_POLUS: INTEGER; POL: CHAR; AGE_B:
INTEGER; BORN_B: INTEGER; ADRESS_H: CHAR; TEL_H: INTEGER;
ADRESS_R: CHAR; TEL_R: INTEGER; MED_PLACE: CHAR; VID_POS:
CHAR; VID_BOL: CHAR; STATUS: CHAR; LGOTA: CHAR; VID_DOC:
CHAR; FIO_DOC: CHAR; TDATE: DATE; VID_MON: INTEGER), которая
содержала 20 столбцов и 28096 строк записей. В этой таблице находилась
информация о выданных больничных листах, как пример реальной
практической задачи.
Данные таблицы генерировались случайным образом. Для выполнения
исследования использовалась программа SERVERTESTER, разработанная с
использованием C++Builder6.0 и технологии dbExpress.
В ходе исследования для каждого из тестируемого сервера БД,
указанная программа по команде пользователя, последовательно, в течение
18
одной сессии выполняла все указанные в табл. 1.5 SQL-запросы, и измеряла
их время выполнения в м/сек. Затем, сессия снова повторялась. Количество
повторов
было
равно
20.
Результаты
каждого
теста
записывались
программой в журнал работы, который затем обрабатывался – было
вычислено среднее значение времени выполнения каждого запроса.
Для исследования динамики работы серверов СУБД на используемом
при тестировании компьютере запускалось программное обеспечение
SystemMonitor, в котором был включен один счетчик, показывающий
процент загруженности процессора. Работа счетчика начиналась сначала
перед началом каждого теста. После окончания теста фиксировались средний
и максимальный проценты использования процессора. Затем они вносились в
журнал работы программы тестирования вручную.
Для тестирования текст SQL-запросов подбирался таким образом,
чтобы исследовать эффективность разных механизмов СУБД: безусловный
запрос (характеризует скорость доступа к данным), запрос с простым
условием (характеризует скорость отбора данных по условию), и запрос с
агрегатной
функцией
и
группировкой
(характеризует
эффективность
выполнения вычислений). Результаты сведены в табл. 1.4.
Таблица 1.4
SQL -запросы тестирования
№ Название запроса
SQL запрос
1 Простой Select
SELECT * FROM TEST_TABLE
2 Выбор больных, которые
обращались до 20.01.05
SELECT FIO_B,NUM_CARD, FROM
TEST_TABLE WHERE TDATE<’20.01.05’
3 Выбор среднего по возрасту SELECT FIO_BOL, AVG(AGE_B),VID_POS
больного, по группам цели FROM TEST_TABLE GROUP BY VID_POS
посещения
19
Для следующих таблиц, в которых рассматриваются результаты
выполнения запросов, опишем обозначения:
1.
U – количество пользователей, подключенных к СУБД;
2.
P av – средняя загрузка процессора;
3.
P max – максимальная загрузка процессора;
4.
D – длительность выполнения запроса, м/сек.
Таблица 1.5
Результаты выполнения запроса №1
Тест
U=1
D
U=2
P av P max
D
U=3
P av P max
D
P av P max
MySQL
5450,8
5608,2
6011,4
14,3 46,88
28,8 64,3
41,3 62,2
(±66,5)
(±71,8)
(±68,0)
MS SQL Server
5237,2
5721,7
6387,3
7,5 32,8
61,2 83,7
91 100
(±42,0)
(±20,4)
(±54,7)
InterBase
6304,3
28
(±38,3)
51
6273,4
63
(±23,2)
98
6222,9
86 100
(±50,9)
Таблица 1.6
Результаты выполнения запроса №2
Тест
U=1
D
MySQL
P av P max
U=2
D
P av P max
U=3
D
P av P max
163,0
155,3
153,7
14,3 46,88
28,8 64,3
41,3 62,2
(±3,2)
(±4,0)
(±14,5)
153 ,3
233,9
340,8
30,1 92
73,5 100
97 100
MS SQL Server (±10,9)
(±21,7)
(±20,3)
184,8
192,8
201,1
InterBase
28 51
63 98
86 100
(±3,4)
( ±4,0)
(±5,9)
20
Таблица 1.7
Результаты выполнения запроса №3
Тест
U=1
U=2
U=3
D P av P max D P av P max
D
P av P max
MySQL
89,0
85,3
68,3
14,3 46,88
28,8 64,3
41,3 62,2
(±2,9)
(±9,4)
(±2,7)
MS SQL Server
58,9
85,5
172,3
30,1 92
73,5 100
97 100
(±3,4)
(±7,6)
(±19,9)
MySQL
94,9
28
(±2,8)
Разумеется,
показанные
51
90,6
63
(±4,2)
результаты
98
91,9
86 100
(±3,4)
тестирования
отражают
производительность СУБД, эффективность средств работы с данными в
среде программирования, эффективность способов взаимодействия между
сервером БД и клиентским приложением. В итоге, в рамках одного теста
можно сделать вывод о предпочтительности той или иной СУБД,
проанализировав относительные результаты.
5.
Некоторые особенности. Главное преимущество MS SQL Server
заключается в тесной интеграции ее с другими программными разработками
от Microsoft. MS SQL Server активно использует решения на базе СОМ
технологии. Данная СУБД отлично интегрируется как с MS Exchange, так и с
Microsoft Internet Information Server.
Несмотря на это, исключительное преимущество этой СУБД перед
другими - это возможность импорта и экспорта в большую часть известных
форматов данных, что включает как клиент-серверные и файл-серверные, так
и XML форматы. В качестве приемников и источников данных выступают
драйвера OLEDB. А если драйвер OLEDB отсутствует, для нужного
источника данных разрешается использование драйвера OLEDB для ODBC.
Это позволяет производить импорт-экспорт почти в любой формат данных. И
все это благодаря инструментарию, который входит в состав дистрибутива.
21
Эта возможность позволяет использование MS SQL Server в качестве
централизованного хранилища данных как в OLTP, так и в OLAP-системах.
Основываясь на данном анализе, в качестве СУБД выбираем MySQL.
Подводя итог выше сказанному, в качестве средств реализации
выбираем язык программирования - PHP, web-сервер - Apache, СУБД MySQL.
1.5 Назначение и процесс создания Интернет-магазина
Цель разработки Интернет-магазина по продаже мебели для магазина
«Мебельные решения» условно можно разделить на две группы подцелей:
Первая
группа
связана
с
достижением
улучшения
многих
экономических показателей работы организации, а именно:
-
повышение эффективности работы с поставщиками;
-
увеличение количества обслуживаемых клиентов;
-
расширение ассортимента продаваемой продукции.
Вторая группа связана с улучшением показателей качества обработки
информации, а именно:
•
сокращение времени обработки и получения данных для
принятия управленческих решений;
•
увеличение количества аналитических показателей, получаемых
на базе данных;
•
повышение
степени
автоматизации
получения
первичной
информации;
•
повышение степени достоверности обработки информации.
Назначение магазина в Интернете совпадает с назначением его
традиционного "коллеги". Интернет-магазин должен продавать товары
компании через Интернет. Следует помнить, что издержки на содержание
магазина в Интернете могут сравниться с издержками на содержание
22
обычного магазина, однако, Интернет-магазин обладает рядом значимых
преимуществ. К тому же, расходы на поддержку и создание работы
Интернет-магазина ниже обычных.
Опишем некоторые преимущества Интернет-магазина. В этом списке
важен такой фактор, как отсутствие поиска "доходного места", ведь для
магазина в Интернете все "места" одинаковы.
Также, работа Интернет-
магазина не зависит от возможности работы реального магазина (например,
ремонт торгового помещения). Интернет-магазин открыт 24 часа в сутки/365
дней в году.
Виртуальная работа позволяет отказаться от растрат на
содержание торговых менеджеров в зале, а также дает возможность
презентовать товар, которого нет в наличии на складе. Создание Интернетмагазина позволяет постоянно расширять спектр услуг и товаров в одном
«помещении».
Описывая процесс создания Интернет-магазина, можно с уверенностью
сказать, что основа онлайн-магазина – это каталог товаров и система
управления публикацией этого каталога на сайте. Изначально необходимо
создать строго классифицированный и грамотный каталог товаров. В этом
процессе необходимо обратиться за помощью к квалифицированным
товароведам предприятия [8].
На следующем шаге необходимо сканировать изображения товаров и
добавлять к ним описание. Эта работа не требует профессиональных
навыков, но она также играет важную роль и требует большого труда по
созданию каталога.
Структура каталога во многом окажет влияние на общую структуру
Интернет-магазина. Но, даже если товар будет размещен правильно, согласно
принятой в отрасли товарной номенклатуре, это не дает гарантии удобства
поиска для клиентов. Приступая к созданию сайта, необходимо учитывать
систематизацию товаров, сложившуюся у клиентов организации.
В процессе создания каталога товаров требуется изучить фирменные
классификаторы. Если использовать их в качестве какого-то стандарта
23
отрасли сразу, то на этом этапе станет заметно, что названия некоторых
разделов абсолютно ни о чем не говорят клиенту. Как правило, следует
избегать некорректных, непонятных потребителю классификаторов. Именно
поэтому
рекомендуют
совмещать
бытовые
характеристики
с
классификациями, принятыми у производителей товаров.
Структура Интернет-магазина не должна ограничиваться товарными
категориями, следует добавить разделы с информацией об Интернетмагазине, помощь клиентам в навигации и покупке, различные советники и
подсказчики.
Одним из важных элементов сайта является форум покупателей. Это
связано, к сожалению, с психологией покупателей. Нередки случаи, когда из
сотни безукоризненно обслуженных клиентов находится лишь один, который
выразит свою благодарность. А из десятка не обслуженных по каким-то
причинам покупателей, почти каждый выложит рекламацию в отзывах.
При создании магазина в Интернете следует обратить внимание на
дизайн сайта. В наше время в Интернет-магазинах можно купить
практически все. Даже если в онлайн-магазине будет продаваться товар,
которого никто еще не продает, то через время обязательно появятся
конкуренты. Именно в таком случае особую значимость приобретает
впечатление клиента от внешнего вида сайта магазина.
Ценовая политика и качество сервиса таким же образом являются
очень важными компонентами. Но необходимо помнить, что навигация сайта
должна быть понятна и дружелюбна, достаточно ли хорошо читается текст
меню и описаний, какое впечатление производят графические элементы и
цветовая гамма сайта.
Основное правило создания интерфейса Интернет-магазинов – это
функциональность. Главная задача web-дизайнера состоит в придании
онлайн-магазину характерный и привлекательный внешний вид, при этом
сохранив его функциональность [9].
24
Следующий шаг – отображение продукции из созданного каталога
товаров на сайте Интернет-магазина и организация управления сайтом. Для
достижения этой цели требуется некоторый механизм, дающий возможность
отображать на сайте товары и группу товаров, определять место отображения
(каталог,
рекламное
предложение,
витрина)
и
метод
представления
(название, описание, цена, фотографии, размеры и др.).
Управление сайтом следует доверять специалисту, обладающему
знаниями в Интернет-технологиях на достаточном уровне.
Разработка и модернизация описанного механизма, продолжается
также после открытия онлайн-магазина по причине возникновения новых
задач, например, модерация форума, проведение конкурсов и акций,
различные распродажи и т. п.
На следующем шаге необходимо рассмотреть вопрос приема и
обработки данных о намерениях клиентов.
Как правило, процесс приобретения товаров в онлайн-магазине
проходит в три этапа: поиск требуемого товара, перенесение выбранного
товара в корзину, оформление заказа. Все эти этапы проходят на сайте
Интернет-магазина и в голове покупателя. Главная задача заключается в
нажатии покупателем кнопки «оформить заказ», затем информация о заказе и
содержимом корзины клиента придет к менеджерам.
Конкретное место попадание данных о заказе и дальнейшие действия с
ними зависят от конструкции части онлайн-магазина, называемой BackOffice.
Эта часть чрезвычайно необходима и полезна, несмотря на странное название
и достаточно расплывчатые границы, кроме этого, при интенсивной торговле
(например, более 35–45 заказов в день) заменить ее может только большое
число менеджеров, которые могут потерять заказы и, таким образом,
клиентов. Грамотно построенный BackOffice должен включать в себя как
базу покупателей с их историей кредита, так и базу данных полученных
заказов с отметкой об их выполнении [10].
25
Приспособление
или
разработка
всех
программ,
входящих
в
BackOffice, требует значительной части работы разработчиков, товароведов,
бухгалтеров и программистов. Тем не менее, как раз эта часть онлайнмагазина в дальнейшем окажет влияние на то, насколько серьезно
организация воспользуется теми преимуществами, которые дает Интернеткоммерция.
Вслед за готовностью макета Интернет-магазина следует выбор
компании, предоставляющей хостинг. При этом надо учесть следующие
факторы:
•
возможность запуска на сервере php-скриптов (программное
обеспечение Интернет–магазина – это набор php-скриптов);
•
возможность предоставления почтового ящика (если да, то
сколько);
•
пропускная
способность
канала
(выдержит
ли
сервер
запланированный наплыв посетителей и потребуется ли дополнительная
плата за перенос на другой сервер в случае превышения количества
посетителей).
Правильнее будет размещать Интернет–магазин на сервере с запасом
по количеству посетителей в день (час, минуту), так как сервер может не
выдержать нагрузку, что в итоге приведет к потере потенциальных
покупателей, а значит и денежные средства. Таким образом, можно коротко
описать процесс образования онлайн-магазина. На каждом этапе может
появиться огромное число технических трудностей и вопросов, которые
можно устранить совершенно разными путями.
Онлайн-магазин является единой системой, где процессы, которые
совершаются
на
Интернет-сайте,
торгового предприятия [12].
интегрированы
в
бизнес-процессы
26
ГЛАВА 2 ПРОЕКТИРОВАНИЕ ИНТЕРНЕТ-МАГАЗИНА
«МЕБЕЛЬНЫЕ РЕШЕНИЯ»
2.1 Информационная модель и обеспечение комплекса задач
Информационное
обеспечение
в
каждой
системе
управления
основывается на определении информационной базы, представляющей собой
сочетание
упорядоченной
информации,
которая
используется
при
функционировании информационной системы, а также взаимосвязанность
разных составных частей этой информации. При этом совокупность
упорядоченной информации должна соответствовать требованиям тех задач
по содержанию и составу, которые решаются на ее основе. Информационная
база имеет влияние на эффективность всей системы, возможность решения
функциональных задач и т.д.
В составе информационной базы имеются:
•
массивы постоянной нормативно-справочной информации;
•
массивы, которые содержат текущие данные о состоянии
управляемого объекта;
•
массивы, содержащие данные, поступающие из внешней среды;
•
массивы,
в
составе
которых
накапливаются
данные
за
определенный промежуток времени.
Информационное
разделить
на
обеспечению
обеспечение
внутримашинное
относят
и
фрагмент
организации
внемашинное.
символично
К
можно
внемашинному
информационного
обеспечения,
представляющего собой совокупность сообщений, документов и сигналов,
которые используются в форме при работе автоматизированной системы
управления, что воспринимается человеком без применения средств
вычислительной
техники.
К
внутримашинному
относят
ту
часть
27
информационного обеспечения, которая представляет собой совокупность
данных, используемых в АСУ, и фиксируется на машинных носителях
системы.
Главная
задача
организации
информационного
обеспечения
заключается в адекватном отображении объекта управления и обеспечении
информационных потребностей функциональных задач управления, а в
данном
случае,
потребностей
задачи
разработки
Интернет-магазин
мебельной торговой организации.
В соответствии с методологией IDEF0, которая может применяться для
моделирования
широкого
класса
систем,
построим
диаграммы
разрабатываемого Интернет-магазина. На рис. 2.1 показана контекстная
диаграмма Интернет-магазина [14].
Рис. 2.1. Контекстная диаграмма Интернет-магазина предприятия
«Мебельные решения»
28
Из данной диаграммы видно, что входными объектами проектируемой
системы являются данные пользователя, разделы каталога и информация о
заказе.
Выходными объектами проектируемой системы являются каталог
товаров, личный кабинет пользователя, корзина заказов, данные о заказе и
отчеты.
В качестве управления используется каталог фирмы, распоряжения
бухгалтерии и законодательные акты, а в качестве механизмов, необходимых
для выполнения работы выступают администратор и менеджеры.
После обобщенного описания системы проводится ее разбиение на
крупные фрагменты, что называется функциональной декомпозицией.
При детализации контекстной диаграммы разрабатываемой системы
можно выделить следующие основные функции, которые выполняет
Интернет-магазин:
▪
ведение каталога;
▪
ведение базы клиентов;
▪
учет заказов;
▪
администрирование.
Рассмотрим
накопители
данных.
Накопитель
данных
является
абстрактным устройством для хранения информации, которую можно
поместить в любой момент и через некоторое время извлечь. В
разрабатываемой АИС определены следующие накопители данных:
•
«Категории товаров» - содержит информацию о разделах
Интернет-магазина;
•
«Товары» - представляет собой хранилище информации о
товарах;
•
«Заказы» - содержит сведения о заказах;
•
«Клиенты»
-
предназначается
зарегистрированных клиентах на сайте.
для
хранения
сведений
о
29
Рассмотрим потоки данных. Поток данных определяют информацию,
передаваемую через некоторое соединение от источника к приемнику. В
Интернет-магазине можно выделить следующие потоки данных:
✓
новая категория товаров;
✓
новый товар;
✓
структура каталога;
✓
информация о товаре;
✓
прайс-лист;
✓
запрос на создание нового пользователя;
✓
данные клиента;
✓
новый заказ;
✓
корзины пользователей;
✓
данные пользователя.
Диаграмма потоков данных представлена на рис. 2.2.
Рис. 2.2. Диаграмма потоков данных
30
2.2 Проектирование логической и физической моделей БД
Логическая модель включает описания объектов базы данных и их
взаимосвязей, представляющих интерес в рассматриваемой предметной
области и выявляемых в результате анализа данных. Логическая модель
создается без привязки к способам физического хранения объектов БД.
Следовательно, основное предназначение логической модели базы данных –
это описание предметной области будущей БД и выделение основных
объектов и признаков в ней, по которым можно различать экземпляры этих
объектов.
На основании технического задания были выделены следующие
сущности проектируемой БД:
1.
«Категории товаров» с атрибутами: код категории, название
раздела, ссылка на изображение категории, дата добавления категории,
порядок вывода, описание и дополнительная информация.
2.
«Товар» с атрибутами: код товара, код категории, название
товара, модель, цена по прайсу, изображение товара для предварительного
просмотра, доступное количество единиц товара, дата добавления товара в
каталог, статус товара, описание товара, величина скидки, количество
голосов пользователей, количество просмотров товара (рейтинг).
3.
«Заказ» с атрибутами: код заказа, код покупателя, выполнившего
заказ, дата поступления заказа, статус заказа, метод доставки, стоимость
доставки, дата выполнения заказа, валюта, адресные данные доставки.
4.
«Сведения о заказе» с атрибутами: код заказа, код товара, дата
добавления, название товара, модель, цена, кол-во единиц товара в заказе,
скидка, налог и общая сумма заказа.
5.
«Производитель» c атрибутами: код производителя, название,
ссылка на логотип, дата добавления.
31
6.
«Покупатель» (зарегистрированный пользователь) c атрибутами:
код покупателя, логин, пароль, электронный адрес, дата регистрации, дата и
время последней авторизации на сайте, фамилия, имя, отчество, адрес,
телефон, факс.
Связи между сущностями отражены на логической модели базы
данных
автоматизированной
системы
Интернет-магазина
«Мебельные
решения» на рис. 2.3.
Рис.2.3. Логическая модель базы данных Интернет-магазина
«Мебельные решения»
Физическая модель БД строится на основе логической. Ее основным
назначением является определение физического размещения данных,
методов доступа и техники индексирования и будущих объемов БД. Исходя
32
из этого, под физическим проектированием понимается определение
количества и размеров файлов данных, определение табличных пространств,
методик хранения и доступа к данным БД [15].
На рис. 2.4 рассматривается таблица категорий товаров.
Рис. 2.4. Таблица категорий товаров
В состав данной таблицы входят:
▪
categories_id – идентификатор раздела каталога;
▪
categories_name – название категории;
▪
categories_image – ссылка на изображение раздела;
▪
parent_id
–
идентификатор
вышестоящей
категории
подкатегорий;
▪
sort_order – порядок сортировки категории и подкатегорий;
▪
date_added – дата добавления раздела в каталог;
▪
last_modified – дата внесения изменений.
На рис. 2.5 показана таблица заказов.
Рис. 2.5. Таблица заказов
для
33
Состав таблицы заказов:
•
orders_id – идентификатор заказа;
•
customers_id – идентификатор покупателя;
•
shipping_method – метод доставки;
•
payment_method – метод оплаты;
•
date_purchased – дата добавления в заказ;
•
status – статус заказа;
•
date_finished – дата выполнения заказа;
•
currency – валюта заказа;
•
shipping_address – адрес доставки;
На рис. 2.6 продемонстрирована таблица товаров Интернет-магазина
«Мебельные решения».
Рис. 2.6. Таблица товаров Интернет-магазина
Элементы таблицы товаров магазина:
▪ categories_id – идентификатор товара;
▪ manufacturers_id – идентификатор произвдителя;
▪ name – название товара;
▪ quantity – доступно единиц товара;
34
▪ model – модель;
▪ image – ссылка на изображение;
▪ price –
▪ date_added – цена в прайсе;
▪ status – статус товара;
▪ viewed – количество просмотров товара;
▪ description – описание товара.
В таблице заказанных товаров фигурируют информационные элементы
заказа (рис. 2.7).
Рис. 2.7. Таблица заказанных товаров
Состав таблицы заказанных товаров:
▪
orders_products_id – идентификатор элемента заказа;
▪
orders_id – идентификатор заказа;
▪
products_id – идентификатор товара;
▪
model – модель;
▪
name – название;
▪
price – цена;
▪
tax – налог;
▪
quantity – количество;
35
▪
summa – общая сумма.
Вид таблицы производителей представлен на рис. 2.8.
Рис. 2.8. Таблица производителей товаров
Рассмотрим состав таблицы производителей. Она включает в себя:
•
manufacturers_id – идентификатор производителя;
•
name – название производителя;
•
image – ссылка на изображение;
•
url – ссылка на сайт производителя;
•
date_added – дата добавления.
Следующая рассматриваемая таблица – таблица конфигурационных
параметров, в которую входит идентификатор параметра, его название и
значение (рис. 2.9).
Рис. 2.9. Таблица конфигурационных параметров
36
В базе данных имеется таблица для данных зарегистрированных
покупателей (рис. 2.10).
Рис. 2.10. Таблица зарегистрированных покупателей
В представленной выше таблице имеются личные данные клиентов, а
также:
▪
customers_id – идентификатор покупателя;
▪
date_of_last_logon – дата последней регистрации;
▪
number_of_logons – количество;
▪
date_account_created – дата создания пользователя.
В таблице администраторов и менеджеров содержится идентификатор
пользователя, его логин и пароль (рис. 2.11).
Рис. 2.11. Таблица администраторов и менеджеров Интернет-магазина
37
SQL-скрипт создания базы данных приведен в приложении.
Общий вид физической базы данных Интернет-магазина представлен
на рис. 2.12.
Рис. 2.12. Физическая модель базы данных Интернет-магазина «Мебельные
решения»
2.3 Функции модулей сайта и сценарии диалогов подсистем
Программное обеспечение сайта включает в себя две основных,
связанных между собой, подсистемы:
•
Пользовательская часть сайта (Интернет-магазин);
•
Администраторский модуль.
Дерево функций администраторского модуля приведено на рис. 2.13.
38
Рис. 2.13. Дерево функций администраторской подсистемы
Дерево функций клиентской части сайта приведено на рис. 2.14.
Рис. 2.14. Дерево функций клиентской подсистемы сайта
39
Сценарий диалога администраторской подсистемы при работе с
каталогом товаров представлен на рис. 2.15.
Рис. 2.15.Администрирование каталога товаров
Сценарий диалога администраторской подсистемы при работе с
заказами представлен на рис. 2.16.
Рис. 2.16. Администрирование заказов
40
Сценарий диалога клиентской подсистемы при работе с заказами
представлен на рис. 2.17.
Рис. 2.17. Сценарий работы клиента на сайте
2.4 Описание программных модулей
Подсистема администрирования включает следующие модули:
•
categories.php - позволяет менеджеру или администратору
добавлять, удалять или редактировать разделы каталога. Тип операции
определяется
update_category;
параметром
action:
insert_category,
delete_category,
41
•
orders_status.php - позволяет менеджеру или администратору
добавлять, удалять или редактировать статусы заказов магазина;
•
products.php
позволяет
-
менеджеру
или
администратору
добавлять, удалять или редактировать товары;
•
products_attributes.php
-
позволяет
менеджеру
или
администратору просматривать список продуктов с данными. На странице
также присутствуют ссылки для редактирования и удаления товара;
•
orders.php
-
позволяет
администратору
или
менеджеру
просматривать и редактировать заказы по имени заказчика, статусу или
номеру заказа. Право удаления заказа есть только у администратора;
•
manufacturers.php - позволяет администратору или менеджеру
добавлять и редактировать данные производителей товаров;
•
customers.php - данный модуль отображает полную информацию
о пользователе, позволяет администратору активизировать или отключить
учетную запись, поменять роли пользователя и изменить личный профиль
пользователя;
•
login.php – модуль входа в подсистему;
•
configuration.php – модуль для управления настройками системы.
Клиентская часть сайта включает модули php, названия и функции
которых следующие:
▪
account.php – модуль функций личного кабинета;
▪
create_account.php
–
позволяет
новым
пользователям
регистрироваться, вторым шагом после регистрации является заполнение
данных профиля пользователя. Заполняются данные: имя, фамилия,
физическое или юридическое лицо, дата рождения, адрес, телефон, факс;
▪
shopping_cart.php
–
элемент управления, который отображает
текущее содержимое корзины, включая наименование, количество товаров и
их итоговую сумму;
▪
checkout_shipping.php – модуль оформления заказа;
42
▪
index.php – главная страница клиентской части, которая
отображает список категорий и товаров;
▪
product_reviews.php – вывод подробной информации о товаре;
▪
order.php – скрипт вывода формы информации о заказах;
▪
search.php – скрипт обработки поиска;
▪
stylesheet.css – таблица стилей сайта;
▪
contact_us.php – информационная страница с обратной связью;
▪
shipping.php
–
информационная страница о правилах доставки
товаров.
Фрагменты исходного кода модулей и скриптов приведены в
приложении.
2.5 Технологическое обеспечение
Пользователи «Клиент» работают с клиентской частью сайта. В
процессе работы требуется внести информацию:
•
создание личного кабинета;
•
внесение данных о способе оплаты;
•
создание заказов;
•
добавление товаров в корзину (заказ);
•
подтверждение оплаты и получения заказа.
Пользователи «Администратор» вносят следующую информацию:
▪
данные о структуре каталога;
▪
данные о товарах;
▪
данные информационного наполнения сайта;
▪
обработка заказов (подтверждение оплаты, изменение статуса
заказов, извещение клиентов);
▪
редактирование пользователей.
43
На рис. 2.18 представлена схема технологического сбора, передачи,
обработки и выдачи ифнормации.
Рис. 2.18. Взаимосвязь программного и информационного обеспечения
Общие
возможности
администратора
продемонстрировать с помощью схемы (рис. 2.19).
Рис. 2.19. Схема работы системы
на
сайте
легко
44
ГЛАВА 3 АПРОБАЦИЯ WEB-ПРИЛОЖЕНИЯ
3.1 Описание интерфейса пользователя
Стартовая страница web-представительства «Мебельные решения»
показана на рис. 3.1. На ней отображено краткое приветствие и расположены
две ссылки: на форму входа в Интернет-магазин и на форму регистрации.
Рис. 3.1. Главная страница сайта
Страница данных регистрированного клиента показана на рис. 3.2.
Рис. 3.2. Личный кабинет
45
Пользователь, зайдя на главную страницу сайта, может создать свой
личный кабинет, и внести данные о себе и способах оплаты (рис. 3.3).
Рис. 3.3. Заполнение учетной карточки
Далее пользователь переходит в раздел каталога и выбирает нужные
ему товары в свою корзину, нажав на ссылку «Купить» (рис. 3.4).
Рис. 3.4. Выбор товаров
46
Пользователь также может просмотреть подробную информацию о
товаре (рис. 3.5).
Рис. 3.5. Подробная информация о выбранном товаре
Далее пользователь может редактировать свой
заказ, изменяя
количество выбранных товаров или удаляя ненужные товары (рис. 3.6).
Рис. 3.6. Редактирование корзины
47
После нажатия на кнопку «Оформить» начинается процесс
пошагового оформления заказа. На первом шаге выводится информация о
заказе и уточняется адрес доставки (рис. 3.7).
Рис. 3.7. Оформление заказа
После
подтверждения
заказа
пользователь
производит
выбранным способом и сообщает об оплате (рис. 3.8).
Рис. 3.8. Выбор способа оплаты заказа
оплату
48
Финальная информация о заказе товара показана на рис. 3.9.
Рис. 3.9. Подтверждение заказа
Уведомление об оформлении заказа покупателя демонстрируется на
рис. 3.10.
Рис. 3.10. Заключительный шаг в оформлении заказа
Пользователь может узнать о состоянии заказа на сайте в разделе
своего личного кабинета, либо, получив извещение на e-mail.
49
3.2 Описание интерфейса администратора
Вход в администраторский интерфейс представлен на рис. 3.11.
Рис. 3.11. Вход в администраторский интерфейс
Администраторский интерфейс имеет главное меню, которое позволяет
перейти к любому разделу настройки Интернет-магазина (рис. 3.12).
Рис. 3.12. Главное меню администратора
50
Товары представлены в виде дерева по категориям (рис. 3.13).
Рис. 3.13. Отображение категорий сайта
При необходимости можно сделать более разветвлённую структуру
категорий и подкатегорий. Отображение товаров в категориях представлено
на рис. 3.14.
Рис. 3.14. Отображение товаров
Для добавления нового товара используется форма, которая показана
на рис. 3.15.
51
Рис. 3.15. Форма для ввода информации о новом товаре
Страница просмотра информации о заказе показана на рис. 3.16.
Рис. 3.16. Информация о заказе
52
ЗАКЛЮЧЕНИЕ
В результате выполнения дипломного проекта было создано webпредставительство для предприятия «Мебельные решения». Разработанный
продукт удовлетворяет поставленным целям и охватывает полный спектр
задач, основными из которых являются:
•
предоставление
исчерпывающей
информации
о
магазине
«Мебельные решения»;
•
реализация средств для размещения каталогов и прайс-листов
фирмы;
•
реализация средств оформления заказов.
Внедрение дополнительной услуги для предприятия «Мебельные
решения» экономически обоснованно и помимо быстрой окупаемости
проекта повысит рейтинг и получение дополнительной прибыли фирмы за
счет:
•
дополнительного круглосуточного канала сбыта товаров;
•
удобного сервиса для потребителей, позволяющего ознакомиться
с перечнем товаров, совершить резервирование или покупку товаров в
реальном времени, используя различные варианты доставки;
•
логично
представленная
информация
позволит
клиенту
самостоятельно найти интересующий его товар.
К недостаткам Интернет-магазина «Мебельные решения» можно
отнести нереализованное автоматическое резервное копирование БД и
отсутствие отображения на главной странице новых товаров.
53
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
Создание Интернет-магазина. Часть 1 – ТЭО: [электронный
1.
ресурс]
-
(URL:
https://www.amiro.ru/company/onpress/sozdanie-internet-
magazina-chast-1);
2.
Создание
мебельного
Интернет-магазина
«Визит-Мебель»:
[электронный ресурс] - (URL: http://www.bs-ol.ru/portfolio/shop_www-vizitmebel-ru_mebelnyj_internet-magazin.php);
3.
Интернет-магазин офисной мебели «Vior»: [электронный ресурс]
- (URL: http://vior.ru/);
4.
Система управления контентом Simpla: [электронный ресурс] –
(URL: http://simplacms.ru/);
5.
Интернет-магазин «Lazurit»: [электронный ресурс] - (URL:
https://belgorod.lazurit.com/);
6.
Аргерих Л. и др. Профессиональное РНР программирование, 2-е
издание. - Пер. с англ. - СПб: Символ-Плюс, 2003. - 1048 с., ил.;
7.
Розанов М.С., Михелёв М.В.,Артеменко А.В. К вопросу о выборе
СУБД при создании информационных систем: [электронный ресурс] – (URL:
http://conf.bstu.ru/conf/docs/0030/0743.doc);
8.
Методика создания Интернет-магазина: [электронный ресурс] -
(URL: http://www.phpshop.ru/info/ID_49.htm);
9.
Классификация
сайтов:
[электронный
ресурс]
-
(URL:
http://www.maxeff.org/site-classification);
10.
Орлов Л. В. Как создать электронный магазин в Интернет, 2-е
изд. – М.: Бук-пресс, 2006. – 384 с.;
11.
Вендров,
А.М.
Проектирование
программногообеспечения
экономических информационных систем: учебникдля экон. вузов / А. М.
Вендров. –М. : Финансы и статистика, 2007;
54
12.
Вендров,
А.М. Практикум по проектированиюпрограммного
обеспечения экономических информационных систем: учеб. пособие для
студентов вузов / А. М. Вендров. – М.: Финансы истатистика, 2009;
13.
Маклаков С.В. BFWin и ERWin. CASE-средства разработки
информационных систем. – М.: ДИАЛОГ-МИФИ, 2001;
14.
Черемных, С. В. Структурный анализ систем: IDEF-технологии /
С. В. Черемных, И. О. Семенов, В. С. Ручкин. – М.:Финансы и статистика,
2008;
15.
Грабер, М. SQL. Справочное руководство. – М.: Лори; Издание 2-
е, 2011. – 354 c.;
16.
Уилтон, П.,Колби, Д. SQL для начинающих.– М.: Вильямс, 2011.
– 496 c.;
17.
ДроновВ. PHP 5/6, MySQL 5/6 иDreamweaverCS4. Разработка
интерактивных Web-сайтов. – БХВ-Петербург - Москва, 2009. - 544 c.;
18.
Колисниченко Д. Н. PHP 5/6 и MySQL 6. Разработка Web-
приложений. – БХВ-Петербург - Москва, 2011. - 528 c.;
19.
Пейтон К., Меллер А. PHP 5 &MySQL 5. – Бином-Пресс -
Москва, 2009. - 366 c.;
20.
Ташков П. Web-мастеринг HTML, CSS, JavaScript, PHP, CMS,
AJAX, раскрутка. – Книга по Требованию - Москва, 2010. - 512 c.
55
ПРИЛОЖЕНИЯ
SQL-скрипт для создания таблиц в СУБД MySQL
CREATE DATABASE IF NOT EXISTS mebel;
USE mebel;
DROP TABLE IF EXISTS `administrators`;
CREATE TABLE `administrators` (
`id` int(11) NOT NULL auto_increment,
`user_name` varchar(32) NOT NULL,
`user_password` varchar(40) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `categories`;
CREATE TABLE `categories` (
`categories_id` int(11) NOT NULL auto_increment,
`categories_name` varchar(100) NOT NULL,
`categories_image` varchar(64) default NULL,
`parent_id` int(11) NOT NULL default '0',
`sort_order` int(3) default NULL,
`date_added` datetime default NULL,
`last_modified` datetime default NULL,
PRIMARY KEY (`categories_id`),
KEY `idx_categories_parent_id` (`parent_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `configuration`;
CREATE TABLE `configuration` (
`configuration_id` int(11) NOT NULL auto_increment,
`configuration_key` varchar(255) NOT NULL,
`configuration_value` varchar(255) NOT NULL,
PRIMARY KEY (`configuration_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `customers`;
CREATE TABLE `customers` (
`customers_id` int(11) NOT NULL auto_increment,
`lastname` varchar(32) NOT NULL,
`firstname` varchar(32) NOT NULL,
`secondname` varchar(32) NOT NULL,
`login` varchar(40) NOT NULL,
`password` varchar(40) NOT NULL,
`email` varchar(96) NOT NULL,
`telephone` varchar(32) NOT NULL,
`fax` varchar(32) default NULL,
`country` varchar(32) NOT NULL,
56
`postcode` varchar(10) NOT NULL,
`city` varchar(32) NOT NULL,
`address` varchar(100) NOT NULL,
`date_of_last_logon` datetime default NULL,
`number_of_logons` int(5) default NULL,
`date_account_created` datetime default NULL,
PRIMARY KEY (`customers_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `manufacturers`;
CREATE TABLE `manufacturers` (
`manufacturers_id` int(11) NOT NULL auto_increment,
`name` varchar(32) NOT NULL,
`image` varchar(64) default NULL,
`url` varchar(255) NOT NULL,
`date_added` datetime default NULL,
PRIMARY KEY (`manufacturers_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `orders`;
CREATE TABLE `orders` (
`orders_id` int(11) NOT NULL auto_increment,
`customers_id` int(11) NOT NULL,
`shipping_method` varchar(255) NOT NULL,
`payment_method` varchar(255) NOT NULL,
`date_purchased` datetime default NULL,
`status` int(5) NOT NULL,
`date_finished` datetime default NULL,
`currency` char(3) default NULL,
`shipping_address` varchar(255) NOT NULL,
PRIMARY KEY (`orders_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `orders_products`;
CREATE TABLE `orders_products` (
`orders_products_id` int(11) NOT NULL auto_increment,
`orders_id` int(11) NOT NULL,
`products_id` int(11) NOT NULL,
`model` varchar(12) default NULL,
`name` varchar(64) NOT NULL,
`price` decimal(15,4) NOT NULL,
`tax` decimal(7,4) NOT NULL,
`quantity` int(2) NOT NULL,
`summa` decimal(15,4) NOT NULL,
PRIMARY KEY (`orders_products_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
DROP TABLE IF EXISTS `products`;
CREATE TABLE `products` (
`products_id` int(11) NOT NULL auto_increment,
`categories_id` int(11) NOT NULL,
57
`manufacturers_id` int(11) default NULL,
`name` varchar(64) NOT NULL default '',
`quantity` int(4) NOT NULL,
`model` varchar(12) default NULL,
`image` varchar(64) default NULL,
`price` decimal(15,4) NOT NULL,
`date_added` datetime NOT NULL,
`status` tinyint(1) NOT NULL,
`viewed` int(5) default '0',
`description` text,
PRIMARY KEY (`products_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
58
Фрагменты исходного кода web-представительства
<?php
require('includes/application_top.php');
// the following cPath references come from application_top.php
$category_depth = 'top';
if (isset($cPath) &&tep_not_null($cPath)) {
$categories_products_query = tep_db_query("select count(*) as total from " .
TABLE_PRODUCTS_TO_CATEGORIES . " where categories_id = '" .
(int)$current_category_id ."'");
//echo $categories_products_query . '<hr>';
$cateqories_products = tep_db_fetch_array($categories_products_query);
// print_r($cateqories_products);
if ($cateqories_products['total'] > 0) {
$category_depth = 'products'; // display products
} else {
$category_parent_query = tep_db_query("select count(*) as total from " .
TABLE_CATEGORIES . " where parent_id = '" . (int)$current_category_id . "'");
$category_parent = tep_db_fetch_array($category_parent_query);
if ($category_parent['total'] > 0) {
$category_depth = 'nested'; // navigate through the categories
} else {
$category_depth = 'nested'; // 'products'; // category has no products, but display the 'no
products' message
}
}
}
?>
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html <?php echo HTML_PARAMS; ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
<title><?php echo TITLE; ?></title>
<link rel="stylesheet" type="text/css" href="stylesheet.css">
</head>
<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0"
rightmargin="0">
<!-- header //-->
<?php require(DIR_WS_INCLUDES . 'header.php'); ?>
<!--header_eof //-->
<!-- body //-->
<table border="0" width="100%" cellspacing="3" cellpadding="3">
<tr>
<td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php
echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2">
<!--left_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_left.php'); ?>
<!--left_navigation_eof //-->
</table></td>
59
<!--body_text //-->
<?php
// print $category_depth . '!!!!!!';
if ($category_depth == 'nested') {
$category_query = tep_db_query("select cd.categories_name, c.categories_image from " .
TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where
c.categories_id = '" . (int)$current_category_id . "' and cd.categories_id = '" .
(int)$current_category_id . "' and cd.language_id = '" . (int)$languages_id . "'");
$category = tep_db_fetch_array($category_query);
?>
<td width="100%" valign="top"><table border="0" width="100%" cellspacing="0"
cellpadding="0">
<tr>
<td><table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td class="pageHeading"><?php echo HEADING_TITLE; ?></td>
<td class="pageHeading" align="right"><?php echo tep_image(DIR_WS_IMAGES .
$category['categories_image'], $category['categories_name'], HEADING_IMAGE_WIDTH,
HEADING_IMAGE_HEIGHT); ?></td>
</tr>
</table></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<tr>
<td><table border="0" width="100%" cellspacing="0" cellpadding="2">
<tr>
<td><table border="0" width="100%" cellspacing="0" cellpadding="2">
<tr>
<?php
if (isset($cPath) &&strpos('_', $cPath)) {
// check to see if there are deeper categories within the current category
$category_links = array_reverse($cPath_array);
for($i=0, $n=sizeof($category_links); $i<$n; $i++) {
$categories_query = tep_db_query("select count(*) as total from " .
TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where
c.parent_id = '" . (int)$category_links[$i] . "' and c.categories_id = cd.categories_id and
cd.language_id = '" . (int)$languages_id . "'");
$categories = tep_db_fetch_array($categories_query);
if ($categories['total'] < 1) {
// do nothing, go through the loop
} else {
$categories_query = tep_db_query("select c.categories_id, cd.categories_name,
c.categories_image, c.parent_id from " . TABLE_CATEGORIES . " c, " .
TABLE_CATEGORIES_DESCRIPTION . " cd where c.parent_id = '" . (int)$category_links[$i]
. "' and c.categories_id = cd.categories_id and cd.language_id = '" . (int)$languages_id . "' order
by sort_order, cd.categories_name");
break; // we've found the deepest category the customer is in
}
}
60
} else {
$categories_query = tep_db_query("select c.categories_id, cd.categories_name,
c.categories_image, c.parent_id from " . TABLE_CATEGORIES . " c, " .
TABLE_CATEGORIES_DESCRIPTION . " cd where c.parent_id = '" .
(int)$current_category_id . "' and c.categories_id = cd.categories_id and cd.language_id = '" .
(int)$languages_id . "' order by sort_order, cd.categories_name");
}
$number_of_categories = tep_db_num_rows($categories_query);
// print_r($categories_query);
$rows = 0;
while ($categories = tep_db_fetch_array($categories_query)) {
$rows++;
$cPath_new = tep_get_path($categories['categories_id']);
$width = (int)(100 / MAX_DISPLAY_CATEGORIES_PER_ROW) . '%';
echo '
<td align="center" class="smallText" width="' . $width . '" valign="top"><a
href="' .tep_href_link(FILENAME_DEFAULT, $cPath_new) . '">' .
tep_image(DIR_WS_IMAGES . $categories['categories_image'], $categories['categories_name'],
SUBCATEGORY_IMAGE_WIDTH, SUBCATEGORY_IMAGE_HEIGHT) . '<br>' .
$categories['categories_name'] . '</a></td>' ."\n";
if ((($rows / MAX_DISPLAY_CATEGORIES_PER_ROW) == floor($rows /
MAX_DISPLAY_CATEGORIES_PER_ROW)) && ($rows != $number_of_categories)) {
echo '
</tr>' . "\n";
echo '
<tr>' . "\n";
}
}
// needed for the new products module shown below
$new_products_category_id = $current_category_id;
?>
</tr>
</table></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<tr>
</tr>
</table></td>
</tr>
</table></td>
<?php
} elseif ($category_depth == 'products' || isset($HTTP_GET_VARS['manufacturers_id'])) {
// create column list
$define_list = array('PRODUCT_LIST_MODEL' => PRODUCT_LIST_MODEL,
'PRODUCT_LIST_NAME' => PRODUCT_LIST_NAME,
'PRODUCT_LIST_MANUFACTURER' =>
PRODUCT_LIST_MANUFACTURER,
'PRODUCT_LIST_PRICE' => PRODUCT_LIST_PRICE,
'PRODUCT_LIST_QUANTITY' => PRODUCT_LIST_QUANTITY,
'PRODUCT_LIST_WEIGHT' => PRODUCT_LIST_WEIGHT,
61
'PRODUCT_LIST_IMAGE' => PRODUCT_LIST_IMAGE,
'PRODUCT_LIST_BUY_NOW' => PRODUCT_LIST_BUY_NOW);
asort($define_list);
$column_list = array();
reset($define_list);
while (list($key, $value) = each($define_list)) {
if ($value > 0) $column_list[] = $key;
}
$select_column_list = '';
for ($i=0, $n=sizeof($column_list); $i<$n; $i++) {
switch ($column_list[$i]) {
case 'PRODUCT_LIST_MODEL':
$select_column_list .= 'p.products_model, ';
break;
case 'PRODUCT_LIST_NAME':
$select_column_list .= 'pd.products_name, ';
break;
case 'PRODUCT_LIST_MANUFACTURER':
$select_column_list .= 'm.manufacturers_name, ';
break;
case 'PRODUCT_LIST_QUANTITY':
$select_column_list .= 'p.products_quantity, ';
break;
case 'PRODUCT_LIST_IMAGE':
$select_column_list .= 'p.products_image, ';
break;
case 'PRODUCT_LIST_WEIGHT':
$select_column_list .= 'p.products_weight, ';
break;
}
}
// show the products of a specified manufacturer
if (isset($HTTP_GET_VARS['manufacturers_id'])) {
if (isset($HTTP_GET_VARS['filter_id']) &&tep_not_null($HTTP_GET_VARS['filter_id']))
{
// We are asked to show only a specific category
$listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id,
p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as
specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as
final_price from " . TABLE_PRODUCTS . " p left join " . TABLE_SPECIALS . " s
onp.products_id = s.products_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " .
TABLE_MANUFACTURERS . " m, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c
where p.products_status = '1' and p.manufacturers_id = m.manufacturers_id and
m.manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id'] . "' and p.products_id =
p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" .
(int)$languages_id . "' and p2c.categories_id = '" . (int)$HTTP_GET_VARS['filter_id'] ."'";
62
} else {
// We show them all
$listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id,
p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as
specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as
final_price from " . TABLE_PRODUCTS . " p left join " . TABLE_SPECIALS . " s
onp.products_id = s.products_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " .
TABLE_MANUFACTURERS . " m where p.products_status = '1' and pd.products_id =
p.products_id and pd.language_id = '" . (int)$languages_id . "' and p.manufacturers_id =
m.manufacturers_id and m.manufacturers_id = '" . (int)$HTTP_GET_VARS['manufacturers_id']
. "'";
}
} else {
// show the products in a given categorie
if (isset($HTTP_GET_VARS['filter_id']) &&tep_not_null($HTTP_GET_VARS['filter_id']))
{
// We are asked to show only specific catgeory
$listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id,
p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as
specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as
final_price from " . TABLE_PRODUCTS . " p left join " . TABLE_SPECIALS . " s
onp.products_id = s.products_id, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " .
TABLE_MANUFACTURERS . " m, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c
where p.products_status = '1' and p.manufacturers_id = m.manufacturers_id and
m.manufacturers_id = '" . (int)$HTTP_GET_VARS['filter_id'] . "' and p.products_id =
p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" .
(int)$languages_id . "' and p2c.categories_id = '" . (int)$current_category_id ."'";
} else {
// We show them all
$listing_sql = "select " . $select_column_list . " p.products_id, p.manufacturers_id,
p.products_price, p.products_tax_class_id, IF(s.status, s.specials_new_products_price, NULL) as
specials_new_products_price, IF(s.status, s.specials_new_products_price, p.products_price) as
final_price from " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS . " p
left join " . TABLE_MANUFACTURERS . " m on p.manufacturers_id = m.manufacturers_id
left join " . TABLE_SPECIALS . " s onp.products_id = s.products_id, " .
TABLE_PRODUCTS_TO_CATEGORIES . " p2c where p.products_status = '1' and
p.products_id = p2c.products_id and pd.products_id = p2c.products_id and pd.language_id = '" .
(int)$languages_id . "' and p2c.categories_id = '" . (int)$current_category_id ."'";
}
}
if ( (!isset($HTTP_GET_VARS['sort'])) || (!ereg('^[1-8][ad]$', $HTTP_GET_VARS['sort'])) ||
(substr($HTTP_GET_VARS['sort'], 0, 1) >sizeof($column_list)) ) {
for ($i=0, $n=sizeof($column_list); $i<$n; $i++) {
if ($column_list[$i] == 'PRODUCT_LIST_NAME') {
$HTTP_GET_VARS['sort'] = $i+1 . 'a';
$listing_sql .= " order by pd.products_name";
break;
}
}
} else {
63
$sort_col = substr($HTTP_GET_VARS['sort'], 0 , 1);
$sort_order = substr($HTTP_GET_VARS['sort'], 1);
switch ($column_list[$sort_col-1]) {
case 'PRODUCT_LIST_MODEL':
$listing_sql .= " order by p.products_model " . ($sort_order == 'd' ?'desc' : '') . ",
pd.products_name";
break;
case 'PRODUCT_LIST_NAME':
$listing_sql .= " order by pd.products_name " . ($sort_order == 'd' ? 'desc' : '');
break;
case 'PRODUCT_LIST_MANUFACTURER':
$listing_sql .= " order by m.manufacturers_name " . ($sort_order == 'd' ? 'desc' : '') . ",
pd.products_name";
break;
case 'PRODUCT_LIST_QUANTITY':
$listing_sql .= " order by p.products_quantity " . ($sort_order == 'd' ? 'desc' : '') . ",
pd.products_name";
break;
case 'PRODUCT_LIST_IMAGE':
$listing_sql .= " order by pd.products_name";
break;
case 'PRODUCT_LIST_WEIGHT':
$listing_sql .= " order by p.products_weight " . ($sort_order == 'd' ? 'desc' : '') . ",
pd.products_name";
break;
case 'PRODUCT_LIST_PRICE':
$listing_sql .= " order by final_price " . ($sort_order == 'd' ? 'desc' : '') . ",
pd.products_name";
break;
}
}
?>
<td width="100%" valign="top"><table border="0" width="100%" cellspacing="0"
cellpadding="0">
<tr>
<td><table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td class="pageHeading"><?php echo HEADING_TITLE; ?></td>
<?php
// optional Product List Filter
if (PRODUCT_LIST_FILTER > 0) {
if (isset($HTTP_GET_VARS['manufacturers_id'])) {
$filterlist_sql = "select distinct c.categories_id as id, cd.categories_name as name from " .
TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " .
TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where
p.products_status = '1' and p.products_id = p2c.products_id and p2c.categories_id =
c.categories_id and p2c.categories_id = cd.categories_id and cd.language_id = '" .
(int)$languages_id . "' and p.manufacturers_id = '" .
(int)$HTTP_GET_VARS['manufacturers_id'] . "' order by cd.categories_name";
} else {
64
$filterlist_sql= "select distinct m.manufacturers_id as id, m.manufacturers_name as name
from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " .
TABLE_MANUFACTURERS . " m where p.products_status = '1' and p.manufacturers_id =
m.manufacturers_id and p.products_id = p2c.products_id and p2c.categories_id = '" .
(int)$current_category_id . "' order by m.manufacturers_name";
}
$filterlist_query = tep_db_query($filterlist_sql);
if (tep_db_num_rows($filterlist_query) > 1) {
echo '
<td align="center" class="main">' .tep_draw_form('filter',
FILENAME_DEFAULT, 'get') . TEXT_SHOW . ' ';
if (isset($HTTP_GET_VARS['manufacturers_id'])) {
echo tep_draw_hidden_field('manufacturers_id',
$HTTP_GET_VARS['manufacturers_id']);
$options = array(array('id' => '', 'text' => TEXT_ALL_CATEGORIES));
} else {
echo tep_draw_hidden_field('cPath', $cPath);
$options = array(array('id' => '', 'text' => TEXT_ALL_MANUFACTURERS));
}
echo tep_draw_hidden_field('sort', $HTTP_GET_VARS['sort']);
while ($filterlist = tep_db_fetch_array($filterlist_query)) {
$options[] = array('id' => $filterlist['id'], 'text' => $filterlist['name']);
}
echo tep_draw_pull_down_menu('filter_id', $options,
(isset($HTTP_GET_VARS['filter_id']) ? $HTTP_GET_VARS['filter_id'] : ''),
'onchange="this.form.submit()"');
echo tep_hide_session_id() . '</form></td>' . "\n";
}
}
// Get the right image for the top-right
$image = DIR_WS_IMAGES . 'table_background_list.gif';
if (isset($HTTP_GET_VARS['manufacturers_id'])) {
$image = tep_db_query("select manufacturers_image from " .
TABLE_MANUFACTURERS . " where manufacturers_id = '" .
(int)$HTTP_GET_VARS['manufacturers_id'] ."'");
$image = tep_db_fetch_array($image);
$image = $image['manufacturers_image'];
} elseif ($current_category_id) {
$image = tep_db_query("select categories_image from " . TABLE_CATEGORIES . " where
categories_id = '" .(int)$current_category_id . "'");
$image = tep_db_fetch_array($image);
$image = $image['categories_image'];
}
?>
<td align="right"><?php echo tep_image(DIR_WS_IMAGES . $image, HEADING_TITLE,
HEADING_IMAGE_WIDTH, HEADING_IMAGE_HEIGHT); ?></td>
</tr>
</table></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
65
</tr>
<tr>
<td><?php include(DIR_WS_MODULES . FILENAME_PRODUCT_LISTING); ?></td>
</tr>
</table></td>
<?php
} else { // default page
?>
<td width="100%" valign="top"><table border="0" width="100%" cellspacing="0"
cellpadding="0">
<tr>
<td><table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td class="pageHeading"><?php echo HEADING_TITLE; ?></td>
<td class="pageHeading" align="right"><?php echo tep_image(DIR_WS_IMAGES .
'table_background_default.gif', HEADING_TITLE, HEADING_IMAGE_WIDTH,
HEADING_IMAGE_HEIGHT); ?></td>
</tr>
</table></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<tr>
<td><table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td class="main"><?php echo tep_customer_greeting(); ?></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<tr>
<td class="main"><?php echo TEXT_MAIN; ?></td>
</tr>
<?php
include(DIR_WS_MODULES .
FILENAME_UPCOMING_PRODUCTS);
?>
</table></td>
</tr>
</table></td>
<?php
}
?>
<!--body_text_eof //-->
<td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php
echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2">
<!--right_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_right.php'); ?>
<!--right_navigation_eof //-->
</table></td>
66
</tr>
</table>
<!--body_eof //-->
<!-- footer //-->
<?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
<!--footer_eof //-->
<br>
</body>
</html>
<?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>
Отзывы:
Авторизуйтесь, чтобы оставить отзыв