39499

Исследование технологий продвижения электронного бизнеса и дизайн - проектирование современного Интернет-магазина

Дипломная

Информатика, кибернетика и программирование

Интернет-магазины обладают рядом преимуществ в сравнении с обычными, как для покупателей, так и для продавцов. Крупные интернет-магазины поддерживают чрезвычайно широкий ассортимент товаров. А множество одинаково хорошо доступных интернет-магазинов вместе создают столь широкий диапазон товаров, что с ним не сравнится никакой супермаркет реального мира.

Русский

2013-10-04

5.37 MB

48 чел.

Содержание

[1] ВВЕДЕНИЕ

[2]
1. АНАЛИЗ СОВРЕМЕННЫХ ТЕХНОЛОГИЙ ИНТЕРНЕТ - МАРКЕТИНГА

[2.1] 1.1 Преимущества электронной коммерции

[2.2] 1.2. Анализ функций интернет - магазина

[2.2.1] 1.2.1. Схема взаимодействия покупателя с виртуальным магазином

[2.2.2] 1.2.2. Обзор основного функционала интернет-магазинов. Виды интернет магазинов

[2.2.3] 1.2.3. Работа интернет-магазина с покупателями

[2.2.4] 1.2.4. Обработка заказов

[2.2.5] 1.2.5. Сбор маркетинговой информации

[2.2.6] 1.2.6. Оплата товара

[2.2.7] 1.2.7. Доставка товара

[2.3] 1.3. Анализ и исследование интернет-магазинов, чья специализация основана на торговле компьютерной техники

[2.4] Постановка задачи

[3] 2. ПРОЕКТИРОВАНИЕ ТЕХНИЧЕКОЙ ЧАСТИ ЭЛЕКТРОННОГО МАГАЗИНА

[3.1] 2.1 Установка необходимых программных средств для разработки сайтов

[3.1.1] 2.1.1 Установка пакета программных средств для создания WEB- приложений AppServ 2.5.10

[3.1.2] 2.1.2 Установка пакета утилит для управления базами данных MySQL

[3.2] 2.2 Создание виртуального хоста

[3.3] 2.3 Создание базы данных

[3.4] 2.4 Создание структуры файлов и папок в корневой директории интернет-магазина

[3.5] 2.5 Разработка необходимого программного обеспечения(ПО), поддерживающего работу интернет-магзина.

[3.5.1] 2.5.1 Разработка класса для работы с MySQL

[3.5.2] 2.5.2 Разработка шаблонизатора

[3.5.3] 2.5.3 Разработка ПО для создания уменьшенных копий изображения

[3.6] 2.6 Реализация системы безопасности сайта

[3.7] 2.7 Реализация системы навигации

[3.7.1] 2.7.1 Навигация по сайту

[3.7.2] 2.7.2 Навигация по каталогам

[3.7.2.1] 2.7.2.1 Реализация каталогов

[3.8] 2.8 Реализация мультиязычности

[3.9] 2.9 Разработка виртуальной корзины, с использованием технологии AJAX

[3.9.1] 2.9.1 Работа стандартной виртуальной корзины

[3.9.2] 2.9.2 AJAX. Преимущества и недостатки

[3.9.3] 2.9.3 Процесс создания виртуальной корзины

[3.9.3.1] 2.9.3.1 Создание функции, запускающей вызовы AJAX

[3.9.3.2] 2.9.3.2 Разработка класса, обеспечивающего работу корзины

[3.9.3.3] 2.9.3.3 Создание файла-обработчика виртуальной корзины

[3.9.3.4] 2.9.3.4 Вывод содержимого корзины в браузер

[3.10] 2.10 Создание пользовательских аккаунтов

[3.10.1] 2.10.1 Навигация внутри аккаунта

[3.10.2] 2.10.2 Разделы аккаунта

[3.10.2.1] 2.10.2.1 Главная страница

[3.10.2.2] 2.10.2.2 Изменение личных данных

[3.10.2.3] 2.10.2.3 История заказов

[3.10.2.4] 2.10.2.4 Выход из аккаунта

[3.11] 2.11 Работа интернет-магазина с платёжной системой

[3.11.1] 2.11.1 Платёжная система LiqPay

[3.11.2] 2.11.2 Возможности LiqPay

[3.11.3] 2.11.3 Безопасность системы LiqPay

[3.11.4] 2.11.4 Оформление заказа

[3.12] 2.12 Разработка системы управления содержимым

[3.12.1] 2.12.1 Задачи CMS

[3.12.2] 2.12.2 Создание разделов

[3.12.2.1] 2.12.2.1 Каталог

[3.12.2.2] 2.12.2.2 Настройки

[3.12.2.3] 2.12.2.3 Брэнды и логотипы

[3.12.2.4] 2.12.2.4 Пользователи

[3.13] 2.13 Внедрение дополнительных функций в  интернет-магазин

[3.13.1] 2.13.1 Создание автоматизированной акции

[3.13.2] 2.13.2 Вывод текущего курса доллара

[3.13.3] 2.11.3 Создание облака тэгов

[3.14] Выводы

[4] 3. ЗАГРУЗКА ЭЛЕКТРОННОГО МАГАЗИНА В ИНТЕРНЕТ

[4.1] 3.1 Регистрация доменного имени

[4.2] 3.2 Перенос сайта на удалённый хостинг

[4.2.1] 3.2.1 Экспорт базы данных

[4.2.2] 3.2.2 Экспорт файловой структуры электронного магазина

[4.3] Выводы

ВВЕДЕНИЕ

В последнее время всё больше и больше людей отдаёт предпочтение виртуальным

магазинам, нежели реальным. Всё чаще можно услышать вопрос: «Зачем бегать по магазинам в поисках нужной покупки?». Чем же это обуславливается? Чем реальные магазины уступают виртуальным?

На самом деле ответить на этот вопрос не так уж и сложно, но для начала необходимо разобраться с тем, чем же на самом деле является интернет магазин.  

Интернет-магазин - это магазин, «витрина» которого расположена в сети интернет и который дает возможность заказать товар через интернет. Интернет-магазины - это торговые сайты компаний малого и среднего бизнеса. В Интернет-магазине могут быть реализованы практически любые торговые схемы: торговля со склада и на заказ, торговля с частными лицами и с организациями, торговля вещественными и цифровыми товарами, услугами, информацией и т.д. На сайте магазина обычно представлен подробный каталог товаров с ценами, на основе которого пользователь формирует свой заказ. Заказывая товары в Интернет-магазине, вы можете получать их по почте или с курьером, а оплачивать непосредственно при получении или также через Интернет.

Теперь, дав определение интернет-магазину, и, получив небольшое представление о работе, можно рассмотреть его преимущества. Итак, преимущества которые даёт нам интернет-магазин:

  •  Интернет-магазин работает 24 часа в сутки, 365 дней в году, без перерыва на обед,   без выходных и праздничных дней.
  •  Доступ к виртуальным витринам магазина может получить любой покупатель, находящийся в любой точке планеты на любом континенте.
  •  Профессионально грамотно созданный Интернет-магазин может работать полностью автономно. Практически без обслуживания.
  •  Интернет-магазин не имеет ограничений на виртуальную площадь. Можно разместить сколь угодно много товаров или описать любое количество услуг.
  •  Владелец Интернет-магазина может сдавать в аренду свои виртуальные торговые площади так же, как и владелец обычного магазина.
  •  Интернет-магазин позволяет общаться с потенциальными клиентами, находящимися сколь угодно далеко, в режиме реального времени.
  •  Срок и стоимость создания Интернет магазина несоизмеримо ниже, чем обычного магазина.
  •  Для создания Интернет-магазина не требуется получения многочисленных разрешений и лицензий. Его не проверяет пожарный инспектор, санэпидемстанция и другие хорошо знакомые вам службы.
  •  Развитие мобильных устройств для доступа в Интернет (мобильный телефон, КПК и т.д.) позволяет получить доступ к Интернет-магазину из любой точки мира, вне зависимости от местоположения потенциального клиента.

Что же продается в интернет-магазинах? Все, что вы можете купить в физическом мире, может продаваться в сети интернет. Интернет-магазины обладают рядом преимуществ в сравнении с обычными, как для покупателей, так и для продавцов. Крупные интернет-магазины поддерживают чрезвычайно широкий ассортимент товаров. А множество одинаково хорошо доступных интернет-магазинов вместе создают столь широкий диапазон товаров, что с ним не сравнится никакой супермаркет реального мира.

Как бы там ни было, достижение полного успеха интернет-магазином на рынке невозможно. Важными факторами являются – донесение подробной информации до потребителя, чёткая постановка своих целей и представление того, чего нужно достигнуть,

продуманная система сбыта.

Актуальность выбранной для исследования темы заключается в том, что сегодня миллионы людей ежедневно, не выходя из дому, покупают различные товары в электронных магазинах. Поиск клиентов является по-прежнему основной задачей любого бизнеса. Если в прошлом с этой задачей помогала справляться медийная реклама (широкий охват аудитории), то сегодня одним из главных способов сообщить потенциальным клиентам о себе является веб-сайт. Для того, чтобы они обратили внимание именно на вас, важно иметь действительно качественный сайт, который будет выполнять главную задачу - привлечение новых клиентов.

Целью данной работы является исследование технологий продвижения электронного бизнеса и дизайн - проектирование современного Интернет-магазина.

Для достижения поставленных целей необходимо решить следующие задачи:

-изучить основные понятия, особенности создания электронной коммерции на примере электронных магазинов;

-исследовать классификацию электронных магазинов;

-провести сравнительный обзор технологических решений в странах СНГ, мировой опыт.

-провести анализ современных инструментов для создания профессиональных веб приложений;

-исследовать возможности и выбрать для дальнейшей разработки один из существующих JavaScript фреймуорков;

-изучить способы внедрения и использования библиотеки Highslide JS;

-спроектировать базу данных электронного магазина;

-разработать систему безопасности интернет-магазина;

-создать удобную структуру файлов и папок в корневой директории Интернет-магазина;

-разработать удобную навигацию по сайту и каталогам;

-разработать пользовательские аккаунты;

-исследовать и понять работу виртуальной корзины интернет-магазина;

-разработать собственную виртуальную корзину с использованием новейших технологий и приёмов веб разработки;

-исследовать и выбрать одну из платёжных систем для внедрения в интернет-магазин;

Новизной работы является разработка полноценного интернет-магазина с использованием AJAX технологий, собственной системой безопасности, а так же собственной системой управления содержимым.

Практическая значимость – данный проект может быть внедрён в одну из организаций для коммерческого использования. Объектом исследования выступает интерфейс информационной системы электронного магазина.

Объектом исследования выступает интерфейс информационной системы электронного магазина.

Структурно работа состоит из введения, трех глав, заключения, списка использованной литературы и приложений. Написана на 136 листах компьютерного текста, содержит 53 рисунка, 9 таблиц, 26 наименований литературных и научных источников, 2 приложения.

Работа может быть полезна специалистам в области внедрения современных информационных технологий, электронной коммерции, сайт – промоутинга.

  


1. АНАЛИЗ СОВРЕМЕННЫХ ТЕХНОЛОГИЙ ИНТЕРНЕТ - МАРКЕТИНГА

1.1 Преимущества электронной коммерции

Основным девизом сегодняшнего дня является словосочетание «электронная коммерция». Почему именно электронная коммерция? Дело в том, что на данный момент интернет очень сильно потеснил таких мировых титанов торговли через каталоги, как Quelle или Otto. Что же такое торговля в интернете?

Если взять самое простое описание то всё достаточно просто. Торговая фирма делает свой собственный сайт интернет-магазин. Весь сайт интернет-магазина фактически состоит из каталога в котором выставлены описания товаров и цены на товар, в самом

хорошем случае ещё и с картинками. Покупатель выбирает товар и размещает заказ то есть заполняете специальную форму со своими данными на определённой странице сайта. Вариант оплаты или жёстко установлен сайтом, или есть возможность выбрать из нескольких способов. Затем дальнейшее уже проходит в зависимости от выбранного вами способа оплаты – это предоплата, оплата по счету, оплата наложенным платежом и так далее. «Электронным» этот метод торговли можно назвать только потому, что и поиск и выбор товара происходит в сети нтернет. И это очень удобно и великолепно. Это основа хотя существует ещё большое множество различных форм и коммерческих действий в интернете, которые в общем характеризуются таким обширным термином как «электронная коммерция».

Действительно торговля возникла в очень далёкие времена, фактически на заре зарождения нашей цивилизации. Но процесс её развития не закончился, а продолжается и сейчас. И общий процесс развития всего человечества не мог не оставить своего отпечатка на формах и видах бизнеса связанного с торговлей. Каждый продавец всегда как стремился так и будет стремиться к максимальному приближению своих товаров к любому своему потенциальному покупателю, сделать так, чтобы процессс выбора и приобретения понравившихся товаров был максимально простым и удобным для него. Прошедшее столетие вообще было охарактеризовано настоящим торговым бумом. За этот небольшой промежуток возникли глобальные торговые супермаркеты, магазины с самообслуживанием, торговля через каталоги и при помощи телефона. И именно торговля с помощью использования телефона впоследствии стала основой идеи создать свой первый интернет-магазин. Вернее будет сказать: интернет-магазины и далее к всеобъемлющему понятию электронной коммерции - следующей ступеньке в эволюции бизнеса связанного с торговлей.

К сожалению, достоверно неизвестно кто же и когда в первый раз решил попробовать использовать интернет чтобы организовать свой собственный магазин, но можно уверенно констатировать, что эта идея пришлась по душе и бизнесменам торговцам, и их покупателям. В чём же заключается главное преимущество интернет-магазинов если сравнить их с оффлайновыми способами торговли? Первое - это то, что интернет-магазин работает все 24 часа в сутки причём без перерывов на обед и без выходных дней. Второе - это то, что доступ к представленным в магазине товарам может получить каждый потенциальный покупатель, а не только проживающий в каком-то конкретном городе. Даже из другой страны и часто это бывает чрезвычайно актуально, например, когда продаваемый с помощью интернет-магазина товар является ординарным в своей стране, но достаточно ценным и экзотичным в других странах. Третье - это то, что один и тот же выставленный на продажу товар могут рассматривать и "мерять на себя" сразу большое количество человек. В четвёртых и это немаловажно, однажды созданный бизнесменом интернет-магазин очень легко обслуживать. Достаточно просто наполнять виртуальные полки магазина товарами, проводить консультации покупателей и многое, многое другое. И в пятых накладные расходы интернет-магазина во много раз меньше чем у обычных магазинов или чем у компаний торгующих через каталоги или при помощи телефона, а начальное вложение капитала в свой собственный интернет-магазин представляют из себя практически совсем незначительные суммы, особенно если принять во внимание, что сейчас можно легко купить или взять в аренду уже готовую торговую площадку и не заказывать отдельно создание интернет-магазина у программистов с нуля.

1.2. Анализ функций интернет - магазина

1.2.1. Схема взаимодействия покупателя с виртуальным магазином

На рис. 1.2 изображена общая схема взаимодействия покупателя с виртуальным магазином.

Рис. 1 Схема взаимодействия покупателя с интернет-магазином

Пользователь, при помощи веб обозревателя, заходит на сайт интернет-магазина,

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

Регистрация пользователя в системе магазина происходит либо принудительно( при оформлении заказа ), либо в специальном разделе магазина, отведённом для регистранции.

После регистрации система переносит пользователя на его личную страничку( аккаунт ), где он может ознакомиться и отредактировать историю своих заказов, отредактировать свои личные данные и узнать о статусе текущего и прошлых заказов.

При покупке товара информация о заказе заносится в базу данных. Это очень удобно, так как администрация сайта всегда получает подробную истоию заказов и всегда знает знает кто и когда нажал кнопку «купить». Виртуальный магазин направляет пользователя на платёжную систему, где он выполняет необходимые действия для оформления заказа. После того как платёжная система уведомит магазин о том, что заказ оформлен удачно, мэнэджер магазина связывается с покупателем и обсуждает способ доставки товара и тд. Если нужного товара нет на складе, направляется запрос поставщику, а покупателю сообщается о времени задержки.

В том случае, если оплата осуществляется при передаче товара покупателю,

необходимо подтверждение факта заказа. Чаще всего это происходит посредством электронной почты или по телефону.

1.2.2. Обзор основного функционала интернет-магазинов. Виды интернет магазинов

Торговые системы электронных магазинов можно классифицировать по степени их автоматизации. Существует три вида таких систем:

  •  Каталоги (веб витрины).
  •  Интернет магазины.
  •  Торговые интернет-системы(ТИС).

Сайты каталоги содержат полную информацию о компании плюс электронный каталог ее услуг и продукции. Как правило, заказ товаров на сайтах-каталогах может осуществляться с использованием электронной почты, отправленной по адресу менеджера по продажам. Использование сайтов этого типа целесообразно в том случае, если стратегия выхода в сеть интернет направлена на формирование или развитие бренда компании или рекламы товаров и услуг, или за счет доступа к полной информации о продукции и услугах тех потребителей, которые  территориально отдалены от компании-производителя. Очевидно,  что этому типу торговых электронных систем ещё очень далеко до полной автоматизации всех торговых процессов, т.е после получения заказа и контактых данных пользователя, менеджеру по продажам нужно будет организовать доставку товара, связаться со складом, принять оплату и тд. В итоге можно сделать вывод, что методы торговли через веб-витрину( сайт-каталог ) мало отличаются от методов ведения обычной торговли.

В отличие от сайтов-каталогов( веб-витрин ) возможности интернет-магазина

намного шире, в связи с чем и выше цена его разработки . Например, рассмотрим вырианты способов оплаты в интернет-магазине:

  •  Банковская карта -  безналичный вид расчёта.
  •  Банковский перевод - оплата за заказ производится банковским платежным поручением на расчётный счет магазина, часто применяется в B2B - системах.
  •  Электронные деньги — безналичный вид расчёта.
  •  Терминалы моментальной оплаты - оплата производится в уличных платёжных терминалах.
  •  SMS-платежи — это не платежи типа «отправьте sms на короткий номер и получите мелодию». Нет, sms в интернет-магазинах используется совершенно по-другому. Интернет-магазин формирует запрос средств и передает его в одну из специализированных систем электронных платежей (аналогично другим способам), и отправляя туда пользователя. Пользователь уже во взаимодействии с платежной системой отправляет sms с указанными системой реквизитами и подтверждает платеж. Платежная система после подтверждения отправляет магазину уведомление об успешности или неуспешности перевода.

По своей сути интерет-магазины и ТИС являются полностью автоматизированными виртуальными торговыми системами, предоставляющими возможность:

a)   Работать индивидуально с каждым зарегистрированным пользователем.

b)   Предлагать пользователю выбор варианта расчета.

  1.  Мгновенной оплаты через Интернет заказанных товаров и услуг.
  2.  Формирования заявки на доставку товара покупателю.

Степень интеграции торговых операций с бизнес- процессами высокая. Менеджер

осуществляет лишь общий контроль за работой системы. Электронный магазин этого типа довольно сложны, требуют немалых затрат на разработку, но вместе с тем, могут существенно увеличить объемы продаж.

Единственная черта, отличающая ТИС от интернет-магазина – это дополнительная интеграция ТИС в систему автоматизации всей деятельности компании.

1.2.3. Работа интернет-магазина с покупателями

В наше время всё больше и больше людей отдают предпочтение виртуальным магазинам, нежели реальным. Однако потенциальный клиент может покинуть интернет-магазин гораздо быстрее чем реальный. Именно это обстоятельство определяет необходимость высокого уровня сервиса, удобного и понятного пользовательского интерфейса, наличие подробной справочной информации в виртуальнм магазине. Ни один клиент не будет тратить своё время «дремучий лес», где всё не удобно и мало понятно. Исходя из этого, администрация любого интернет-магазина обязана предусмотреть все элементы, на основе которых строится взаимодействие покупателя с электронным магазином. Этими элементами являются:

  •  Каталог товаров
  •  Дополнительная справочная информация
  •  Удобный пользовательский интерфейс
  •  Работа с виртуальной корзиной
  •  Процедура регистрации

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

Информационная поддержка виртуального магазина должна обеспечивать потенциального клиента возможностью в любой момент получить ответы на любой вопрос, сопутствующий покупке. К таким вопросам могут относиться условия послепродажного сервиса, консультации по особенностям схем оплаты и многое другое.

Товар, выбранный пользователем, попадает в виртуальную корзину. Виртуальная корзина ничем не уступает реальной, например, из неё так же можно изъять ненужный товар, добавить ещё какой-либо товар или при необходимости увеличить или уменьшить количество штук какой-либо единицы товара. Виртуальная корзина должна всегда быть на виду у пользователя и отображать основные данные о заказе( количество единиц товара, общая стоимость заказа ). Это очень удобно для пользователя, так у него всегда есть возможность узнать сколько и почём он приобрёл.

При нажатии на кнопку «Купить» наступает момент оформления заказа. Система первым делом  проверяет зарегистрирован ли покупатель в базе данных магазина. Если нет, то покупателю сразу же предлагается пройти регистрацию. Если покупатель уже зарегистрирован то интернет-магазин высчитывает итоговую сумму с учётом скидок, акций, условиями доставки( отмеченными пользователем ) и направляет его на платёжную систему, где и происходит пошаговая оплата заказа.

Регистрация в виртуальных магазинах является обязательной. Это мера необходима потому что, во-первых, появляется возможность сбора полной и подробной маркетинговой информации, во-вторых, администрация виртуального магазина всегда знает, с кем конкретно, имеет дело и имеет доступ к полной и подробной истории всех заказов, в-третьих, можно индивидуально работать с каждым клиентом.

1.2.4. Обработка заказов

Процесс обработки заказов начинается с проверки наличия данных о покупателе в базе данных интернет-магазина. Если такой покупатель существует, он направляется на платёжную систему, где пошагово, проходит все этапы оплаты заказа либо вообще отменяет его. После того как покупатель, либо оплатит, либо отменит заказ платёжная система отправит информацию о заказе интернет-магазину, от которого к ней был осуществлён запрос. Спустя считанные секунды, как и у пользователя, так и у администрации появляется возможность наблюдать за состоянием статуса заказа. После того как с платёжной системы приходит статус, сообщающий об успешной оплате заказа, начинается процесс проверки наличия товара на складе и его резервирования. При отсутствии части заказа система информирует покупателя о возможной задержке. Последний этап обработки заказов – это оформление заказа на доставку товара.  

1.2.5. Сбор маркетинговой информации

У владельца виртуального магазина есть возможность получать полную информацию о посетителях web-сайта и строить в соответствии с ней систему маркетинга интернет-магазина. Программное обеспечение интернет-магазина позволяет не только собрать для анализа максимум статистической информации, но и оперативно ее использовать. На основе полученных результатов можно, например, выявить в каких местах наиболее оптимально размещать рекламную информацию, а системы управления web-содержимым позволяют автоматизировать ход рекламной кампании. Обычно публикация дополнительной информации реализуется при помощи отдельного сервера приложений и соответствующей базы данных.

1.2.6. Оплата товара

В наше время используются следующие варианты способов оплаты:

  •  банковская карта - безналичный вид расчёта, который часто подвергается      нареканиям в плане безопасности;
  •  банковский перевод - оплата за заказ производится банковским платежным поручением на расчётный счет магазина, часто применяется в B2B-системах. В розничных интернет магазинах банковский перевод осуществляется путём печати платёжки формы ПД-4 для оплаты в банках, принимающих платежи населения;
  •  наличный расчет - товар оплачивается курьеру наличными деньгами при получении покупателем товара;
  •  электронные деньги - безналичный вид расчёта;
  •  терминалы моментальной оплаты - оплата производится в уличных платёжных терминалах;
  •  SMS-платежи - это не платежи типа «отправьте sms на короткий номер и получите мелодию». Нет, sms в интернет-магазинах используется совершенно по-другому. Интернет-магазин формирует запрос средств и передает его в одну из специализированных систем электронных платежей (аналогично другим способам), и отправляя туда пользователя. Пользователь уже во взаимодействии с платежной системой отправляет sms с указанными системой реквизитами и подтверждает платеж. Платежная система после подтверждения отправляет магазину уведомление об успешности или неуспешности перевода;
  •  наложенный платеж — товар оплачивается на почте при получении. Данный способ, как правило, ограничен государственными границами, поскольку отправкой товаров наложенным платежом занимаются в основном государственные почтовые службы.

Описанная схема является общей, она работает и для кредитных карт, и для электронных денег, и для sms-платежных систем. Зачастую даже и для наличного расчета иногда магазины выделяют курьерскую службу в отдельную подсистему.

Наиболее распространёнными способами оплаты предлагаемыми интернет-магазинами Молдовы являются:

  •  Наличный расчёт.
  •  Безналичный расчёт.
  •  Оплата через WebMoney Transfer.
  •  Оплата с помощью кредита.
  •  Оплата через платёжные системы.

1.2.7. Доставка товара

Доставка товара должна осуществляться пятью основными способами:

  •  международной курьерской службой UPS;
  •  службой магазина или при помощи профессиональной курьерской службы;
  •  почтовой доставкой;
  •  самовывозом — клиент приезжает за заказанным товаром сам;
  •  международной почтовой службой;

1.3. Анализ и исследование интернет-магазинов, чья специализация основана на торговле компьютерной техники

В таблице 1.3 перечислены наиболее крупные интернет-магазины, торгующие компьютерной техникой и аксессуарами.

Таблица 1

Интернет-магазины Молдовы

Название

Адрес

ippon

www.ippon.md

matrix

www.matrix.md

computer

www.computer.md

мир ноутбуков

www.notebook.md

ESHOP

www.eshop.md

Исследования проводились по следующим показателям:

 - Кроссбраузерная совместимость.

- Форма заказа.

- Доставка, условия.

- Техническая поддержка.

- Способы оплаты.

- Разнообразие товаров.

- Дизайн и оформление каталогов.

- Поиск по товарам.

В процессе исследования выявилось, что практически во всех магазинах присутствуют какие-либо нарушения, но обладателем наихудших показателей оказался магазин Ippon( www.ippon.md ). Одной из основных проблем этого виртуального магазина является кроссбраузерная несовместимость. Всего было выявлено три кроссбраузерных

оплошности, но стоит отметить, что со всеми тремя из них можно столкнуться сразу же войдя на сайт( на главную страницу ). Приведём доказательства:

Первый кроссбраузерный недостаток заключается в том, что в левое меню сайта в разных браузерах отображается по разному. В Mozilla Firefox 3.6.3 и Opera 10.00 пункт меню, под названием «MultiFunctional devices» выходит за пределы блока, отведённого для меню блока. В Internet Explorer 6.0 с этим всё нормально. Вторая кроссбраузерная оплошность – отсутствие рекламных изображений в центре страницы, при просмотре сайта в Internet Explorer 6.0.

Рис.2 Два кроссбраузерных недостатка главной страницы виртуального магазина фирмы Ippon. Отображение в Mozilla Firefox 3.6.3 и Opera 10.00

Рис.3 Два кроссбраузерных недостатка главной страницы виртуального магазина фирмы Ippon. Отображение в Mozilla Firefox 3.6.3 и Opera 10.00

Исследование так же выявило самую недопустимую оплошность в работе данного интернет-магазина. Выяснилось, что нарушена работа одного из основных элементов виртуального магазина – это работа виртуальной корзины. При добавлении товара в корзину, система считает только количество добавленных товаров, а сумма в свою очередь остаётся неизменной( т.е равной нулю ).  

Рис.4 Нарушение работы виртуальной корзины интернет-магазина фирмы Ippon. Отображение в Mozilla Firefox 3.6.3 и Opera 10.00

Проблема кроссбраузерности так же не обошла стороной интернет-магазин фирмы «Мир ноутбуков». Было выявлено, при что низких разрешениях экрана в Internet Explorer 6.0 нарушается состояние блока и изображениями, находящегося прямо под главным меню.

Рис.5 Проблема кроссбраузерности интернет-магазина фирмы «Мир ноутбуков». Отображение в Mozilla Firefox 3.6.3 и Opera 10.00. Диагональ экрана 15,4 дюйма

                                         

Рис.6 Проблема кроссбраузерности интернет-магазина фирмы «Мир ноутбуков». Отображение в Internet Explorer 6.0. Диагональ экрана 15,4 дюйма

По остальным аспектам все сайты показали отличные результаты. Следует отметить интернет-магазин eshop.md, который по всем параметрам превосходит все остальные магазины. Магазин eshop.md также является высокотехнологичным и обладает большим количеством функций свойтвенным интернет-магазину, такими как: расширенный поиск по товарам, сортировка товаров по различным параметрам, разнообразие способов оплаты и доставки и.др. Но несмотря на это следует отметить и один недостаток: проблема с дизайном при переходе в раздел, где описываются варианты оплаты.

Рис.7 Проблема оформления раздела «payment» bнтернет-магазина eshop.md

Постановка задачи

В результате исследования была поставлена цель - разработать программную часть полноценного мультиязычного автоматического интернет-магазина по продаже компьютеров и комплектующих на территории Республики Молдова с использованием AJAX технологий, собственной системой безопасности, а так же собственной системой управления содержимым, который бы отвечал следующим параметрам:

  •  Удобная структура  файлов и папок в корневой директории интернет-магазина.
  •  Продуманная и удобная для пользователя система навигации, как по сайту в целом, так и по каталогам и пользовательским аккаунтам.
  •  Виртуальная корзина, разработанная с использованием технологии AJAX.
  •  Удобные пользовательские аккаунты.
  •  Продуманная система безопасности интернет-магазина.
  •  Удобная и функциональная система управления содержимым.

А так же обладал следующими дополнительными функциями:

  •  Интересная автоматическая акция, привлекающая внимание покупателей.
  •  Вывод текущего курса доллара.
  •  Облако тэгов, отображающее адреса сайтов производителей.

2. ПРОЕКТИРОВАНИЕ ТЕХНИЧЕКОЙ ЧАСТИ ЭЛЕКТРОННОГО МАГАЗИНА

2.1 Установка необходимых программных средств для разработки сайтов 

2.1.1 Установка пакета программных средств для создания WEB- приложений AppServ 2.5.10

Любой сайт в глобальной сети «Интернет» работает под управлением веб сервера, а это значит, что первым этапом в разработке нашего Интернет-магазина будет установка веб сервера.

Изначально было решено использовать следующий пакет программных средств, необходимых для веб разработки:

  •  Веб сервер Apache версии 2.2.
  •  Гипертекстовый препроцессор PHP пятой версии.
  •  Сервер баз данных MySQL пятой версии.

Под Linux системами установка вышеперечисленных программных средств займёт примерно пять минут, так как вся установка происходит по мере набирания особых команд в терминале. Набрав 3 команды можно благополучно установить веб сервер на своём компьютере.  Смотрим пример установки под Linux:

Первая команда - установка Apache:

           sudo apt-get install apache2 libapache2-mod-auth-mysql

Вторая команда - установка PHP:

sudo apt-get install php5-common php5 libapache2-mod-php5 php5-cli php5-cgi php5-mysql

Третья команда - установка MySQL:

sudo apt-get install mysql-server mysql-client

Как видно из примера – всё довольно просто  понятно… Установка вручную из под Windows(именно под Windows будет происходить весь процесс создания Интернет-магазина) в корне отличается от установки под Linux и содержит огромное количество подводных камней как, например, настройка глобальных переменных системы! Но не всё так грустно, как кажется! На радость веб разработчикам, работающих под Windows, были созданы инсталляторы, выполняющие всю рутинную работу по установке веб серверов.

К таким инсталляторам относятся:

- XAMPP

- Denver

- AppServ

Проанализировав вышеперечисленные инсталляторы было решено выбрать AppServ,  так как он самый простой в установке и к тому же, процесс установки длится всего максимум минуту. Так же AppServ создаёт наиболее удобную структуру доументов корневой директории веб сервера.

Процесс установки:

 Рис. 8  Запуск инсталлятора AppServ. Жмём Next

Рис. 9 Продолжение установки AppServ. Жмём I Agree

Рис. 10 Продолжение установки AppServ. Используем папку по умолчанию. Нажимаем Next

Рис. 11 Продолжение установки AppServ. Нам нужны все компоненты, поэтому просто жмем Next

Рис. 12 Продолжение установки AppServ. Указываем имя и порт для веб-сервера, а так же e-mail. В качестве имени сервера указываем "localhost". Вписываем email. Указываем порт - 80. Жмем Next

Рис. 13 Продолжение установки AppServ. Ставим галочку около Enable InnoDB и указываем пароль доступа к БД для пользователя root. Жмем Install

Рис. 14 Завершение установки AppServ. После завершения установки, появится окно

Жмем Finish.

На этом установка AppServ заканчивается.

Проверить работоспособность можно введя в браузере http://localhost

Рис. 15 Тестирование веб сервера

2.1.2 Установка пакета утилит для управления базами данных MySQL

Хотя AppServ предоставляет разработчикам phpmyadmin - веб-приложение с открытым кодом, написанное на языке PHP и представляющее собой веб-интерфейс для администрирования СУБД MySQL, мы откажемся от его использования. Отказ от использования стандартного phpmyadmin обусловлен тем, что он не позволяет нам:

  •  работать с хранимыми процедурами, функциям, триггерами, представлениями: создание, редактирование, удаление, импорт, экспорт;
  •  сортировать данные по нескольким столбцам одновременно;
  •  графически отображать структуру таблиц.

Было решено установить mysql-gui-tools-5.0-r17-win32 - пакет утилит для управления базами данных MySQL, который включает в себя инструменты управления, резервного копирования и восстановления, создания запросов к MySQL и переноса данных из различных БД в MySQL и наоборот. MySQL GUI Tools представляет собой мощную визуальную административную консоль, позволяющую легко управлять средой MySQL, значительно улучшает наблюдаемость работы баз данных.

MySQL GUI Tools совмещает в себе управление базами данных и обслуживание в единой интегрированной среде с интуитивно понятным интерфейсом.

MySQL GUI Tools позволяет соединятся к БД + сохранять конкретные соединения в памяти(если у вас базы расположены на нескольких серверах).  Просматривать состояние базы в текущий момент(активность сервера, нагрузка и тп), управлять пользователями (да-да, это функция которую злостно вырезали из PHPmyAdmin некоторое время назад и которой многим не хватает)добавлять, удалять, изменять привелегии, сохранять детальную информацию о пользователе, при наличии прав на администрирование.

Менять тип базы, кодировки как к столбцам, так и ко всей базе(зависит от вашего уровня доступа к БД)...

Просматривать, создавать, удалять, редактировать, менять содержимое, восстанавливать, создавать резервные копии, менять условия или настройки всему контенту в БД.

И еще множество других, не менее приятных функций.

MySQL GUI Tools содержит:

  •  MySQL Administrator.
  •  MySQL Query Browser.
  •  MySQL Migration Toolkit.
  •  MySQL System Tray Monitor.

Установка

Рис. 16 Запуск установщика MySQL GUI Tools

Рис. 17 Установка MySQL GUI Tools. Жмём Next

Рис. 18 Установка MySQL GUI Tools. Соглашаемся с условиями лицензии и жмём Next

Рис. 19 Установка MySQL GUI Tools. Указываем директорию установки жмём Next

Рис. 20 Установка MySQL GUI Tools. Выбираем complete setup и жмём Next

Рис. 21 Собственно установка MySQL GUI Tools

Рис. 22 Установка MySQL GUI Tools. Жмём Next

Рис. 23 Установка MySQL GUI Tools. Жмём Next

Рис. 24 Завершение установки MySQL GUI Tools. Жмём Finish

Рис. 25 Отображение пакета утилит MySQL GUI Tools в меню «Пуск»

2.2 Создание виртуального хоста 

Для того чтобы не обращаться к нашему проекту следующим образом: localhost/diplom, создадим для него отдельный name-based виртуальный хост. Для этого, первым делом, немного отредактируем файл httpd.conf, расположенный в директории C:\AppServ\Apache2.2\conf.

  1.  Раскоментируем 203 строку:

Было:

        #LoadModule vhost_alias_module module/mod_vhost_alias.so

   Стало:

     LoadModule vhost_alias_module module/mod_vhost_alias.so

  1.  Раскоментируем 506 строку с:

Было:

        #Include conf/extra/httpd-vhosts.conf

   Стало:

            Include conf/extra/httpd-vhosts.conf

Сохраняем файл httpd.conf. Теперь, используя эти настройки, мы можем создавать виртуальные хосты. Для настройки виртуального хоста необходимо открыть файл httpd-vhosts.conf, расположенный в директории C:\AppServ\Apache2.2\conf\extra. И внести в него следующие настройки:

<VirtualHost *:80>

   ServerAdmin kizer@localhost

   DocumentRoot "C:/AppServ/www/itsupply"

   ServerName itsupply

   ErrorLog "logs/itsupply-error.log"

   CustomLog "logs/itsupply-access.log" common

</VirtualHost>

Теперь у нас есть полноценный настроенный name-based виртуальный хост, однако для его работы необходимо выполнить последнее действие – зарегистрировать его в файле hosts, расположенном в по адресу WINDOWS\system32\drivers\etc\ . Вносим в файл hosts следующее:

127.0.0.1 itsupply

Вот и всё. Теперь можно проверить работу только что созданного виртуального хоста. Для этого первым делом перезагрузим веб сервер( Меню Пуск->Программы->AppServ->Control server by service->Apache restart ). В корневой директории веб сервера создадим php файл внутри папки itsupply и поместим внутрь него следующий код:

<?php

print 'Виртуальный хост нашего магазина создан успешно...';

?>

Проверим работу виртуального хоста. Откроем браузер и введём itsupply в адресную строку. Смотрим результат…

Рис. 26 Результат работы виртуального хоста нашего интернет-магазина

2.3 Создание базы данных

Перед созданием базы данных нашего магазина, создадим нового пользователя со всеми привилегиями. Для этого воспользуемся командной строкой MySQL.

  1.  Заходим в меню Пуск->Программы->AppServ->MySQL Command Line Client
  2.  Вводим пароль( тот что указали при установке )

Рис. 27 Создание нового пользователя MySQL. Ввод пароля «root»

  1.  Выбираем базу данных mysql

Рис. 28 Создание нового пользователя MySQL. Выбор БД, содержащей пользователей MySQL

  1.  При помощи оператора GRANT, создаём пользователя «diplom» с паролем «diplom» и наделяем его всеми  привилегиями

Рис. 29 Создание и наделение всеми привилегиями нового пользователя MySQL.

  1.  Проверяем наличие нового пользователя в БД

Рис. 30 Проверка наличия нового пользователя в БД MySQL.

Теперь у нас есть новый пользователь – администратор магазина.

Для создания базы данных, воспользуемся программой MySQL Query Browser, которая в ходит в пакет MySQL GUI Tools. Осущаствляем вход:

Рис. 31 Вход в MySQL Query Browser

Кликаем правой клавишей в правом окне среды разработки и выбираем пункт Create New Schema

Рис. 32 Создание новой БД

Вводим имя базы данных. В нашем случае itsupply 

Рис. 33 Вводим имя БД нашего будущего интернет-магазина

Теперь, у нас в распоряжении есть пустая база данных нашего магазина. Настало время обдумать создание необходимых таблиц. Итак… исходя из поставленных нами задач, было решено создать следующие таблицы:

goods – основная таблица. Здесь будут хранится все данные о товаре, а так же поля, связующие таблицу goods с остальными таблицами по внешним ключам.

categories – таблица категорий товаров. Эта таблица будет содержать названия категорий на русском и английском языках, а так идентификатор категории.

brands – таблица брэндов товаров. Эта таблица будет содержать идентификатор брэнда, его название и электронный адрес компании производителя.

goods_based_on - таблица типов товаров. Эта таблица будет содержать идентификатор типа и его название.

picsтаблица с номерами изображений. Названия наших изображений товаров будет формироваться примерно так: 00000 + ID изображения из БД. Итак таблица будет хранить идентификатор изображения и идентификатор товара, так как у одного товара может быть несколько изображений.

valuteтаблица валют. Эта таблица будет содержать: идентификатор валюты, текстовый код валюты( например USD ), номерной код валюты, наименование валюты( например «Доллар США» ), текущий курс валюты, а так же уникальное индексированное поле - для избегания повтора данных.

usersтаблица, хранящая данные зарегистрированных пользователей нашего магазина, такие как логин, пароль, полное имя, e-mail и тд.

orders – таблица с данными о заказе. Таблица содержит идентификатор заказа, дату заказа, статус заказа( от платёжной системы ) и связующее поле user_id для связи с таблицей users

ordered_items это таблица является одной из основных, так как именно эта таблица содержит всю историю заказов, а это значит, что именно она занимается сбором маркетинговой информации.

admin_setupэта таблица будет хранить пароль администратора и его e-mail

pages здесь будет храниться содержимое почти всех страниц магазина.

Создаём вышеперечисленные таблицы при помощи следующих запросов( Можно создать и через интерфейс, но на это уйдёт намного больше времени ).

Запросы:

DROP TABLE IF EXISTS `admin_setup`;

SET @saved_cs_client     = @@character_set_client;

SET character_set_client = utf8;

CREATE TABLE `admin_setup` (

 `password` varchar(30) NOT NULL,

 `email` varchar(20) NOT NULL

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

SET character_set_client = @saved_cs_client;

DROP TABLE IF EXISTS `brands`;

SET @saved_cs_client     = @@character_set_client;

SET character_set_client = utf8;

CREATE TABLE `brands` (

 `brand_id` int(10) unsigned NOT NULL auto_increment,

 `brand_category` varchar(45) NOT NULL,

 `link` varchar(45) NOT NULL,

 PRIMARY KEY  (`brand_id`)

) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8;

SET character_set_client = @saved_cs_client;

DROP TABLE IF EXISTS `categories`;

SET @saved_cs_client     = @@character_set_client;

SET character_set_client = utf8;

CREATE TABLE `categories` (

 `category_id` int(10) unsigned NOT NULL auto_increment,

 `category_en` varchar(45) default NULL,

 `category_ru` varchar(45) default NULL,

 PRIMARY KEY  (`category_id`)

) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

SET character_set_client = @saved_cs_client;

DROP TABLE IF EXISTS `goods`;

SET @saved_cs_client     = @@character_set_client;

SET character_set_client = utf8;

CREATE TABLE `goods` (

 `good_id` int(10) unsigned NOT NULL,

 `category_id` int(10) unsigned NOT NULL,

 `good_name` varchar(45) default NULL,

 `real_price` int(10) unsigned NOT NULL,

 `magic_price` int(10) unsigned default NULL,

 `angro_price` int(10) unsigned NOT NULL,

 `full_good_name` varchar(200) character set utf8 collate utf8_bin NOT NULL,

 `warranty` int(10) unsigned NOT NULL,

 `brand_id` int(10) unsigned NOT NULL,

 `based_on_id` int(10) unsigned NOT NULL,

 `description_en` longtext,

 `description_ru` longtext,

 PRIMARY KEY  (`good_id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

SET character_set_client = @saved_cs_client;

DROP TABLE IF EXISTS `goods_based_on`;

SET @saved_cs_client     = @@character_set_client;

SET character_set_client = utf8;

CREATE TABLE `goods_based_on` (

 `based_on_id` int(10) unsigned NOT NULL auto_increment,

 `based_on` varchar(45) NOT NULL,

 PRIMARY KEY  (`based_on_id`)

) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

SET character_set_client = @saved_cs_client;

DROP TABLE IF EXISTS `ordered_items`;

SET @saved_cs_client     = @@character_set_client;

SET character_set_client = utf8;

CREATE TABLE `ordered_items` (

 `ordered_items_id` int(10) unsigned NOT NULL auto_increment,

 `item_name` varchar(45) NOT NULL,

 `item_price` int(10) unsigned NOT NULL,

 `item_amount` int(10) unsigned NOT NULL,

 `item_price_count` decimal(20,2) NOT NULL,

 `order_id` int(10) unsigned NOT NULL,

 PRIMARY KEY  (`ordered_items_id`)

) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;

SET character_set_client = @saved_cs_client;

DROP TABLE IF EXISTS `orders`;

SET @saved_cs_client     = @@character_set_client;

SET character_set_client = utf8;

CREATE TABLE `orders` (

 `order_id` int(10) unsigned NOT NULL auto_increment,

 `user_id` int(11) unsigned NOT NULL,

 `order_date` datetime NOT NULL,

 `order_status` varchar(20) NOT NULL,

 PRIMARY KEY  (`order_id`)

) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

SET character_set_client = @saved_cs_client;

DROP TABLE IF EXISTS `pages`;

SET @saved_cs_client     = @@character_set_client;

SET character_set_client = utf8;

CREATE TABLE `pages` (

 `page_id` int(10) unsigned NOT NULL auto_increment,

 `page_name` varchar(15) NOT NULL,

 `contents_en` longtext,

 `contents_ru` longtext,

 PRIMARY KEY  (`page_id`)

) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

SET character_set_client = @saved_cs_client;

DROP TABLE IF EXISTS `pics`;

SET @saved_cs_client     = @@character_set_client;

SET character_set_client = utf8;

CREATE TABLE `pics` (

 `pic_id` int(10) unsigned NOT NULL auto_increment,

 `good_id` int(11) unsigned NOT NULL,

 PRIMARY KEY  USING BTREE (`pic_id`)

) ENGINE=InnoDB AUTO_INCREMENT=103 DEFAULT CHARSET=utf8;

SET character_set_client = @saved_cs_client;

DROP TABLE IF EXISTS `users`;

SET @saved_cs_client     = @@character_set_client;

SET character_set_client = utf8;

CREATE TABLE `users` (

 `user_id` int(10) unsigned NOT NULL auto_increment,

 `user_login` varchar(20) NOT NULL,

 `user_pass` varchar(80) NOT NULL,

 `user_phone` varchar(45) NOT NULL,

 `user_organization` varchar(20) default NULL,

 `user_fullname` varchar(45) default NULL,

 `user_email` varchar(20) NOT NULL,

 PRIMARY KEY  (`user_id`)

) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

SET character_set_client = @saved_cs_client;

DROP TABLE IF EXISTS `valute`;

SET @saved_cs_client     = @@character_set_client;

SET character_set_client = utf8;

CREATE TABLE `valute` (

 `valute_id` int(10) unsigned NOT NULL auto_increment,

 `valute_charcode` varchar(5) NOT NULL,

 `valute_numcode` int(10) unsigned NOT NULL,

 `valute_name` varchar(45) NOT NULL,

 `valute_value` decimal(7,4) NOT NULL,

 PRIMARY KEY  (`valute_id`),

 UNIQUE KEY `Index_charcode` (`valute_charcode`)

) ENGINE=MyISAM AUTO_INCREMENT=7411 DEFAULT CHARSET=utf8;

SET character_set_client = @saved_cs_client;

Взглянув в правое окно среды разработки мы увидим результат выполнения срипта – созданные таблицы нашего Интернет-магазина.

Рис. 34 Создание таблиц в БД нашего интернет-магазина

2.4 Создание структуры файлов и папок в корневой директории интернет-магазина

Создание правильной структуры файлов и папок в корневой директории интернет-магазина является одним из ключевых моментов в процессе разработки. Почему этот момент столь важен? Во-первых, грамотная структура любого сайта облегчает работу программистов при рсширении проекта, так как при необдуманной структуре сайт по мере своего расширения становится похож на «мусорку», в которой любое действие превращается в огромную техническую работу. Во-вторых, при грамотной структуре легче организовать защиту от различного рода атак.

Структура нашего интернет-магазина будет выглядеть следующим образом:

Рис. 35 Файловая структура корневой директории интернет-магазина

Как и любая другая система управления содержимым, наш интернет-магазин будет придерживаться особых чётких правил. Рассмотрим структуру:

Файлы:

index.phpглавный файл нашего проекта. Этот файл будет отвечать за подключение нужного ПО а так же за всю работу навигации как по сайту в целом, так и внутри каталогов.

config.phpфайл, содержащий настройки БД, а так же набор различных констант( пароль мерчанта платёжной системы, внешний и внутренний ключ recaptcha – о ней мы поговорим позже )

Папки:

action и design в этих папках будут храниться PHP файлы с абсолютно одинаковыми именами но разными назначениями. Почему так? Выше оговаривалось, что наш проект будет придерживаться особых правил. Основное правило – правило шаблонизации. Папка action предназначена для хранения php скриптов-обработчиков. Это значит что обработка разного рода данных, работа с MySQL и тд будет происходить именно в этих файлах. Работа с HTML разметкой в любом файле, расположенном в папке action запрещена. В папке design, наоборот, будут храниться файлы, отвечающие за вывод HTML разметки в браузер. Здесь использовать php разрешается исключительно для генерации и вывода HTML разметки в браузер. Используя такой подход мы, во-первых, максимально отделим php код от HTML, ну а во-вторых, вдальнейшем облегчим себе работу с проектом, ведь интеренет-магазины представляют собой мощнейшие системы с веб интерфейсом.

flashэта папка будет содержать различные Flash объекты

goodsздесь будут храниться изображения и их уменьшенные копии товаров нашего магазина

highslideпапка содержащая JavaScript библиотеку HighSlide JS.

images – папка хранящая в себе нарезанные изображения нашего макета( шаблона сайта )

include – папка содержащая дополнительное ПО сопровождающее работу интернет-магазина

javascripts – здесь будут храниться подключаемые JavaScript файлы

languages – здесь будут расположены языковые файлы

logos – папка с логотипами производителей

motools – папка содержащая JavaScript FrameWork

styles – папка и таблицами стилей CSS

tinymce – папка содержащая wysiwyg редактор TinyMCE

2.5 Разработка необходимого программного обеспечения(ПО), поддерживающего работу интернет-магзина.

2.5.1 Разработка класса для работы с MySQL

В наше время одним из профессиональных подходов к веб разработке является наличие собственных API функций для работы с различными БД. Сразу же всплывает вопрос – зачем заново изобретать колесо, ведь PHP уже включает в себя набор функций для работы с различными БД? Ответ прост… Наличие собственных API функций для работы с БД( например, MySQL ) предоставляет нам следующие возможности:

Возможность удобной и быстрой отладки проекта

Возможность создания собственных универсальных методов, на основе стандартных( например, универсальный обработчик запросов MySQL )

Возможность усиленной защиты против SQL инъекций

Итак, проанализировав плюсы собственных API функций для работы с различными базами данных, создадим класс db_handler. Обязанности нашего только что созданного класса, будут следующими:

  •  Подключение и выбор базы данных в фоновом режиме. Пользователю не нужно будет самостоятельно подключаться к БД(а это лишний код и время).
  •  Наличие универсального метода, облегчающего работу с запросами MySQL.
  •  Наличие универсального метода, исключающего возможность SQL инъекции.
  •  Наличие методов, возвращающих результат выполнения стандартных функций для работы с MySQL(удобно при отладке проекта).

2.5.2 Разработка шаблонизатора

Что такое шаблонизатор? Шаблонизатор – ПО, которое помогает отделить логику приложения от его отображения.

Ранее уже оговаривались правила шаблонизации. Иногда бывают случай, когда нужно генерировать HTML страницу «на лету». А так как наше основное правило подразумевает отсутствие какого либо HTML в файлах-обработчиках, нам прийдётся искать любые выходы из этой ситуации. Здесь нам поможет только шаблонизатор.

Вообще шаблонизаторы бывают разных типов: от самых простых - до шаблонизаторов уровня Smarty. Заглянув немного вперёд и проанализировав  дальнейшую разработку, а именно генерацию содержимого корзины, отправку сообщений администрации и т. д., было решено разработать шаблонизатор, который бы умел работать как с переменными шаблона, так и с его блоками. Переменные шаблона будут выглядеть так:

#ИМЯ_ПЕРЕМЕННОЙ#, а блоки в свою очередь так – [#ОТКРЫВАЮЩИЙ ТЭГ БЛОКА#] и [/#ЗАКРЫВАЮЩИЙ ТЭГ БЛОКА#].

Алгоритм работы шаблонизатора будет работать следующим образом: сначала будет формироваться ассоциативный массив – где ключом будет являться плэйсхолдер, а значением – значение плэйсхолдера. Далее этот массив будет передан объекту класса шаблонизатора, где и будет происходить весь парсинг шаблона и пошаговая генерация HTML страницы, после чего, при помощи специального метода, будет осуществлён вывод HTML в браузер.

Приведём пример работы данного шаблонизатора. С его помощью сгенерируем письмо для отправки на e-mail. Для начала, создадим файл-шаблон mail.tpl( обычно к шаблонам применяется именно это расширение ) и вставим в него следущее содержимое.

Шаблон письма:

ИНФОРМАЦИЯ:

Email пользователя: #USER_EMAIL#

Тема сообщения:     #MESSAGE_TITLE#

Текст сообщения:    #MESSAGE_TEXT#

Обработчик письма будет следующим:

$user_data = Array

     (

        'USER_EMAIL'    => $USER_EMAIL,

                  'MESSAGE_TITLE' => $MESSAGE_TITLE,

                  'MESSAGE_TEXT'  => $MESSAGE_TEXT

      );

$TParser->ParseTpl( 'design/mail.tpl', $user_data );   

$message = $TParser->ParsedTpl();

if( mail( $to, $subject, $message ) )

{  

  $MESSAGE = 'Письмо доставлены администратору';

}

Как видно из примера, наличие шаблонизатора очень сильно облегчает разработку. Программисту нет необходимости писать огромные обработчики, а просто вызвать 2 функции.

2.5.3 Разработка ПО для создания уменьшенных копий изображения

Любой сайт, содержащий в себе галереи изображений должен обладать такой функцией, как создание превьюшек( уменьшенных копий изображений ). Ниже представлен исходный код, реализющий такую функцию, которая в дальнейшем будет подключена к нашему магазину:

function img_resize($src, $dest, $width, $height, $rgb=0xFFFFFF, $quality=100)

{

 if( !file_exists( $src ) )

 {

   return false;

 }

 

 $size = getimagesize($src);

 if( $size === false )

 {

   return false;

 }

 // Определяем исходный формат по MIME-информации, предоставленной

 // функцией getimagesize, и выбираем соответствующую формату

 // imagecreatefrom-функцию.

 $format = strtolower( substr( $size['mime'], strpos( $size['mime'], '/' ) +1 ) );

 $icfunc = "imagecreatefrom" . $format;

 

 if( !function_exists( $icfunc ) )

 {

   return false;

 }

 $x_ratio = $width / $size[0];

 $y_ratio = $height / $size[1];

 $ratio       = min( $x_ratio, $y_ratio );

 $use_x_ratio = ( $x_ratio == $ratio );

 $new_width   = $use_x_ratio  ? $width  : floor( $size[0] * $ratio );

 $new_height  = !$use_x_ratio ? $height : floor( $size[1] * $ratio );

 $new_left    = $use_x_ratio  ? 0 : floor( ( $width - $new_width ) / 2 );

 $new_top     = !$use_x_ratio ? 0 : floor( ( $height - $new_height ) / 2 );

 $isrc = $icfunc( $src );

 $idest = imagecreatetruecolor( $width, $height );

 imagefill( $idest, 0, 0, $rgb );

 imagecopyresampled( $idest, $isrc, $new_left, $new_top, 0, 0,

 $new_width, $new_height, $size[0], $size[1] );

 imagejpeg( $idest, $dest, $quality );

 imagedestroy( $isrc );

 imagedestroy( $idest );

 return true;

}  

2.6 Реализация системы безопасности сайта

Существуют различные виды атак на веб сайты, а так же различные вилы защиты от них. Защиту можно осуществить как на уровне кода, так и на уровне веб сервера( в данном случае Apache ). Наиболее популярной атакой в сети Интернет является Инъекция.

В наше время существуют следующие виды инъекций:

  •  SQL-инъекция — атака, в ходе которой изменяются параметры SQL-запросов к базе данных. В результате запрос приобретает совершенно иной смысл, и в случае недостаточной фильтрации входных данных способен не только произвести вывод конфиденциальной информации, но и изменить/удалить данные. Очень часто такой вид атаки можно наблюдать на примере сайтов, которые используют параметры командной строки (в данном случае — переменные URL) для построения SQL-запросов к базам данных без соответствующей проверки.
  •  PHP-инъекцияодин из способов взлома веб-сайтов, работающих на PHP. Он заключается в том, чтобы внедрить специально сформированный злонамеренный сценарий в код веб-приложения на серверной стороне сайта, что приводит к выполнению произвольных команд. Известно, что во многих распространённых в интернете бесплатных движках и форумах, работающих на PHP (чаще всего это устаревшие версии) есть непродуманные модули или отдельные конструкции с уязвимостями. Крэкеры анализируют такие уязвимости, как неэкранированные переменные, получающие внешние значения.
  •  Межсайтовый скриптинг или XSS (аббр. от англ. Cross Site Scripting) — тип уязвимостей, обычно обнаруживаемых в веб-приложениях, которые позволяют внедрять код злонамеренным пользователям в веб-страницы, просматриваемые другими пользователями. Примерами такого кода являются HTML-код и скрипты, выполняющиеся на стороне клиента, чаще всего JavaScript. Другие названия: CSS, реже — скрипт-инъекция.
  •  XPath-инъекция - вид уязвимостей, который заключается во внедрении XPath-выражений в оригинальный запрос к базе данных XML. Как и при остальных видах инъекций, уязвимость возможна ввиду недостаточной проверки входных данных.

В нашем случае, XPath-инъекция нам не страшна, так как наши планы не включают в себя использование баз данных XML. Однако первые три варианта инъекции остаются для нас актуальными. Для защиты нашего проекта от всех видов инъекций, в том числе и XPath-инъекций, мною было реализовано 2 функции, сводяших шансы вышеперечисленных инъекций к нулю. Рассмотрим алгоритм их работы…

Первая функция обеспечивает получение значения $GET_NAME из GET/POST запроса пользователя. На выходе гарантированно получаем ЧИСЛО. По умолчанию 0.

// Получение значения $GET_NAME из GET/POST запроса пользователя

// На выходе гарантированно получаем ЧИСЛО. По умолчанию 0

function GET_NUM($GET_NAME)

{

  global $DB;

  $IN_VAL;

  if( isset($_POST[$GET_NAME]) ) // Ищем параметр в POST

  {

$IN_VAL = $_POST[$GET_NAME];

   

if( is_numeric($IN_VAL) )

{

    return $IN_VAL;

}

  }

   if( isset($_GET[$GET_NAME]) ) // Ищем параметр в GET

   {

$IN_VAL = $_GET[$GET_NAME];

   

if( is_numeric($IN_VAL) )

 {

    return $IN_VAL;

}

   }

   

   return 0;}

Вторая функция обеспечивает получение значения $GET_NAME из GET/POST запроса пользователя. На выходе гарантированно получаем СТРОКУ с предзащитой от кривых значений.  По умолчанию ""( пустая строка ). Смотрим…

// Получение значения $GET_NAME из GET/POST запроса пользователя

// На выходе гарантированно получаем СТРОКУ с предзащитой от кривых значений.  По умолчанию ""

function GET_STR($GET_NAME)

{

global $DB;

$IN_VAL;

   if( isset($_POST[$GET_NAME]) )

   {

$IN_VAL = $_POST[$GET_NAME];

return $DB->ToSql($IN_VAL);

   }

   

   if( isset($_GET[$GET_NAME]) )

   {

$IN_VAL = $_GET[$GET_NAME];

return $DB->ToSql($IN_VAL);

   }

   return "";

}

Примечание:

Эта функция использует возвращаямое значение метода To_Sql( метод класса db_handler, работа которого была рассмотрена выше ).  Предзащита от вредных данных происходит путём их экранирования функцией mysql_escape_string() и последующего обрамления кавычками для максимальной защиты.

 

Пример использования:

Так же бывают случаи, когда злоумышленники и просто любопытные пользователи пробираются в каталоги сайта и получают доступ к различным файлам, изображениям и тд.

Этого так же не нельзя допустить. Решением этой проблемы является создание файлов-заглушек, запрещающих доступ к каталогам. Этими файлами являются

  •  .htaccess (от. англ. hypertext access) — файл дополнительной конфигурации веб-сервера Apache, а также подобных ему серверов. Позволяет задавать большое количество дополнительных параметров и разрешений для работы веб-сервера в отдельных каталогах (папках), таких как управляемый доступ к каталогам, переназначение типов файлов и т.д., без изменения главного конфигурационного файла. .htaccess является подобием httpd.conf с той разницей, что действует только на каталог, в котором располагается, и на его дочерние каталоги. Возможность использования .htaccess в том или ином каталоге указывается в httpd.conf (директива AllowOverride).
  •  index.phpосновной файл директорий, обслуживаемых веб серевером Apache.

Итак… Защитим директории нашего виртуального магазина. Первым делом создадим 2 файла: .htaccess и index.php. В файл .htaccess впишем следующий текст: Deny from all, что обозначает запрет на чтение любых файлов внутри а так же дочерних каталогов каталога, в котором расположен файл .htaccess. В файл index.php вставляем следующий код.

Рис. 36 «Файл-заглушка»

Почему мы защищаем директории сразу 2-мя файлами? Всё очень просто… Если в настройках Apache отключена директива AllowOverride, то мы запрещаем просмотр вручную с помощью файла index.php.

К безопасности также относятся такие понятия, как защита от роботов и защита информации при работе с платёжной системой. Их я опишу в седующих разделах.

2.7 Реализация системы навигации

2.7.1 Навигация по сайту

Система навигации по разделам нашего виртуального магазина реализована весьма необычно, однако принцип её работы остаётся стандартным. Необычность реализации заключается в шаблонизации проекта средствами php, а так же отсутствием подключения сторонних документов. Как говорилось ранее, наши правила предусматривают полное абстрагирование php от HTML. Приведём пример реализации:

Предположим, что мы осуществляем переход по пунктам меню. Для перехода используем следующий вид URL site/index.php?tab=x : где site – название сайта, а x – пункт меню.

Наши ссылочки:

<a href=”?tab=1”>Пункт 1</h1>

<a href=”?tab=2”>Пункт 2</h1>

<a href=”?tab=3”>Пункт 3</h1>

<a href=”?tab=4”>Пункт 4</h1>

<a href=”?tab=5”>Пункт 5</h1>

<a href=”?tab=6”>Пункт 6</h1>

 Защищаем от вредных данных. Создаём переменную TAB:

$TAB = GET_NUM(‘tab’);

Реализуем навигацию:

  1.  Подключаем необходимое ПО и файлы настроек.
  2.  Размечаем визуально область файла. В разделе ACTION будет  осуществляться подключение файлов-обработчиков из папки action. В разделе DESIGN -  подключаем файлы с HTML разметкой из папки design.

В итоге основной файл нашего проекта( именно он занимается навигацией и подключением необходимого ПО ) приобретает структурированный вид и становится лёгким для чтения и понимания исходного кода, что является огромным плюсом.

2.7.2 Навигация по каталогам

Ещё одним большим недостатком наших отечественных интернет-магазинов является работа пользователя с каталогами. Практически во всех Интернет-магазинах, работающих на территории Молдовы, каталоги представлены в виде выпадающих списков, что не очень удобно для пользователя. Продемонстрирую наглядные примеры:

Рис. 37 Проблема навигации по каталогам электронного магазина фирмы Ippon

Рис. 38 Проблема навигации по каталогам электронного магазина фирмы Matrix

Вышеперечисленные изображения наглядно демонстрируют нам всю непродуманность меню каталогов. На сайте магазина Ippon меню распадается на столько уровней, что заполоняет собою почти всю клиентскую область браузера. Что касается Matrix, то там немного иная оплошность. После щелчка мышкой по каталогу и последующей перезагрузки страницы, складывается ощущение того, что ничего не произошло. Пользователь может не заметить изменений в меню каталогов, так как отступ пунктов подменю является сравнительно небольшим. Наличие изображения с двойной стрелочкой так же затрудняет распознание каких-либо изменений после перезагрузки страницы.

Исходя из вышеперечисленных недостатков, мною было решено разработать универсальную систему работы с каталогами. В этом мне поможет javascript библиотека HighSlide JS и конечно же PHP.

2.7.2.1 Реализация каталогов 

Меню каталогов нашего электронного магазина будет выглядеть следующим образом:

Рис. 39 Меню каталогов нашего электронного магазина

Первым этапом реализации данного меню является выборка количества товаров, а так же название каждой из категорий. В данном случае следует учитывать то, что наш магазин включает в себя мультиязычность.

Итак, осуществляем выборку:

Рис. 40 Динамический SQL запрос на выборку каталогов

Выборка языка категорий осуществляется при помощи константы GOOD_CATEGORY, которая подгружается из языкового файла. Вторым этапом, будет вывод галереи брэндов.

Выборка брэндов:

Рис. 41 Динамический SQL запрос на выборку брэндов определённого каталога

Этот запрос формируется динамически, при помощи переменной $CATGORY_ID, пришедшей из URL. При выводе HTML вставляем в тэг <a> следующий javascript код:

Рис. 42 Назначение параметров HighSlide тэгу <a>

Получаем следующий результат:

Щелкаем по каталогу( например Ноутбуки )

Рис. 43 Вывод галереи брэндов

Щёлкаем по логотипу( например Acer  )

Наблюдаем красивый эффект всплывающего окна.

Попадаем в оригинальное меню, для выбора типа товара

Щёлкаем по выбранному типу…

Рис. 44 Отработка HighSlide эффекта всплывающего окна. Вывод каталогов типов.

Попадаем в раздел витрины каталога. Так же следует обратить внимание на панель навигации( она выделена голубым цветом )

Рис. 45 Витрина каталога.

Реализация последнего этапа:

Рис. 46 Динамический SQL запрос на выборку товаров определённого брэнда и типа товара.

Здесь мы выбираем данные из связанных таблиц ( goods и brands ), путём передачи в запрос параметров из URL( $BRAND_ID и  $BASED_ON_ID ).

Формирование навигации:

Рис. 47 Формирование навигации по каталогам.

Для раздела DESIGN делаем тоже самое, только изменяем папку action на папку design.

2.8 Реализация мультиязычности

Бывают различные методы реализации мультиязычности сайта. Я буду использовать следующий алгоритм реализации: в зависимости от состояния сессии( $_SESSION[‘language’] ), будут подключаться языковые файлы с константами с одинаковыми именами.

Константы будут содержать значение слов на том или ином языке, предусмотренного в нашем Интернет магазине, и будут выглядеть следующим образом: define( 'Имя константы', 'Значение' ). Почему именно константы? Дело в том, что интерпретатор обрабатывает константы быстрее чем обычные переменные. Рассмотрим алгоритм мультиязычности в деле…

Ранее уже обсуждалось, что у нас есть папка languages, специально предназначенная для хранения языковых файлов. Итак, работа с языками осуществляется при помощи сессий. При любом обращении к серверу наша система проверяет, не пришёл ли из URL параметр $_GET[‘language’].

Если пришёл, система задаёт соответственное значение переменной $_SESSION[‘language’], т.е  «en» или «ru». Если же параметр $_GET[‘language’] пуст – присваивается значение по умолчанию( ru ). Следующим этапом является подключение языковых файлов, в зависимости от состояния сессии. Исходный код, реализующий мультиязычность:

Рис. 48 Реализация мультиязычности

Последний блок if else инициализирует переменную для создания динамического SQL запроса, выводящего содержимое страниц на том или ином языке. Пример использования:

Рис. 49 Динамический SQL запрос на выборку мультиязычных страниц интернет-магазина

2.9 Разработка виртуальной корзины, с использованием технологии AJAX

2.9.1 Работа стандартной виртуальной корзины

Стандартная виртуальная корзина – это обычный массив сессии, где ключ массива – идентификатор товара, а значение – его количество. При добавлении товара, скрипт корзины проверяет наличие идентификатора добавленного товара среди ключей массива. Если такой ключ существует, скрипт инкрементирует значение данного ключа( товара ). Если нет, создаётся новый элемент массива( ключ => значение ). Следует заметить, что при каждом добавлении товара в корзину происходит обращение сайта к серверу, что влечёт за собой перезагрузку страницы. Каждая перезагрузка страницы – это лишнее время( в зависимости от сайта ). Если на сайте очень много flash объектов, изображений, огромный объём данных, выгружаемых из БД и т.д, то время полной перезагрузки страницы может занять 5-15, а то и больше секунд. Что это значит? Это значит, что большинство пользователей не будут тратить своё время на приобретение чего либо в данном интрнет-магазине( вряд ли их терпение позволит им вынести столь нудный процесс ). Это и есть тот самый большой минус работы стандартных виртуальных корзин. Редактирование стандартной корзины, так же является очень нудным процессом. Давайте рассмотрим интерфейс редактирования корзины:

Рис. 50 Редактор корзины электорнного магазина фирмы «Мир ноутбуков»

На самом деле, всё очень удобно, но опять же, любой денежный пересчёт  или удаление товара из корзины влечёт за собой перезагрузку страницы, а это – лишняя трата времени покупателя. К тому же при огромном списке товаров трудно будет сразу распознать изменения после какого-либо редактирования корзины.

Исходя из данного анализа, мною было решено разработать универсальную виртуальную корзину, которая обладала бы следующими возможностями:

  •  Сверхбыстрое добавление товаров( в течение считанных миллисекунд )
  •  Моментальное информирование покупателя о скидке
  •  Возможность быстрого редактирования корзины
  •  Возможность сбора данных для маркетинговой информации

Реализовать такую корзину мне помогут mootools( компактный javascript framework )

и технология AJAX( Asynchronous Javascript And XML  ).

2.9.2 AJAX. Преимущества и недостатки

AJAX (от англ. «Asynchronous Javascript and XML» — «асинхронный JavaScript и XML») — подход к построению интерактивных пользовательских интерфейсов веб-приложений, заключающийся в «фоновом» обмене данными браузера с веб-сервером. В результате, при обновлении данных, веб-страница не перезагружается полностью и веб-приложения становятся более быстрыми и удобными. AJAX — не самостоятельная технология, а концепция использования нескольких смежных технологий. AJAX базируется на двух основных принципах:

  •  использование технологии динамического обращения к серверу «на лету»
  •  использование DHTML для динамического изменения содержания страницы;

В качестве формата передачи данных обычно используются JSON или XML. Преимуществами AJAX являются:

  •  Экономия трафика - использование AJAX позволяет значительно сократить трафик при работе с веб-приложением благодаря тому, что часто вместо загрузки всей страницы достаточно загрузить только изменившуюся часть, часто довольно небольшую.
  •  Уменьшение нагрузки на сервер - AJAX позволяет несколько снизить нагрузку на сервер. К примеру, на странице работы с почтой, когда вы отмечаете прочитанные письма, серверу достаточно внести изменения в базу данных и отправить клиентскому скрипту сообщение об успешном выполнении операции без необходимости повторно создавать страницу и передавать её клиенту.
  •  Ускорение реакции интерфейса - поскольку нужно загрузить только изменившуюся часть, пользователь видит результат своих действий быстрее.

Недостатками AJAX являются:

  •  Отсутствие интеграции со стандартными инструментами браузера. Динамически создаваемые страницы не регистрируются браузером в истории посещения страниц, поэтому не работает кнопка «Назад», предоставляющая пользователям возможность вернуться к просмотренным ранее страницам, но существуют скрипты, которые могут решить эту проблему.
  •  Недостаток изменения содержимого страницы при постоянном URL заключается в невозможности сохранения закладки на желаемый материал. Частично решить эти проблемы можно с помощью динамического изменения идентификатора фрагмента (части URL после #), что позволяют многие браузеры.
  •  Динамически загружаемое содержимое недоступно поисковикам (если не проверять запрос, обычный он или XMLHttpRequest)
  •  Поисковые машины не могут выполнять JavaScript, поэтому разработчики должны позаботиться об альтернативных способах доступа к содержимому сайта.
  •  Старые методы учёта статистики сайтов становятся неактуальными
  •  Многие сервисы статистики ведут учёт просмотров новых страниц сайта. Для сайтов, страницы которых широко используют AJAX, такая статистика теряет актуальность.
  •  Усложнение проекта
  •  Перераспределяется логика обработки данных — происходит выделение и частичный перенос на сторону клиента процессов первичного форматирования данных. Это усложняет контроль целостности форматов и типов. Конечный эффект технологии может быть нивелирован необоснованным ростом затрат на кодинг и управление проектом, а также риском снижения доступности сервиса для конечных пользователей.

2.9.3 Процесс создания виртуальной корзины

2.9.3.1 Создание функции, запускающей вызовы AJAX

Первым этапом реализации нашей виртуальной корзины будет разработка JavaScript функции, осуществляющей асинхронную передачу данных между браузером и сервером. В этом нам поможет mootools - компактный JavaScript framework. Почему mootools? Дело в том, что реализовывать работу AJAX вручную( создание объекта XMLHttpRequest для различных браузеров описание функций и тд) отнимает лишнее время, а так же компенсируется большим объёмом кода( примерно 40 строк ). Mootools позволяет нам сразу же перейти к делу, т.е начать реализовывать наши планы, без лишних забот и с наименьшим объёмом кода. Так как у пользователя, помимо добавления товаров в корзину, должна так же быть возможность полного редактирования своей корзины( удаление, обновление ). Исходя из этого обстоятельства, можно сформулировать следующий алгоритм работы данной функции:

     1.   Пользователь совершает какое-либо действие

    2.   В функцию передаются  необходимые параметры:

    3.   Упаковка параметров в JSON формат

    4.   Отправка параметров( в JSON формате ) методом GET

    5.   Приём обработанных данных с веб сервера

    6.   Вставка значений( данных с веб сервера ) в тела нужных тэгов

Так же следует отметить, что функция всегда проверяет наличие скидки, а так же наличие товара в корзине.

Рассмотрим данный алгоритм более детально… Когда пользователь добавляет, удаляет или обновляет товар в корзине наша функция ManageCart принимает следующий список параметров:

  •  task – название действия
  •  item_id – идентификатор товара
  •  item_name – наименование товара
  •  item_qty – количество товара. По умолчанию 0. Этот параметр служит для обеспечения правильной работы обновления товаров в корзине( кло-во единиц товара и его общая стоимость ).
  •  item_price – цена товара в долларах
  •  currency – текущая валюта

Далее следует упаковка параметров в формат JSON. JSON(англ. JavaScript Object Notation) -  это текстовый формат обмена данными, основанный на JavaScript и обычно используемый именно с этим языком. Как и многие другие текстовые форматы, JSON легко читается людьми. Упакованные данные отправляются на сервер с помощью метода GET. При наступлении события OnSuccess происходит приём данных с сервера в формате JSON и их вставка в тела нужных тэгов. При этом функция так же проверяет наличие скидки. Если пришло уведомление о скидке, происходит вставка соответственного сообщение в тело тэга, предназначенного для вывода сообщения о скидке.

2.9.3.2 Разработка класса, обеспечивающего работу корзины

Для написания полноценного обработчика виртуальной корзины на стороне сервера, необходимо разработать ПО, которое занималось бы сбором и обработкой основной информации о покупках. Таким ПО может быть функция или класс. Я выбрал разработку класса.

Начнём с данных, которые должна хранить наша корзина. Стандартная виртуальная корзина обычно хранит небольшие массивы вида «идентификатор товара => количество единиц». А так как моей главной целью была разработка универсальной мультифункциональной корзины, мне пришлось полностью абстрагироваться от данного интерфейса корзины и разработать свой – универсальный. Итак… Моя корзина будет выглядеть следующим образом: я создам массив-сессию с пятью ключами, трое из которых будут являться массивами, а последние два – общим количеством товаров и их суммы.

Рис. 51 Интерфейс пустой корзины

Теперь создаем класс, который будет поддерживать работу данной корзины. Конструктор данного класса будет передавать по ссылке массив $_SESSION[‘cart’] закрытой переменной $cart

Рис. 52 Передача корзины по ссылке

Далее следует создание метода AddToCart, принимающего идентификатор товара, имя товара и цену товара. Внутри метода будут происходить следующие действия: метод проверяет наличие идентификатора товара в массивах items, item_name, item_price. Первым проверяется массив items. Если ключ( ID товара ) найдем, к его значению прибавляется единица( т.е увеличивается кол-во единиц данного товара на единицу ). Далее проверяются массивы item_name и item_price если данного ключа в них не найдено, создаются массивы item_name[Идентификатор товара]  = наименование товара  и item_price[Идентификатор товара]  = цена товара

Рис. 53 Метод, отвечающий за добавление товара в корзину

Удаление товара из корзины будет осуществлять метод DeleteFromCart. Данный метод будет  обходить в цикле каждый индекс массива $_SESSION[‘cart’] и проверять, является ли каждый он массивом. Если да то будет происходить удаление всех массивов, ключом которых будет являться идентификатор товара. В качестве аргумента метод принимает идентификатор товара.

Рис. 54 Метод, отвечающий удаление товара из корзины

Обновлением количества какого-либо товара в корзине пользователя будет заниматься метод UpdateItemQuantity, который в качестве аргументов будет принимать идентификатор товара и количество единиц товара, которое следует прибавить.

Рис. 55 Метод, отвечающий обновление количества единиц товара

Добавлением общего количества товаров а так их общей стоимости будет заниматься метод SetTotalPriceAndItems, который в качестве аргументов будет принимать общее количество и стоимость товаров.

 

Рис. 56 Метод, устанавливающий итоговое количество единиц и стоимости товара

2.9.3.3 Создание файла-обработчика виртуальной корзины

Настало самое время написать файл-обработчик виртуальной корзины с использованием методов класса, описанного выше. Цель данного файла – окончательное формирование данных для отправки нашей AJAX функции. Данные формируются с учётом выбранной пользователем валюты, а так же происходит процесс формирования скидки. Разобьём создание данного файла на этапы:

Первый этап: подключение класса, обеспечивающего работу корзины

Второй этап: инициализация вспомогательных переменных

$total_items – здесь будет храниться общее количество товаров в корзине

$total_price - здесь будет храниться общая стоимость товаров в корзине

$update_good_price – обновлённая цена товара

$json_answer – ответ в формате json

Третий этап: определение действия пользователя

Рис. 57 Определение действия пользователя. Передача необходимых аргументов методам класса корзины

Четвёртый этап: проверка наличия товаров в корзине:

Если корзина пуста, браузеру отправляются пустые данные в формате JSON, а так же обнуляются значения массивов $_SESSION['cart']['item_qty'] и $_SESSION[‘cart’][‘item_total_price’].

Рис. 58 Формирование ответа браузеру в формате JSON

Если же в корзине есть хотя бы один товар, наступает пятый этап

Пятый этап: подсчёт общего количества и стоимости товаров в корзине

Рис. 59 Подсчёт общего количества и стоимости товаров в корзине

Шестой этап: формирование скидок с учётом выбранной валюты

В зависимости от текущей валюты формируем скидку. Пользователю необходимо наглядно предоставить скидку, как в леях, так и в долларах США.

Таблица 2

Система скидок нашего электронного магазина

Сумма(лей)

Скидка(%)

от

до

1000

3000

3

3000

5000

5

5000

10000

10

10000

20

Рис. 60 Исходный PHP код, реализующий обработку скидок

Седьмой этап: формирование ответа браузеру

Ответ будет отправлен браузеру в формате JSON

Рис. 61 Формирование ответа браузеру

2.9.3.4 Вывод содержимого корзины в браузер

Так как генерация содержимого корзины будет происходить «на лету»( т.е по мере обработки данных ), мы воспользуемся шаблонизатором, назначение которого оговаривалось выше. Уже оговаривалось, что шаблонизатору будет отправляться массив  данных, для дальнейшей обработки шаблона. Рассмотрим наши шаблоны:

Шаблон корзины:

<form action="?tab=15&language=#LANGUAGE#&currency=#CURRENCY#" name="checkout_form" method="post">

<table border="0" cellpadding="5" cellspacing="0" class="shop_table">

 <tr>

  <td colspan="5" align="center"><b>#SHOPPING_CART#</b></td>

 </tr>

 <tr>

  <th>#GOOD#</th><th>#PRICE(curr)#</th><th>#AMOUNT#</th><th>#RESULTING_GOOD_COST(curr)#</th><th>#DELETE_GOOD#</th>

 </tr>

 [#ITEMS_INFO_BLOCK#]

  <tr id="basket_unit#GOOD_ID#">

   <td align="center"><a href="?good_id=#GOOD_ID#">#GOOD_NAME#</td>

   <td align="center">#GOOD_PRICE#</td>

   <td align="center"><input type="text" style="width: 48px; border:1px solid gray;" class="update_elems" name="qty_input" id="item_qty#GOOD_ID#" value="#GOOD_QTY#"  onkeyup="ManageCart('calc', #GOOD_ID#, '#GOOD_NAME#', this.value, #GOOD_PRICE#, '#CURRENCY#');" /></td>

   <td align="center" id="updated_price#GOOD_ID#" class="gh">#RESULTING_GOOD_PRICE#</td>

   <td align="center"><a href="#" class="view_basket" onclick="ManageCart('delete', #GOOD_ID#, '#GOOD_NAME#', 0, #GOOD_PRICE#, '#CURRENCY#'); HideBasketUnit('basket_unit#GOOD_ID#');"><img src="images/001_05.gif" border="0" /></a></td>

  </tr>

 [/#ITEMS_INFO_BLOCK#]

 <tr>

  <td style="font-weight:600;">#RESULTING_PRICE#</td>

  <td></td>

  <td style="font-weight:600;" align="center"><span id="basket_items">#TOTAL_ITEMS#</span></td>

  <td style="font-weight:600;" align="center"><span id="basket_price">#TOTAL_PRICE#</span></td>

  <td></td>

 </tr>

 <tr><td height="15"></td></tr>

 <tr>

  <td colspan="5" align="center">

   <input type="submit" name="basket_submit" value="#BUY#" />

   <input type="hidden" name="action" value="buy" />

  </td>

 </tr>

</table>

</form>

Создаём массив плэйсхолдеров и их значений:

Рис. 62 Массив плэйсхолдеров и значений переменных шаблона

Данный массив содержит плэйсхолдеры шапки корзины и подвала. Необходимо так же в цикле сформировать «на лету» и прикрепить к массиву $basket_data массив блоков переменных и плэйсхолдеров для тела корзины. После этого отправляем шаблонизатору наш массив $basket_data и шаблон, в который нужно подставить значения из данного массива.

Рис. 63 Формирование «на лету» и прикрепление массива блока переменных и плэйсхолдеров к массиву $basket_data

Последним этапом является вывод готовой корзины в браузер.

Воспользуемся специальным методом нашего шаблонизатора

$TParser->OutputParsedTpl();

2.10 Создание пользовательских аккаунтов

После процедуры регистрации пользователь попадает в свой личный раздел – аккаунт, где он может ознакомится с подробной историей своих заказов, статусом текущего заказа общей суммой и количеством заказов и т.д. Так же у пользователя есть возможность изменять свои личные данные.

2.10.1 Навигация внутри аккаунта

Меню пользовательского будет выглядеть следующим образом:

Рис. 64 Меню пользовательского акаунта

Разработаем систему навигации внутри аккаунта. В разделе ACTION основного файла нашего магазина( index.php ) вставляем следующий код:

Рис. 65 Система навигации внутри аккаунта(Техническая часть)

По умолчанию загружаются настройки главной страницы аккаунта.

В разделе DESIGN основного файла нашего магазина( index.php ) вставляем следующий код:

Рис. 66 Система навигации внутри аккаунта(Вывод HTML разметки)

Первая строка подключает файл авторизации( HTML ) если пользователь ещё не авторизировался. Если пользователь уже авторизировался – подгружаются HTML блоки( разделы аккаунта ) в зависимости от действий пользователя. По умолчанию загружается главная страница аккаунта.

Рис. 67 Главная страница пользовательского акаунта

2.10.2 Разделы аккаунта

2.10.2.1 Главная страница

После авторизации, или только что зарегистрировавшись, пользователь попадает на главную страницу своего аккаунта, которая загружается по умолчанию. Данный раздел уведомляет пользователя о текущем статусе его заказа, заказах на стадии проверки платёжной системы, общей стоимости и количестве заказов и т. д.

Рис. 68 Главная страница пользовательского акаунта

Сумма всех заказов пересчитывается в зависимости от выбранной вылюты.

Рис. 69 Обработчик главной страницы пользовательского акаунта

2.10.2.2 Изменение личных данных

Данный раздел отвечает за изменение личных данных пользователя. Для большего удобства, поля формы( кроме поля «пароль» ) будут заполнены текущими данными пользователя. Так пользователь всегда будет видеть свои текущие данные.

Рис. 70 Страница изменения пользовательских данных

2.10.2.3 История заказов

Данный раздел предоставляет пользователю возможность детального ознакомления  с его заказами. Так же пользователю предоставляется возможность полного удаления истории заказов.

Рис. 71 Интерфейс раздела просмотра истории заказов

 Примечание:

Обработчик данного раздела так же генерирует вывод HTML отображения раздела при помощи шаблонизатора.

2.10.2.4 Выход из аккаунта

Выход из аккаунта представляет из себя уичтожение пользовательской сессии.

Рис. 72 Выход из аккаунта

2.11 Работа интернет-магазина с платёжной системой

2.11.1 Платёжная система LiqPay

LiqPAY — открытая платежная система, которая позволяет перевести деньги с помощью мобильного телефона, Интернета и платежных карт во всём мире.

2.11.2 Возможности LiqPay

Счёт LiqPAY — это номер мобильного телефона в международном формате.

Система LiqPAY позволяет:

  •  создавать микроплатежи (платежи от 0,01 у.е.);
  •  создавать массовые платежи;
  •  создавать мгновенные переводы между счетами LiqPAY;
  •  принимать платежи на сайте;
  •  производить оплату услуг:
    •  пополнять счёт мобильного телефона;
    •  оплачивать услуги Интернет-провайдеров;
    •  оплачивать услуги связи;
    •  платить за охранные системы;
    •  использовать платёжные и обменные сервисы;
    •  платить за услуги телевидения, радио;
    •  оплачитвать хостинг, домены;
    •  оплачивать коммунальные услуги;
  •  отправлять и получать деньги;
  •  снимать деньги через банкоматы ПриватБанка на территории:
  •  Украины;
  •  России;
  •  совершать обмен валют между счетами LiqPAY;
  •  создавать платформы API;
  •  обналичивать чеки Google.

2.11.3 Безопасность системы LiqPay

Безопасность реализуется технологией OTP (One-time Password — одноразовый пароль), а также технологией 3D secure code. Операции подтверждаются динамическим одноразовым паролем, который высылается в SMS-сообщении.

В марте 2010 года безопасность СМС паролей была поставлена под сомнения ввиду возможности фишинговых и человек посередине атак из-за того, что сообщения СМС не были должным образом помечены как идущие от LiqPAY.

2.11.4 Оформление заказа

При оформлении заказа система проверят наличие авторизированного пользователя. Если пользователь не авторизирован, ему предлагается пройти процесс авторизации. Если же пользователь авторизирован – происходит следующая процедура:

  •  Занесение информации о заказе в БД
  •  Направление пользователя на платёжную систему

Для работы с LiqPay я выбрал API Click&Buy 1.0. С помощью ClickNBuy администратор Интернет-магазина сможет принимать платежи с карт Visa/MasterCard и со счетов LiqPAY.

Для отправки данных я воспользовался формой предлагаемой системой LiqPay.

Данная форма будет иметь следующий вид:

<form action="https://liqpay.com/?do=clickNbuy" method="POST" accept-charset="utf-8">

   <input type="hidden" name="version" value="1.1" />

   <input type="hidden" name="merchant_id" value="Id мерчанта" />

   <input type="hidden" name="amount" value="Общая стоимость покупки" />

   <input type="hidden" name="currency" value="Тип валюты" />

   <input type="hidden" name="description" value="Описание товара(опционально)" />

   <input type="hidden" name="order_id"  value="Id заказа(опционально)" />

   <input type="hidden" name="result_url" value="URL для пользователя"  />

   <input type="hidden" name="server_url" value="URL для администратора" />

</form>

Строка <input type="hidden" name="result_url" value="URL для пользователя"  /> означает то, что на этот URL приходят все параметры покупки и подпись(signature) мы можем понять что человек действительно заплатил, а не хакер пытается обмануть нашу систему.

О том что покупка совершена говорит status="success", покупка отклонена status="failure", а если status="wait_secure то платеж находится на проверке. Проверка происходит когда человек первый раз оплачивает своей картой в системе, система пока молодая так что status="wait_secure" будет происходить часто, чтобы обрабатывать такие платежы вам поможет параметр server_url, об этом читайте ниже. Если вы не пользуетесь автоматикой, то вы должны дождаться когда транзакция пройдет проверку и вам поступят деньги от нее, это видно в аккаунте системы.

Для того чтобы автоматизировать покупку я использовал необязательный параметр:

<input type="hidden" name="server_url" value="URL для администратора" />.

На этот URL будут приходить все параметры покупки и подпись(signature) от  сервера LiqPay(т.е. в обход пользователя). Отличие от result_url только в том что result_url происходит при редиректе в браузере клиента, а server_url происходит от сервера LiqPay (пользователь его вообще не видит).

server_url необходим потому что:

  •  если пользователь по какой-то причине не дошел до result_url хотя удачно оплатил или отменил оплату, то на server_url придет запрос от сервера LiqPay об удаче или отмене, и мы сможем  закрыть операцию покупки все равно.
    •  если пришел status="wait_secure", это значит что платеж на проверке, и только server_url нам сообщит после проверки о том что платеж одобрен(status="success") или отклонен(status="failure"), result_url после проверки не приходит!

Параметр order_id - это идентификатор покупки, максимальная длина - 127 символов. Параметр необязательный, но для автоматизированной системы продажи рекомендуется его использовать с настройкой "Требовать уникальность order_id" для того чтобы конкретную единицу товара могли купить только один раз и для того чтобы нас не обманули простыми повторными запросами на result_url! В order_id нельзя использовать символ "|"! Можно не использовать уникальность order_id т.к. приходящий параметр transaction_id  уникален для каждой оплаты вне зависимости от order_id.

Подпись считается следующим образом:

signature_source = "|" + version + "|" + merchant_password + "|" + action_name + "|" + sender_phone + "|" + merchant_id + "|" + amount +"|" + currency + "|" + order_id + "|" + transaction_id + "|" + status + "|" + code + "|"signature=base64(sha1(signature_source))

$sign=base64_encode(sha1($signature_source,1));

 Проверка контрольной суммы данных, присланных платежной системой(чтение подписи):

Рис. 73 Чтение подписи

2.12 Разработка системы управления содержимым

Администрированием любого сайта занимается CMS( Content Managing System ) или система управления содержимым. В наше время существует огромное множество различных CMS: Joomla, Wordpress и тд. Однако, не смотря на это, я решил разработать свою собственную CMS. Я принял такое решение, так как уже готовые системы – очень часто трудны в плане освоения. Гигантский набор различного функционала и чаще всего не очень качественный перевод делает трудным понимание данных систем.

2.12.1 Задачи CMS

Моя CMS будет выполнять основные задачи администрирования. Этими задачами

являются:

  •  Добавление, удаление и полное редактирование товаров;
  •  Управление брэндами и логотипами;
  •  Редактирование настроек администратора а так же содержания на веб-страницах интернет-магазина;
  •  Возможность получения полной информации о пользователях

2.12.2 Создание разделов

Исходя из задач моей будущей CMS, будут созданы следующие разделы:

  •  Каталог - добавление, удаление и полное редактирование товаров;
  •  Брэнды и логотипы - управление брэндами и логотипами;
  •  Настройки - редактирование настроек администратора а так же содержания на веб-страницах интернет-магазина;
  •  Пользователи - полная информации о пользователях

2.12.2.1 Каталог

Зайдя в раздел управления каталогами, администратор получает возможность выбора нужной ему категории товаров для редактирования, или создать новую категорию( каталог ).

Рис. 74 Раздел управления каталогами

Исходный код данного раздела:

Рис. 75 Обработчик раздела управления каталогами

Щёлкнув по нужному каталогу, администратор попадает в раздел редактирования товаров.

Рис. 76 Пример блока редактирования товаров

Выше представлена одна из форм с товаром. Очевидно, что все параметры каждого товара могут быть изменены. Так же товар может быть с лёгкостью удалён.

Обработчик данного раздела проверяет допустимый размер изображения, его тип и наличие во временной директории. Так же осуществляются различные проверки входныз данных.

2.12.2.2 Настройки

Зайдя в данный раздел, администратор с лёгкостью может изменить личные настройки, а так же отредактировать содержимое страниц интернет-магазина. Интерфейс раздела выглядит так:

Рис. 77 Раздел изменения содержимого страниц электронного магазина и настроек администратора

Редактор страниц – это сслыка генерирующая эффект всплывающего окна с тэгом <iframe>. Данный эффект реализовывает JavaScript библиотека HighSlide. За редактирование страниц отвечает совершенно другой документ, так как <iframe> подгружает в своё тело сторонние документы. Для начала рассмотрим обработчик настроек администратора:

Рис. 78 Обработчик раздела изменения содержимого страниц электронного магазина и настроек администратора

Теперь рассмотрим редактор страниц. При нажатии на ссылку получаем следующий результат:

Рис. 79 Интерфейс редактирования содержания страниц электронного магазина

Теперь рассмотрим область редактирования. Самим редактором является висивиг(wysiwyg) редактор TinyMCE – это мощный редактор с огромным набором функционала, таким, как работа с флэш объектами, изображениями и тд. Панель снизу позволяет администратору выбирать для редактирования страницы с учётом того или иного языка.

Рис. 80 Пример редактирования страницы

Обработчик редактора страниц представлен ниже:

Рис. 81 Обработчик редактирования страницы

2.12.2.3 Брэнды и логотипы

Данный раздел позволяет управлять брэндами и их логотипами нашего интернет-магазина. У администратора появляется возможность полного контроля над всеми брэндами. Рассмотрим интерфейс раздела:

Рис. 82 Интерфейс раздела управления юрэндами и логотипами

Как видно, раздел обладает очень удобным пользовательским интерфейсом. Всегда показывается изображение логотипа, а выше название брэнда, что является очень удобным моментом.

При добавлении брэнда так же отрабатывает небольшой JavaScript валидатор, устраняющий риск ввода неправильных данных.

Рис. 83 JavaScript валидатор формы для добавления нового брэнда

Так же предусмотрены необходимые проверки на стороне сервера( максимальный размер файла, допустимый тип файла и тд. ).

2.12.2.4 Пользователи

Иногда администрации может понадобиться узнать о той или иной покупке, совершённой пользователем в определённый период времени, просмотреть статистику заказов в своём интернет-магазине, просмотреть личные данные пользователя и тд. В этом администрации поможет раздел «Пользователи». Зайдя в данный раздел можно увидеть полный список пользователей, зарегистрированных в нашем интернет-магазине. При желании администратор может просмотреть личные данные и историю заказов кого либо из списка. Так выглядит сам список:

Рис. 84 Интерфейс раздела, содержащего список пользователей электронного магазина

Навигация в списке осуществляется при помощи переменных setting и user_id. Переменная  setting сообщает системе о выбранном действии, а user_id служит для формирования динамических SQL запросов. Продемонстрирую файл-обработчик, осуществляющий выборку данных для определённого пользователя. В данном случае рассматривается обработчик личных данных пользователя.

Рис. 85 Обработчик раздела, содержащего список пользователей электронного магазина

Более сложная выборка осуществляется при выводе истории заказов пользователя.

Рис. 86 Динамический SQL запрос, осуществляющий выборку полной истории заказов определённого пользователя

Личные данные:

Рис. 87 Интерфейс раздела личных данных ползователя

При генерации HTML данного раздела я так же реализовал проверку существования некоторых пользовательских данных, являющимися необязательными при регистрации.

Для генерации истории заказов пользователей так же быд использовал шаблонизатор.

Рис. 88 Массив данных для отправки шаблонизатору

2.13 Внедрение дополнительных функций в  интернет-магазин

2.13.1 Создание автоматизированной акции

Так же как и реальный магазин, виртуальный магазин должен чем-то привлекать внимание пользователей, ведь даже наличие мощной корзины, удобных каталогов и тд, не сможет привлечь внимание пользователя как, например, привлекательная акция. Цель данной акции – убедить как можно больше покупателей приобрести определённый товар по определённой цене, в определённые сроки. Взглянем на акцию:

Рис. 89 Содержание акции

Это значит, что с февраля по июнь 2010 года покупатель может приобрести любой ноутбук компании Acer на 1000 лей дешевле. Исходя из этого, необходимо написать процедуру, реализующую данную акцию. Так же необходимо учитывать выбор валют, т.е если покупатель выбирает доллар, ему необходимо предоставить сумму в долларах, пересчитанную с учётом скидки. Рассмотрим процедуру, реализующую скидку:

   

Рис. 90 Обработчик акции

Данная процедура выведет пользователю сумму без скидки( перечёркнутую ) и сумму со скидкой:

Рис. 91 Работа акции в действии

2.13.2 Вывод текущего курса доллара

Так в нашем виртуальном магазине пользователю предоставляется выбор нужной ему валюты( леи и доллары ), то было бы неплохо предоставить ему возможность ознакомления с текущим курсом доллара. Перед демонстрацией исходного кода модуля курсов валют – я объясню алгоритм его работы:

  1.  Модуль выявляет текущую дату;
    1.  Осуществление подключения к XML файлу( с курсами всех валют ) национального банка Молдовы по текущей дате;
      1.  Удаление всех валют из БД;
      2.  Парсинг XML файла с валютами. Формирование данных для вставки в БД;
      3.  Вставка данных в БД;
      4.  Выборка наименования нужной валюты и её курса из БД;

Прежде всего, создадим необходимую таблицу в нашей БД для хранения валют:

CREATE TABLE  `itsupply`.`valute` (

 `valute_id` int(10) unsigned NOT NULL auto_increment,

 `valute_charcode` varchar(5) NOT NULL,

 `valute_numcode` int(10) unsigned NOT NULL,

 `valute_name` varchar(45) NOT NULL,

 `valute_value` decimal(7,4) NOT NULL,

 PRIMARY KEY  (`valute_id`),

 UNIQUE KEY `Index_charcode` (`valute_charcode`)

) ENGINE=MyISAM AUTO_INCREMENT=21880 DEFAULT CHARSET=utf8;

Вышеприведённый запрос означает то, что мы создаём таблицу с необходимыми нам полями и, внимание, уникальным индексированным полем, для стопроцентной уверенномти в том, что данные у нас не повторяться. Так же важным моментом является проверка работоспособности ссылки, по которой мы подключаемся к XML файлу.

Исходный код модуля:

Рис. 92 Модуль загрузки курсов валют

2.11.3 Создание облака тэгов

Облако тегов или Облако меток или Облако ключевых слов (англ. tag cloud, wordle) - визуальное представление списка ярлыков (или категорий). Частота упоминаний, поисков, ссылок в интернете с определённого сайта неких слов, терминов, имён, отображается в специальной области в виде изображения этих слов в формате гиперссылок. Размер изображения тем больше, чем чаще использовался данный тег (слово, термин или имя).

Облако тегов может быть реализовано в виде трехмерного Flash-ролика. Это является ключевым моментом, так как происходит максимальное привлечение внимания покупателя к интернет-магазину. Обычный список производителей не так впечатлил покупателя.

Облако тегов создаётся с помощью Javascript, PHP и Flash. С помощью PHP мы можем задать облаку настройки, рассчитать размер шрифта каждой ссылки, выбрать нужные тэги из БД. JavaScript, в свою очередь, создаёт SWF объект и передаёт ему параметры, сгенерированные при помощи PHP.   

Наше облако тэгов:

Рис. 93 Облако тэгов

Функция принимает аргумент-массив $options – настройки облака.

Выводы

Таким образом, в проделанной мной работе я изучил возможности комплексного использования гипертекстового препроцессора(PHP) и сервера баз данных(MySQL). Так же мною была освоена технология AJAX и методы её использования. Были изучены методы вызовов AJAX функций с помощью mootoolsjavascript библиотеки.

В данной главе были рассмотрены такие актуальные вопросы, как:

  •  Быстрота обработки пользовательских действий;
  •  Система навигации, как по электронному магазину в целом, так и по его каталогам;
  •  Безопасность электронного магазина
  •  Работа пользователя с виртуальной корзиной;
  •  Пользовательские аккаунты
  •  Привлечение внимания покупателей
  •  Автоматизация заказов

Решены следующие частные задачи:

-спроектирована база данных электронного магазина;

-разработана система безопасности интернет-магазина;

-создана удобная структура файлов и папок в корневой директории Интернет-магазина;

-разработана удобная навигацию по сайту и каталогам;

-разработаны пользовательские аккаунты;

-разработана собственная виртуальная корзина с использованием новейших технологий и приёмов веб разработки;

-внедрения платёжная система для автоматизации заказов.

3. ЗАГРУЗКА ЭЛЕКТРОННОГО МАГАЗИНА В ИНТЕРНЕТ

3.1 Регистрация доменного имени

Для размещения нашего электронного магазина в сети интернет, было решено воспользоваться услугами одно из лучших хостинг-провайдеров Молдовы – провайдера «Host.md».

Наше решение обусловлено тем, что, во-первых, работа сервера данного хостинг-провайдера является наиболее стабильной. Редки случаи недоступности сайтов из-за проблемы работы сервера «Host.md». Во-вторых, «Host.md», обладает собственной мощной средой разработки веб приложений «XPanel», в-третьих, данный хостинг-провайдер  обладает внушительным пакетом  программных средств для разработки и сопровождения работы веб приложений любых категорий и уровней сложности.

Рис. 3.1 Пакет программных средств, предоставляемый хостинг-провайдером «Host.md»

Перед непосредственной процедурой регистрации доменного имени был выбран хостинговый план «Personal Standart», предоставляющий нам необходимые ресурсы сервера для загрузки, и в дальнейшем, сопровождения работы нашего электронного магазина.  

Рис. 3.1.1 Выбор плана размещения сайта на хостинге

Следующим этапом является непосредственная процедура регистрации доменного имени.

В поле формы указываем название нашего домена. Так уже заранее было определено название нашего электронного магазина(itsupply), придумать доменное имя не составит труда. Вписываем в поле формы наше доменное имя – itsupply.com.  

Рис. 3.1.2 Регистрация доменного имени

      

Рис. 3.1.3 Регистрация личных данных

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

3.2 Перенос сайта на удалённый хостинг

Теперь, когда наш аккаунт «Host.md» создан, можно заняться непосредственно загрузкой нашего электронного магазина на удалённый хостинг.

Первым делом, авторизиремся в системе при помощи нашего аккаунта и рассмотрим интерфейс контрольной панели нашего аккаунта - XPanel 

Рис. 3.2 Авторизация в системе «Host.md»

Рис. 3.2.1 Раздел выбора аккаунта

Заходим в раздел «Manage Account». Попадаем на начальную страницу нашего аккаунта.

Рис. 3.2.2 Главная страница аккаунта

Как видно из вышерасположенного рисунка «Host.md» предоставляет нам расширенное меню, позволяющее нам, как, создавать, загружать, редактировать наши сайты, так и просматривать настройки нашего раздела на хостинге и т.д.

Из меню нашего аккаунта нам понадобятся всего 2 вкладочки:

  •  Database – этот раздел служит для управления существующими базами данных через phpmyadmin – веб интерфейс для работы с базами данных.
  •   File Manager – этот раздел отвечает за управление сайтами.

3.2.1 Экспорт базы данных

Для того чтобы экспортировать нашу базу данных на удалённый хостинг, необходимо, первым делом, получить её «дамп» - *.sql файл, содержащий резервную копию базы данных. Для этого откроем командную строку WINDOWS.

Рис. 3.2.1 Вызов командной строки

При помощи командной строки проникаем в директорию c:\AppServ\MySQL\bin\. Именно здесь расположена утилита для создания «дампов» баз данных MySQL. Сохраняем резервную копию базы данных в файл backup.sql.

Рис. 3.2.1.1 Создание дампа базы данных

В вышеприведённом рисунке последняя команда работает по следующему алгоритму:

- слово mysqldump означает обращение к утилите mysqldump;

- следующими двумя словами(-u diplom -pdiplom) мы передаём утилите имя и пароль пользователя базы данных;

- участок «--default-character-set=utf8» задаёт всему дампу кодировку utf8;

- словом itsupply мы сообщаем утилите, дамп какой базы данных необходимо сохранить;

- последний фрагмент «> backup.sql» сообщает утилите о том, что нужно записать дамп базы данных в файл backup.sql.

Далее при помощи утилиты MySQL Query Browser соединяемся с сервером базы данных на удалённом хостинге.

Рис. 3.2.1.2 Соединение с сервером базы данных на удалённом хостинге

Следующим шагом будет собственно экспорт базы данных на удалённый хостинг.

Заходим в раздел File->Open Scriprt. Выбираем наш дамп. Жмём кнопку execute. Получаем следующий результат.

Рис. 3.2.1.3 Экспорт базы данных на удалённый хостинг

Рис. 3.2.1.4 Проверка экспорта базы данных на хостинге. Приложение phpmyadmin.

Рис. 3.2.1.5 Теперь в разделе Database видна наша новоиспечённая база данных.

3.2.2 Экспорт файловой структуры электронного магазина

Для экспорта файловой структуры нашего электронного магазина, воспользуемся FTP клиентом «net2ftp». Данное приложение представляет из себя FTP клиент с веб интерфейсом и является очень удобным в использовании.

Первым делом загрузим основные файлы нашего электронного магазина:

  •  index.php – главный индексный файл;
  •  config.php – файл с настройками доступа к БД.

Рис. 3.2.2 Интерфейс загрузки файлов на FTP сервер

Рис. 3.2.2.1 Только что загруженные файлы

Загрузка папок немного отличается от загрузки обычных файлов. Первым делом, все папки корневой директории нашего электронного магазина должны быть упакованы в архивы. При загрузки архивов на сервер, FTP клиент сам распакует и создаст папку.

Рис. 3.2.2.2 Паспаковка архивов на FTP сервере

Последнее, что осталось сделать – назначить права доступа некоторым папкам и файлам.

Файлу config.php устанавливаем права 444 – только чтение

Рис. 3.2.2.4 Установка прав доступа файлу config.php

Папкам goods и logos устанавливаем права доступа 777 – все привилегии.

Рис. 3.2.2.5 Установка прав доступа папкам logos и goods

Теперь наш электронный магазин полностью экспортирован на хостинг и может быть доступен по адресу http://www.itsupply.com.

Выводы

Исходя из работы, выполненной в данной главе, можно сделать следующие выводы:

 - получен опыт работы с хостинг-провайдерами;

 - исследованы методы экспорта веб сайтов на удалённый хостинг;

Помимо этого изучено понятие FTP клиента и методы работы с данного рода приложениями. Освоена утилита, обеспечивающая  экспорт баз данных MySQL – mysqldump. Усилена защита каталогов коневой директории электронного магазина средствами CHMOD(наделение файловой структуры правами доступа).


 

А также другие работы, которые могут Вас заинтересовать

57571. Ділення і множення десяткових дробів 85 KB
  Мета: узагальнити та систематизувати уміння та навички учнів виконувати дії з десятковими дробами; розвивати увагу, логічне мислення учнів; формувати пізнавальну компетентність...
57572. Задачі на відсотки. Дихання – найважливіша функція людського організму 43.5 KB
  Мета: Формувати вміння та навички учнів працювати з відсотками, розв’язувати задачі на відсотки: знаходження відсотків від числа та числа за його відсотком; розвивати навички усних обчислень...
57573. Мандрівка океаном Всесвіту 55.5 KB
  Організаційний момент Вступ Учитель Оріон син грецького бога морів Посейдона був хоробрим і вправним мисливцем. Інструктаж з техніки безпеки Учитель Перед початком подорожі нам обов’язково треба повторити правила роботи з основними пристроями.
57574. Арифметична прогресія, її властивості. Формула n – го члена 56 KB
  Мета уроку: Ввести поняття арифметичної прогресії розглянути її властивості; вивести формулу n-го члена та навчити учнів застосовувати її до розв’язування задач.
57575. Відсотки в задачах бізнесово-фінансового змісту 119.5 KB
  Мета: навчити учнів практичному застосуванню вивчених алгоритмів з теми “Відсотки” для розвязання задач бізнесового та фінансового змісту; знати, що в відсотках обчислюються кількісні та якісні показники роботи, економія матеріалів...
57576. Біогаз із сміттєзвалищ 343 KB
  Окиснення (аеробний процес) спостерігається тільки у верхніх шарах сміттєзвалища. У нижні шари комунальних відходів кисень не потрапляє. Від моменту перекривання доступу кисню, кисневі процеси відбуваються доволі швидко (кілька, або кільканадцять днів).
57577. Презентація проекту «Роде мій, красний» 41.5 KB
  Повторити значення слів рід родина рідня; дати поняття про щасливу сім’ю; навчити учнів складати родовідне дерево; виховувати повагу до членів сім’ї історії традицій своєї сім’ї.
57578. Свята та розваги в дошкільному навчальному закладі 67 KB
  Методика ознайомлення дітей з довкіллям у дошкільному навчальному закладу. Мовленнєвий розвиток дітей від народження до 7 років. Отже розглядаючи нормативноправові документи з дошкільної освіти можна стверджувати...
57579. Вертолет Ми-8 1.42 MB
  В данной дипломной работе мне предстоит разобрать силовую установку, ознакомиться с ее особенностями. Описать отказ (выключение) одного двигателя в полете, особенности летной и технической эксплуатации, технологию работы членов экипажа в особых случаях полета.