Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад] [Содержание] [Дальше]

Создание Web-приложений: Практическое руководство

© Александр Фролов, Григорий Фролов
М.: Русская Редакция, 2001, 1040 стр.

15. Магазин WWW.ITBOOK.RU и узел Web WWW.RUSEDIT.RU

15. Магазин WWW.ITBOOK.RU и узел Web WWW.RUSEDIT.RU.. 1

Структура базы данных.. 2

Таблицы Clients и Managers_rec. 3

Таблица Publishers. 3

Таблица Series. 4

Таблица Product_history. 5

Таблица Product 8

Таблица Showcase_fav. 9

Таблица Orders. 9

Таблица Product_corellation. 10

Таблица Rubricator. 11

Таблица Rubricator_items. 12

Таблица Zone. 13

Таблица Zone_tariff 13

Таблицы News и News2. 14

Таблица Replays. 16

Back-офис магазина www.itbook.ru.. 17

Подключение к  Back-офису. 17

Главная страница управления Back-офисом.. 17

Общая информация. 18

Раздел Издательство. 18

Раздел Серии книг. 21

Раздел Отзывы.. 23

Витрина издательства «Русская Редакция». 24

Раздел Книги издательства «Русская Редакция». 24

Раздел Лента новостей издательства «Русская Редакция». 30

Витрина магазина ITBOOK.. 31

Раздел Витрина избранных книг. 31

Раздел Редактор рубрикатора. 32

Работа с заказами. 34

Доставка. 35

Работа с клиентами. 36

Front-офис магазина www.itbook.ru.. 38

Витрины Интернет-магазина. 38

Корзина покупателя. 44

Обратная связь с посетителями. 46

Front-офис узла www.rusedit.ru.. 47

Витрина. 48

Планы издательства. 49

Архив книг. 50

Обратная связь с посетителями. 51

 

 

В этом разделе мы рассмотрим особенности реализации подсистем Интернет-магазина http://www.itbook.ru, разработанного нами по заказу издательства компьютерной литературы «Русская Редакция». Этот материал поможет Вам в реализации собственных проектов подобного рода.

Как мы уже говорили в предыдущей главе, магазин http://www.itbook.ru входит в кластер трех взаимосвязанных узлов Web, объединенных общей базой данных и общим физическим сервером IIS. Это узел Web самого магазина, расположенный по адресу http://www.itbook.ru, узел Web издательства компьютерной литературы «Русская Редакция» с адресом http://www.rusedit.ru, а также узел администрирования обоих перечисленных узлов Web, также доступный через Интернет по своему адресу URL (мы не приводим этот адрес из соображений безопасности).

Вначале мы расскажем о реализации административного узла Web, то есть Back-офиса, управляющего работой магазина http://www.itbook.ru и узла Web http://www.rusedit.ru, а затем перейдем к описанию соответствующих Front-офисов.

Структура базы данных

Прежде чем приступить к рассказу о приложениях Back- и Front-офиса, рассмотрим структуру базы данных с названием RR_DB, использованной в Интернет-магазине http://www.itbook.ru и узле Web http://www.rusedit.ru.

Ниже в табл. 15-1 мы перечислили все основные таблицы этой базы данных и привели краткое описание назначения этих таблиц.

Таблица 15-1. Таблицы базы данных RR_DB

Таблица

Описание хранящейся информации

Clients

Учетные записи зарегистрированных клиентов

Managers_rec

Учетные записи сотрудников магазина

Publishers

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

Series

Информация о сериях книг

Product

Основная витрина с книгами. На ней выставлены книги Интернет -магазина и книги издательства «Русская Редакция», информация о которых находится на страницах узла http://www.rusedit.ru

Product_history

Архив книг, которые когда-либо выставлялись на продажу в Интернет-магазине или на витрине узла издательства «Русская Редакция» http://www.rusedit.ru

Showcase_fav

Книги, выставленные в витрине на главной странице Интернет-магазина

Orders

Заказы, сделанные посетителями Интернет-магазина http://www.itbook.ru

Product_corellation

Статистическая информация о книгах, приобретаемых в Интернет-магазине

Rubricator

Эта таблица хранит древовидную структуру рубрикатора, отображаемого в левой части страниц Интернет-магазина

Rubricator_items

Информация о размещении книг по рубрикам

Zone

Сведения о тарифных зонах доставки почтой

Zone_tariff

Стоимость доставки для разных тарифных зон

News

Лента новостей, расположенная на главной странице узла http://www.rusedit.ru

News2

Лента новостей, расположенная на главной странице узла http://www.itbook.ru

Replays

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

Сделаем некоторые комментарии к этой информации.

Таблицы Clients и Managers_rec

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

Таблица Publishers

Таблица Publishers хранит информацию об издательствах. На записи этой таблицы есть ссылки в таблицах Product и Product_history, хранящих, в свою очередь, сведения о книгах.

Ниже для примера мы привели фрагмент сценария SQL, создающий таблицу Publishers:

CREATE TABLE [dbo].[PUBLISHERS] (
  [id] [int] IDENTITY (1, 1) NOT NULL ,
  [name] [varchar] (255) COLLATE SQL_Latin1_General_CP1251_CI_AS NOT NULL,
  [post_address] [varchar] (500) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL ,
  [phone] [varchar] (50) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL,
  [email] [varchar] (250) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL,
  [web] [varchar] (255) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL,
  [account] [varchar] (255) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL,
  [comment] [varchar] (500) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[PUBLISHERS] WITH NOCHECK ADD
  CONSTRAINT [PK_PUBLISHERS] PRIMARY KEY  NONCLUSTERED
  (
     [id]
  )  ON [PRIMARY]
GO

Назначение отдельных полей этой таблицы приведено ниже в табл. 15-2.

Таблица 15-2. Поля таблицы Publishers

Поле

Описание

id

Ключевое поле с атрибутом IDENTITY однозначно идентифицирует запись в таблице Publishers

name

Название издательства

post_address

Почтовый адрес издательства

phone

Номера телефонов издательства в произвольной форме

email

Адрес электронной почты издательства

web

Адрес узла Web издательства

account

Реквизиты издательства

comment

Произвольный текстовый комментарий

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

Таблица Series

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

CREATE TABLE [dbo].[SERIES] (
  [id] [int] IDENTITY (1, 1) NOT NULL ,
  [title] [varchar] (255) COLLATE SQL_Latin1_General_CP1251_CI_AS NOT NULL ,
  [annot_short] [varchar] (500) COLLATE SQL_Latin1_General_CP1251_CI_AS NOT NULL ,
  [annotation] [varchar] (2000) COLLATE SQL_Latin1_General_CP1251_CI_AS NOT NULL ,
  [have_pic] [int] NOT NULL ,
  [pic_type] [varchar] (4) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL ,
  [obsolete] [int] NOT NULL ,
  [comment] [varchar] (500) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL ,
  [show_in_publisher_site] [int] NOT NULL ,
  [sort_weight] [int] NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[SERIES] WITH NOCHECK ADD
  CONSTRAINT [DF_SERIES_obsolete] DEFAULT (0) FOR [obsolete],
  CONSTRAINT [DF_SERIES_show_in_publisher_site] DEFAULT (1) FOR [show_in_publisher_site],
  CONSTRAINT [DF_SERIES_sort_weight] DEFAULT (0) FOR [sort_weight],
  CONSTRAINT [PK_SERIES] PRIMARY KEY  NONCLUSTERED
  (
     [id]
  )  ON [PRIMARY]
GO

 CREATE  INDEX [pk_obsolete] ON [dbo].[SERIES]([obsolete]) ON [PRIMARY]
GO

 CREATE  INDEX [pk_show_in_publisher_site] ON [dbo].[SERIES]([show_in_publisher_site]) ON [PRIMARY]
GO

Назначение отдельных полей таблицы Series приведено ниже в табл. 15-3.

Таблица 15-3. Поля таблицы Series

Поле

Описание

id

Ключевое поле с атрибутом IDENTITY однозначно идентифицирует запись в таблице Series

title

Название серии книг, такое, например, как «Ваш спутник в Интернете» или «Учебный курс»

annot_short

Краткая аннотация на серию книг

annotation

Полная аннотация на серию книг

have_pic

Аннотация снабжена логотипом в виде графического изображения

pic_type

Тип файла графического изображения логотипа (GIF или JPG)

obsolete

Серия устарела и снята с витрины

comment

Произвольный текстовый комментарий

show_in_publisher_site

Эта серия отображается не только на страницах магазина http://www.itbook.ru, но и на страницах узла Web издательства «Русская Редакция» http://www.rusedit.ru

sort_weight

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

Как видно из этой таблицы, аннотация каждой серии книг может быть снабжена логотипом  в виде графического изображения. Файлы этих изображений хранятся на сервере Web отдельно от базы данных в специальном каталоге. Его имя определяется полем id, содержимое которого уникально для каждой записи таблицы Series.

Мы предусмотрели возможность хранения изображений в двух различных форматах — GIF и JPG. Тип файла определяется автоматически при его загрузке на сервер через браузер и сохраняется в поле pic_type.

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

Присутствие поля show_in_publisher_site объясняется необходимостью разделять серии книг, выпущенные издательством «Русская Редакция», и остальные серии. Если в этом поле хранится значение 1, то данная серия должна быть показана на витрине узла Web издательства http://www.rusedit.ru.

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

Таблица Product_history

В таблице Product_history хранится основная информация о книгах Интернет-магазина http://www.itbook.ru и узла Web издательства «Русская Редакция» http://www.rusedit.ru.

Вот сокращенный сценарий SQL, предназначенный для создания этой таблицы:

CREATE TABLE [dbo].[PRODUCT_HISTORY] (
  [id] [int] IDENTITY (1, 1) NOT NULL ,
  [series_id] [int] NULL ,
  [publisher_id] [int] NULL ,
  [product_type] [int] NOT NULL ,
  [title] [varchar] (255) COLLATE SQL_Latin1_General_CP1251_CI_AS NOT NULL ,
  [author] [varchar] (255) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL ,
  [isbn_no] [varchar] (50) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL ,
  [publish_year] [int] NULL ,
  [pages] [int] NULL ,
  [pictures] [int] NULL ,
  [cd_present] [int] NULL ,
  [cover_type] [int] NULL ,
  [status] [int] NOT NULL ,
  [cover_pic_present] [int] NOT NULL ,
  [pic_type] [varchar] (4) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL ,
  [cover_small_pic_present] [int] NOT NULL ,
  [pic_small_type] [varchar] (4) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL ,
  [sample_pdf_present] [int] NOT NULL ,
  [price] [int] NULL ,
  [bonus] [int] NOT NULL ,
  [hits1] [int] NOT NULL ,
  [hits2] [int] NOT NULL ,
  [hits3] [int] NOT NULL ,
  [hits4] [int] NOT NULL ,
  [hits5] [int] NOT NULL ,
  [total_customs] [int] NULL ,
  [shop_customs] [int] NULL ,
  [annotation_short] [varchar] (500) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL ,
  [annotation] [varchar] (6000) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL ,
  [standard] [varchar] (255) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL ,
  [obsolete] [int] NOT NULL ,
  [translated] [int] NULL ,
  [orig_title] [varchar] (255) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL ,
  [orig_author] [varchar] (255) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL ,
  [orig_isbn_no] [varchar] (50) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL ,
  [orig_publisher_id] [int] NULL ,
  [comment] [varchar] (500) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL ,
  [weight] [int] NOT NULL ,
  [comment1] [varchar] (50) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL ,
  [show_in_publisher_site] [int] NOT NULL ,
  [user_level_begin] [int] NOT NULL ,
  [user_level_end] [int] NOT NULL
) ON [PRIMARY]
GO

Описание отдельных полей таблицы Product_history Вы найдете в табл. 15-4.

Таблица 15-4. Поля таблицы Product_history

Поле

Описание

id

Ключевое поле с атрибутом IDENTITY однозначно идентифицирует запись в таблице Product_history

series_id

Идентификатор записи в таблице Series. С помощью этого идентификатора мы привязываем серию к книге (если данная книга входит в серию)

publisher_id

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

product_type

Код товара. Значение 0 соответствует книгам.

title

Название книги

author

Автор книги

isbn_no

Номер ISBN

publish_year

Год издания книги

pages

Количество страниц в книге

pictures

Количество иллюстраций в книге

cd_present

Наличие в комплекте с книгой диска CD-ROM или дискеты

cover_type

Тип обложки (мягкий переплет или твердая обложка)

status

Текущий статус книги (объявлена подписка, готовится к изданию, сдана в типографию, имеется в наличии и т.д.)

cover_pic_present

Имеется стандартное изображение обложки книги для показа на страницах узла Web Интернет-магазина и издательства «Русская Редакция»

pic_type

Тип файла стандартного графического изображения обложки (GIF или JPG)

cover_small_pic_present

Имеется уменьшенное изображение обложки книги для показа на страницах узла Web Интернет-магазина и издательства «Русская Редакция»

pic_small_type

Тип файла уменьшенного графического изображения обложки (GIF или JPG)

sample_pdf_present

Имеются примеры глав в виде файла PDF

price

Цена книги

bonus

Скидка для оптовых покупателей

hits1, hits2, hits3, hits4, hits5

Эти поля содержат количество оценок, выставленных данной книге посетителями Интернет-магазина или узла Web издательства «Русская Редакция». Поле hits1 хранит количество выставленных единиц, поле hits1 — количество выставленных двоек и т.д. На основе этой информации выставляется усредненная оценка книги

total_customs

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

shop_customs

Количество экземпляров данной книги, проданных через Инетрнет-магазин

annotation_short

Краткая аннотация на книгу

annotation

Полная аннотация на книгу

Standard

Количество книг в одной пачке

Obsolete

Книга устарела и снята с витрины

translated

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

orig_title

Название оригинальной зарубежной книги

orig_author

Автор оригинальной зарубежной книги

orig_isbn_no

Номер ISBN оригинальной зарубежной книги

orig_publisher_id

Идентификатор записи в таблице Publishers, соответствующей издателю оригинальной зарубежной книги

Comment

Произвольный текстовый комментарий

Weight

Вес книги в граммах

show_in_publisher_site

Эта книга отображается не только на страницах магазина http://www.itbook.ru, но и на страницах узла Web издательства «Русская Редакция» http://www.rusedit.ru

user_level_begin

Минимальный уровень знаний, необходимый читателю для работы с этой книгой (по пятибалльной шкале)

user_level_end

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

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

Поля series_id и publisher_id связывают таблицу Product_history с таблицами, хранящими информацию о сериях книг и издательствах. Таким образом, для каждой книги в базе данных хранится серия, к которой она принадлежит, и сведения о выпустившем ее издательстве.

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

Назначение полей с названиями title, author, isbn_no, publish_year, pages, pictures, cd_present, cover_type, status, price, bonus, total_customs shop_customs, annotation_short, annotation, Standard и некоторых других понятно из табл. 15-4 и не требует дополнительных комментариев.

Что же касается полей cover_pic_present, pic_type, cover_small_pic_present, pic_small_type и sample_pdf_present, то с их помощью можно узнать, хранятся ли в системе изображения обложки данной книги (обычного размера и уменьшенного), а также файл с примерами глав книги в формате PDF. Приложение Back-офиса позволяет обновлять эти изображения через браузер, не прибегая к таким средствам, как загрузка файлов в каталоги сервера Web через FTP.

Поля hits1, hits2, hits3, hits4 и  hits5 используются для хранения оценок, выставленных данной книге посетителями Интернет-магазина и узла Web издательства «Русская Редакция». Идея проста — каждое из этих полей хранит количество оценок, выставленных посетителями. На страницах Интернет-магазина и узла Web издательства отображается средняя арифметическая оценка, вычисленная на основании информации, хранящейся в этих полях.

Записав в поле Obsolete значение 1, администратор Интернет-магазина может снять данную книгу со всех витрин. Позже, если книга вновь появится в продаже (например, после выпуска дополнительного тиража), можно вновь вернуть книгу на витрины, изменив значение этого поля на 0.

Так как многие книги являются переводами оригинальных зарубежных книг, этот факт нашел свое отражение в базе данных. Если в поле translated записано значение 1, то поля orig_title, orig_author, orig_isbn_no и orig_publisher_id содержат сведения об оригинальной зарубежной книге. Таким образом, посетителям предоставляется возможность искать переводы зарубежных книг по их названию, автору, номеру ISDN или по названию издательства.

Таблица Product

Таблица Product содержит практически те же самые поля, что и таблица Product_history, плюс одно дополнительное поле с названием product_history_id.

Зачем она нужна?

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

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

Таблица Showcase_fav

Таблица Showcase_fav содержит идентификаторы книг, выставленных на главной витрине. Эта витрина расположена на главной странице Интернет магазина.

Вот исходный текст сценария SQL, предназначенный для создания этой таблицы:

CREATE TABLE [dbo].[SHOWCASE_FAV] (
  [id] [int] IDENTITY (1, 1) NOT NULL ,
  [id_book] [int] NOT NULL ,
  [sort_weight] [int] NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[SHOWCASE_FAV] WITH NOCHECK ADD
  CONSTRAINT [DF_SHOWCASE_FAV_sort_weight] DEFAULT (0) FOR [sort_weight],
  CONSTRAINT [PK_SHOWCASE_FAV] PRIMARY KEY  NONCLUSTERED
  (
     [id]
  )  ON [PRIMARY]
GO

Как видите, в таблице всего три поля (табл. 15-5).

Таблица 15-5. Поля таблицы Showcase_fav

Поле

Описание

id

Ключевое поле с атрибутом IDENTITY однозначно идентифицирует запись в таблице Showcase_fav

id_book

Идентификатор записи данной книги в таблице Product

sort_weight

Вес для сортировки

 

Обратите внимание на поле  sort_weight. С помощью этого поля можно изменять взаимное расположение книг на витрине, перемещая наиболее популярные книги в начало списка.

Таблица Orders

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

CREATE TABLE [dbo].[ORDERS] (
  [id] [int] IDENTITY (1, 1) NOT NULL ,
  [user_id] [int] NULL ,
  [area_id] [int] NOT NULL ,
  [info] [varchar] (2000) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL ,
  [reg_ip] [varchar] (15) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL ,
  [book_id] [int] NOT NULL ,
  [amount] [int] NOT NULL ,
  [add_date] [datetime] NOT NULL ,
  [processed] [int] NOT NULL ,
  [process_date] [datetime] NULL ,
  [opt_msg] [varchar] (2000) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL ,
  [pay_method] [int] NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[ORDERS] WITH NOCHECK ADD
  CONSTRAINT [DF_ORDERS_add_date] DEFAULT (getdate()) FOR [add_date],
  CONSTRAINT [DF_ORDERS_processed] DEFAULT (0) FOR [processed],
  CONSTRAINT [DF_ORDERS_pay_method] DEFAULT (0) FOR [pay_method],
  CONSTRAINT [PK_ORDERS] PRIMARY KEY  NONCLUSTERED
  (
     [id]
  )  ON [PRIMARY]
GO

Назначение отдельных полей таблицы Orders описано в табл. 15-6.

Таблица 15-6. Поля таблицы Orders

Поле

Описание

id

Ключевое поле с атрибутом IDENTITY однозначно идентифицирует запись в таблице Orders

user_id

Идентификатор покупателя по таблице Clients

area_id

Идентификатор тарифной зоны доставки по таблице Zone

info

Комментарий покупателя

reg_ip

Адрес IP, выделенный компьютеру посетителя, в момент совершения покупки

book_id

Идентификатор записи данной книги в таблице Product

amount

Общее количество приобретаемых книг

add_date

Дата оформления заказа

processed

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

process_date

Если установлен флаг обработки заказа (processed), то в этом поле хранится дата обработки заказа

opt_msg

Дополнительное сообщение посетителя администрации магазина

pay_method

Способ оплаты заказа (наложенным платежом, по предоплате и т.д.)

Когда посетитель оформляет заказ, в поле processed записывается нулевое значение. Такой заказ считается необработанным. После обработки (выполняемой администратором магазина вручную) в это поле записывается значение 1.

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

Что же касается поля area_id, то оно ссылается на таблицу Zone, хранящую информацию о тарифных зонах доставки. Мы опишем эту таблицу чуть позже.

Таблица Product_corellation

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

Результаты анализа содержимого таблицы Orders, в которой хранятся сведения о покупках, сделанных посетителями магазина, записываются в таблицу Product_corellation. Вот сценарий SQL для создания этой таблицы:

CREATE TABLE [dbo].[PRODUCT_CORRELATION] (
  [id] [int] IDENTITY (1, 1) NOT NULL ,
  [id_book] [int] NOT NULL ,
  [id_sim_book] [int] NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[PRODUCT_CORRELATION] WITH NOCHECK ADD
  CONSTRAINT [PK_PRODUCT_CORRELATION] PRIMARY KEY  NONCLUSTERED
  (
     [id],
     [id_book],
     [id_sim_book]
  )  ON [PRIMARY]
GO

Поля таблицы Product_corellation описаны в табл. 15-7.

Таблица 15-7. Поля таблицы Product_corellation

Поле

Описание

id

Ключевое поле с атрибутом IDENTITY однозначно идентифицирует запись в таблице Product_corellation

id_book

Идентификатор записи книги в таблице Product_history

id_sim_book

Идентификатор записи книги (в таблице Product_history), которая покупалась вместе с данной книгой

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

Таблица Rubricator

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

CREATE TABLE [dbo].[RUBRICATOR] (
  [id] [int] IDENTITY (1, 1) NOT NULL ,
  [id_parent] [int] NOT NULL ,
  [title] [varchar] (255) COLLATE SQL_Latin1_General_CP1251_CI_AS NOT NULL ,
  [title_short] [varchar] (255) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL ,
  [sort_weight] [int] NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[RUBRICATOR] WITH NOCHECK ADD
  CONSTRAINT [DF_RUBRICATOR_sort_weight] DEFAULT (0) FOR [sort_weight],
  CONSTRAINT [PK_RUBRICATOR] PRIMARY KEY  NONCLUSTERED
  (
     [id]
  )  ON [PRIMARY]
GO

Описание полей таблицы Вы найдете в табл. 15-8.

Таблица 15-8. Поля таблицы Rubricator

Поле

Описание

id

Ключевое поле с атрибутом IDENTITY однозначно идентифицирует запись в таблице Rubricator

id_parent

Идентификатор родительской записи в таблице Rubricator

title

Название рубрики

title_short

Краткое название рубрики

sort_weight

Вес для сортировки

Для каждой рубрики в этой таблице создается одна запись с идентификатором id. Поле id_parent хранит идентификатор родительской записи или значение null, если эта запись корневая. Сокращенное и полное название рубрики хранится, соответственно, в полях title и title_short.

Что же касается веса для сортировки sort_weight, то он позволяет изменять взаимное расположение рубрик при отображении на страницах Интернет-магазина.

Таблица Rubricator_items

Таблица Rubricator_items хранит информацию о расположении книг по рубрикам. Она создается сценарием SQL, представленном ниже:

CREATE TABLE [dbo].[RUBRICATOR_ITEMS] (
  [id] [int] IDENTITY (1, 1) NOT NULL ,
  [rubrica_id] [int] NOT NULL ,
  [book_id] [int] NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[RUBRICATOR_ITEMS] WITH NOCHECK ADD
  CONSTRAINT [PK_RUBRICATOR_ITEMS] PRIMARY KEY  NONCLUSTERED
  (
     [id]
  )  ON [PRIMARY]
GO

 CREATE  INDEX [rubrica_id_idx] ON [dbo].[RUBRICATOR_ITEMS]([rubrica_id]) ON [PRIMARY]
GO

 CREATE  INDEX [book_id_idx] ON [dbo].[RUBRICATOR_ITEMS]([book_id]) ON [PRIMARY]
GO

В табл. 15-9 мы описали поля таблицы Rubricator_items.

Таблица 15-9. Поля таблицы Rubricator_items

Поле

Описание

Id

Ключевое поле с атрибутом IDENTITY однозначно идентифицирует запись в таблице Rubricator_items

rubrica_id

Идентификатор рубрики, к которой относится данная книга

book_id

Идентификатор книги

Каждая запись в этой таблице соответствует одной книге. В поле book_id хранится идентификатор книги, а в поле rubrica_id — идентификатор рубрики, к которой принадлежит эта книга.

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

Таблица Zone

В таблице Zone хранится информация о тарифных зонах доставки товара:

CREATE TABLE [dbo].[ZONE] (
  [id] [int] IDENTITY (1, 1) NOT NULL ,
  [zone_tariff_id] [int] NOT NULL ,
  [area] [varchar] (255) COLLATE SQL_Latin1_General_CP1251_CI_AS NOT NULL ,
  [center] [varchar] (255) COLLATE SQL_Latin1_General_CP1251_CI_AS NOT NULL ,
  [distance] [int] NOT NULL ,
  [comment] [varchar] (2000) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[ZONE] WITH NOCHECK ADD
  CONSTRAINT [PK_ZONE_TARIFF] PRIMARY KEY  NONCLUSTERED
  (
     [id]
  )  ON [PRIMARY]
GO

Описание полей этой таблицы Вы найдете в табл. 15-10.

Таблица 15-10. Поля таблицы Zone

Поле

Описание

Id

Ключевое поле с атрибутом IDENTITY однозначно идентифицирует запись в таблице Zone

zone_tariff_id

Идентификатор тарифа зоны по таблице Zone_tariff (эта таблица приведена ниже)

Area

Название района или области

center

Название областного центра

distance

Расстояние от Москвы

comment

Произвольный текстовый комментарий

Поля этой таблицы содержат только текстовое описание зоны. Что же касается тарифов доставки, то они хранятся в таблице Zone_tariff.

Таблица Zone_tariff

Как мы только что сказали, в таблице Zone_tariff хранятся тарифы на доставку книг в различные зоны:

CREATE TABLE [dbo].[ZONE_TARIFF] (
  [id] [int] IDENTITY (1, 1) NOT NULL ,
  [zone_number] [int] NOT NULL ,
  [tariff500] [int] NOT NULL ,
  [tariff1000] [int] NOT NULL ,
  [distance_min] [int] NOT NULL ,
  [distance_max] [int] NOT NULL ,
  [price_insurance] [int] NOT NULL ,
  [price_packing] [int] NOT NULL ,
  [addition_for_price] [int] NOT NULL ,
  [wrapper_weight] [int] NOT NULL ,
  [add_cash_on_delivery] [int] NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[ZONE_TARIFF] WITH NOCHECK ADD
  CONSTRAINT [PK_ZONE_TARIFF_1] PRIMARY KEY  NONCLUSTERED
  (
     [id]
  )  ON [PRIMARY]
GO

Описание полей таблицы приведено в табл. 15-11.

Таблица 15-11. Поля таблицы Zone_tariff

Поле

Описание

Id

Ключевое поле с атрибутом IDENTITY однозначно идентифицирует запись в таблице Zone_tariff

zone_number

Номер зоны доставки

tariff500

Тариф на доставку каждых 500 грамм веса

tariff1000

Тариф на доставку каждого килограмма веса

distance_min

Минимальное расстояние от Москвы до места доставки

distance_max

Максимальное расстояние от Москвы до места доставки

price_insurance

Стоимость страховки

price_packing

Стоимость упаковки

addition_for_price

Величина общей наценки

wrapper_weight

Стоимость одной посылки

add_cash_on_delivery

Наценка за доставку наложенным платежом

comment

Произвольный текстовый комментарий

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

Таблицы News и News2

На главной странице узла Web издательства «Русская Редакция» и Интернет-магазина Itbook.Ru находится лента новостей (она занимает правую часть главной страницы). Сообщения ленты новостей хранятся в базе данных, причем таблица News предназначена для узла Web издательства «Русская Редакция», а таблица News2 — для узла Web Интернет-магазина Itbook.Ru.

Сценарии SQL, предназначенные для создания этих таблиц, почти одинаковые. Вот сценарий для таблицы News:

CREATE TABLE [dbo].[NEWS] (
  [id] [int] IDENTITY (1, 1) NOT NULL ,
  [product_history_id] [int] NULL ,
  [book_event] [int] NOT NULL ,
  [title] [varchar] (255) COLLATE SQL_Latin1_General_CP1251_CI_AS NOT NULL ,
  [short_news_text] [varchar] (255) COLLATE SQL_Latin1_General_CP1251_CI_AS NOT NULL ,
  [news_text] [varchar] (2000) COLLATE SQL_Latin1_General_CP1251_CI_AS NOT NULL ,
  [have_pic] [int] NOT NULL ,
  [pic_type] [varchar] (4) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL ,
  [add_date] [datetime] NOT NULL ,
  [spammed] [int] NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[NEWS] WITH NOCHECK ADD
  CONSTRAINT [DF_NEWS_book_event] DEFAULT (0) FOR [book_event],
  CONSTRAINT [DF_NEWS_have_pic] DEFAULT (0) FOR [have_pic],
  CONSTRAINT [DF_NEWS_updated_date] DEFAULT (getdate()) FOR [add_date],
  CONSTRAINT [DF_NEWS_spammed] DEFAULT (0) FOR [spammed],
  CONSTRAINT [PK_NEWS] PRIMARY KEY  NONCLUSTERED
  (
     [id]
  )  ON [PRIMARY]
GO

Описание полей таблицы Вы найдете в табл. 15-12.

Таблица 15-12. Поля таблицы News

Поле

Описание

id

Ключевое поле с атрибутом IDENTITY однозначно идентифицирует запись в таблице News

product_history_id

Если новость связана с книгой, в этом поле хранится идентификатор книги по таблице Product_history

book_event

Если в этом поле хранится 1, то новость связана с книгой. При этом заполнено поле product_history_id

title

Заголовок новости

short_news_text

Краткий текст новости

news_text

Полный текст новости

have_pic

Если в этом поле хранится значение 1, то новость иллюстрируется графическим изображением

pic_type

В этом поле хранится тип графического изображения (GIF или JPG), если в поле have_pic хранится значение 1

add_date

Дата добавление новости в базу данных

spammed

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

Как видно из описания полей таблицы, новость может иметь или не иметь отношения к какой-либо книги. Если новость связана с книгой, то в поле book_event хранится значение 1, а в поле product_history_id — идентификатор этой книги.

С новостью может быть связана и графическая иллюстрация. В этом случае в поле have_pic хранится значение 1, а в поле pic_type — тип графического изображения. Заметим, что само изображение находится в файле, а не в базе данных. Имя этого файла образуется из идентификатора новости id и типа изображения из поля pic_type.

Поле с названием spammed используется для отметки новостей, разосланных подписчикам по электронной почте. Такая рассылка выполняется по ночам в автоматическом режиме специальной программой, составленной на языке программирования JavaScript. После завершения рассылки эта программа, работающая под управлением Windows Scripting Host (WSH), отмечает разосланные новости в базе данных.

Таблица Replays

Просматривая страницы серверов Web Интернет-магазина, а также издательства «Русская Редакция», посетители могут оставлять свои отзывы о той или иной книги. После предварительного просмотра эти отзывы публикуются на страницах этих серверов Web (такой режим публикации называется «модерируемой публикацией или публикацией с предварительной модерацией»).

Ниже мы привели исходный текст сценария SQL, предназначенного для создания этой таблицы:

CREATE TABLE [dbo].[REPLAYS] (
  [id] [int] IDENTITY (1, 1) NOT NULL ,
  [product_history_id] [int] NOT NULL ,
  [updated] [datetime] NOT NULL ,
  [nick] [varchar] (50) COLLATE SQL_Latin1_General_CP1251_CI_AS NOT NULL ,
  [email] [varchar] (255) COLLATE SQL_Latin1_General_CP1251_CI_AS NULL ,
  [replay] [varchar] (2000) COLLATE SQL_Latin1_General_CP1251_CI_AS NOT NULL ,
  [publish] [int] NOT NULL
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[REPLAYS] WITH NOCHECK ADD
  CONSTRAINT [DF_REPLAYS_updated] DEFAULT (getdate()) FOR [updated],
  CONSTRAINT [DF_REPLAYS_nick] DEFAULT ('anonymous') FOR [nick],
  CONSTRAINT [DF_REPLAYS_publish] DEFAULT (0) FOR [publish],
  CONSTRAINT [PK_REPLAYS] PRIMARY KEY  NONCLUSTERED
  (
     [id]
  )  ON [PRIMARY]
GO

 CREATE  INDEX [IX_REPLAYS] ON [dbo].[REPLAYS]([product_history_id]) ON [PRIMARY]
GO

Описание полей таблицы Вы найдете в табл. 15-13.

Таблица 15-13. Поля таблицы Replays

Поле

Описание

id

Ключевое поле с атрибутом IDENTITY однозначно идентифицирует запись в таблице Replays

product_history_id

Идентификатор книги по таблице Product_history

updated

Дата записи отзыва

nick

Имя или псевдоним посетителя, оставившего отзыв

email

Адрес электронной почты посетителя, оставившего отзыв

replay

Текст отзыва

publish

Флаг публикации отзыва. Если содержимое этого поля равно 1, отзыв публикуется на страницах узлов Web Интернет-магазина, а также издательства «Русская редакция»

Back-офис магазина www.itbook.ru

В этом разделе мы подробно рассмотрим работу Back-офиса магазина http://www.itbook.ru. Заметим, что этот же Back-офис используется и для наполнения узла Web издательства «Русская редакция» с адресом http://www.rusedit.ru.

Подключение к  Back-офису

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

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

Рис. 15-1. Подключение к Back-офису

Главная страница управления Back-офисом

После успешной аутентификации в системе администратор попадает на главную страницу управления объединенным Back-офисом Интернет-магазина и узла Web издательства «Русская редакция» (рис. 15-2).

Рис. 15-2. Главная страница управления Back-офисом

На главной странице системы администрирования имеются несколько разделов.

Рассмотрим возможности, предоставляемые администратору в рамках этих разделов.

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

Кнопки Издательство и Магазин  предназначены для просмотра содержимого, соответственно, Web-узла издательства «Русская Редакция» и Web-узла Интернет-магазина http://www.itbook.ru. Для просмотра открываются дополнительные окна браузера.

Общая информация

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

Раздел Издательство

Если щелкнуть ссылку Издательства, в окне браузера появится страница со списком издательств, показанная на рис. 15-3.

Рис. 15-3. Список издательств

С помощью кнопки Новое издательство можно добавить информацию о новом издательстве, а с помощью кнопки Изменить — отредактировать сведения о любом выбранном издательстве.

Страница добавления нового издательства показана на рис. 15-4.

Рис. 15-4. Страница добавления нового издательства

Чтобы добавить в базу данных информацию о новом издательстве, нужно заполнить поля в форме, показанной на рис. 15-4, а затем щелкнуть кнопку Добавить.

Аналогичная форма предназначена для редактирования сведений об издательстве, хранящихся в базе данных (рис. 15-5).

Рис. 15-5. Форма редактирования сведений об издательстве

Раздел Серии книг

С помощью ссылки Серии книг можно к редактированию таблицы базы данных с информацией о сериях книг. Щелкнув ее, вы окажитесь на странице просмотра списка серий, показанной на рис. 15-6.

Рис. 15-6. Просмотр списка серий книг

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

На рис. 15-6 мы показали верхнюю часть страницы редактирования данных серии книг.

Рис. 15-7. Страница редактирования сведений о серии книг (верхняя часть)

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

Нижняя часть страницы редактирования информации о серии книг показана на рис. 15-8.

Рис. 15-8. Страница редактирования сведений о серии книг (нижняя часть)

Отметив флажок Снята с продажи можно убрать серию книг с витрин узла Web издательства «Русская Редакция» и Интернет-магазина.

Если серия книг не имеет отношения к издательству «Русская Редакция», ее можно снять с витрины узла Web издательства, убрав отметку с флажка Показывать на издательском сайте.

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

Раздел Отзывы

Находясь в разделе отзывов (рис. 15-9), администратор может просмотреть текст новых отзывов, принять решение об их публикации или удалении, а также отправить ответ посетителю, оставившему отзыв, по электронной почте.

Рис. 15-9. Просмотр новых отзывов посетителей

Кнопка Опубликовать предназначена для публикации отзыва, кнопка Удалить — для удаления, а кнопка Ответить — для отправки ответа на отзыв по электронной почте.

На рис. 15-10 мы показали страницу отправки отзыва.

Рис. 15-10. Страница отправки отзыва

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

Витрина издательства «Русская Редакция»

В этом разделе имеются ссылки Книги издательства «Русская Редакция» и Лента новостей издательства. С помощью первой ссылки можно редактировать список книг, расположенных на витрине узла Web издательства, а с помощью второй — содержание ленты новостей издательства.

Раздел Книги издательства «Русская Редакция»

Если войти в этот раздел, в окно браузера будет загружена страница поиска книг издательства «Русская Редакция», информация о которых хранится в базе данных (рис. 15-11).

Рис. 15-11. Страница поиска книг издательства «Русская редакция»

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

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

На рис. 15-12 мы показали результат поиска книг из серии «Базы данных».

Рис. 15-12. Результат поиска книг

Щелкнув кнопку Изменить, администратор может отредактировать описание той или иной книги (рис. 15-13).

Рис. 15-13. Верхняя часть первой страницы редактирования книги

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

На рис. 15-14 показано продолжение страницы редактирования книги.

Рис. 15-14. Первая страница редактирования книги (продолжение)

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

Нижняя часть страницы редактирования сведений о книге показана на рис. 15-15.

Рис. 15-15. Нижняя часть первой страницы редактирования книги

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

Щелкнув кнопку Далее, администратор попадает на страницу обновления изображений обложек книги (рис. 15-16).

Рис. 15-16. Обновление изображений обложек

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

Аналогичная страница предназначена для обновления файла PDF с примерами глав книги (рис. 15-17).

Рис. 15-17. Обновление файла PDF с примерами глав книги

Загрузка этих файлов на сервер Web выполняется через браузер аналогично загрузке файлов изображений обложки книги и логотипов серий книг.

Раздел Лента новостей издательства «Русская Редакция»

В этом разделе администратор может редактировать содержимое ленты новостей через окно браузера. На рис. 15-18 мы показали страницу со списком новостей.

Рис. 15-18. Список новостей

С помощью кнопки Добавить новость можно добавить новость в список, а с помощью кнопок Изменить и Удалить, соответственно, отредактировать сообщение ленты новостей и удалить сообщение.

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

Витрина магазина ITBOOK

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

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

Раздел Витрина избранных книг

Этот раздел позволяет добавить описания избранных книг на главную страницу Интернет-магазина (рис. 15-19).

Рис. 15-19. Редактирование витрины избранных книг

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

Раздел Редактор рубрикатора

На рис. 15-20 мы показали редактор рубрикатора, предназначенного для формирования и редактирования иерархической структуры рубрикатора книг.

Рис. 15-20. Редактор рубрикатора книг

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

Находясь в списке просмотра книг (рис. 15-12), можно щелкнуть кнопку Рубрика для размещения выбранной книги в одной или нескольких рубриках. Соответствующая страница показана на рис. 15-21.

Рис. 15-21. Страница размещения книги в рубриках

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

Работа с заказами

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

Щелкнув ссылку Новые заказы доставка курьером, Новые заказы по предоплате или Новые заказы наложенным платежом, администратор попадает на страницу просмотра списка новых заказов, показанную на рис. 15-22.

Рис. 15-22. Страница просмотра новых заказов с доставкой курьером

Каждая строка списка, представленного на этой странице, соответствует заказам одного посетителя. С помощью кнопки Новые можно просмотреть новые заказы посетителя, а с помощью Обработанные — заказы, которые были обработаны ранее администратором магазина.

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

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

Доставка

Для автоматического расчета стоимости доставки заказанных книг в базе данных Интернет-магазина хранится информация о тарифных поясах.

Щелкнув ссылку Таблица расстояний и тарифных поясов, администратор оказывается на странице, показанной на рис. 15-23.

Рис. 15-23. Страница редактирования таблицы расстояний и тарифных поясов

Здесь можно добавить новый регион доставки и выбрать для него тот или иной тарифный пояс.

Ссылка Тарифные пояса (рис. 15-2) позволяет отредактировать стоимость доставки в различные тарифные пояса.

Работа с клиентами

В разделе учетных записей (рис. 15-2) есть ссылка Клиенты для работы с учетными записями зарегистрированных посетителей.

Если щелкнуть эту ссылку, Вы окажитесь на странице поиска клиентов, показанную на рис. 15-24.

Рис. 15-24. Страница поиска учетных записей клиентов

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

На рис. 15-25 мы показали результат поиска клиента.

Рис. 15-25. Просмотр списка найденных клиентов

В этом списке отображается такая информация о регистрации клиента, как адрес электронной почты, дата и адрес IP регистрации и подключения к системе.

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

На рис. 15-26 мы показали страницу, предназначенную для редактирования учетной записи зарегистрированного посетителя.

Рис. 15-26. Редактирование учетной записи посетителя

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

Front-офис магазина www.itbook.ru

В этом разделе мы расскажем о том, как устроен Front-офис магазина http://www.itbook.ru, то есть Web-приложение, при помощи которого посетители магазина выбирают и приобретают товар.

Витрины Интернет-магазина

В Интернет-магазине ITBOOK.RU имеется несколько витрин, предназначенных для размещения книг. Прежде всего, это витрина избранных книг, расположенная в центральной части главной страницы магазина (рис.15-27).

Рис. 15-27. Главная страница Интернет-магазина

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

Другая витрина — это тематический указатель, показанный на рис. 15-28.

Рис. 15-28. Тематический указатель Инетрнет-магазина

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

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

Еще один способ выбрать книгу — найти ее с помощью системы поиска.

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

Чтобы перейти на страницу расширенного поиска, нужно щелкнуть ссылку Расширенный поиск, расположенную в верхней части каждой страницы магазина (рис. 15-29).

Рис. 15-29. Страница расширенного поиска

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

Щелкнув кнопку Найти, посетитель попадет на страницу просмотра списка найденных книг. Эта страница показана на рис. 15-30.

Рис. 15-30. Страница поиска найденных книг

Здесь представлена краткая информация о книге — рисунок обложки уменьшенного размера, название, фамилия автора, краткая аннотация и т.д. С помощью кнопки В корзину посетитель может отложить понравившуюся ему книгу для покупки.

Щелкнув название книги или изображение обложки, посетитель попадает на страницу просмотра подробной информации о книге, показанную на рис. 15-31.

Рис. 15-31. Страница просмотра подробной информации о книге

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

На странице подробного просмотра информации о книге есть раздел с названием «Те, кто купил эту книгу, также читают» (рис. 15-31). В этом разделе перечислены книги, которые чаще всего покупаются вместе с данной книгой. Как мы уже говорили, для получения этой информации Back-офис Интернет-магазина обрабатывает таблицу заказов покупателей, причем эта обработка выполняется каждую ночь.

И, наконец, последний способ получения информации о книгах, имеющихся в продаже, это загрузка полного списка книг в файле (рис. 15-32).

Рис. 15-32. Получение полного списка книг в файле

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

Программа, выполняющая подготовку списка книг, составлена на языке программирования JavaScript и работает под управлением Windows Scripting Host (WSH). Вначале она создает два файла, один из которых представляет собой отформатированную текстовую таблицу, а второй — текстовую таблицу, столбцы которой разделены символами табуляции (этот файл предназначен для загрузки данных в Microsoft Excel). Далее программа запускает программу упаковки, формируя два архива, показанных на рис. 15-32. Как видно из этого рисунка, упаковка позволяет заметно сократить размеры файлов, что имеет значение при их загрузке через медленные каналы Интернета.

Корзина покупателя

Для отбора покупок в магазине ITBOOK.RU предусмотрена электронная корзина. Чтобы «положить» в нее ту или иную книгу, достаточно щелкнуть кнопку В корзину, присутствующую на витрине главной страницы (рис. 15-27), в списке найденных книг (рис. 15-30), а также на странице просмотра подробной информации о книге (рис. 15-31). Рядом с этой кнопкой имеется поле, в котором можно ввести количество приобретаемых книг того или иного наименования.

Обратите внимание на левый верхний угол главной страницы Интернет-магазина (рис. 15-33).

Рис. 15-33. Кнопка просмотра содержимого корзины

Здесь находится кнопка Корзина, при помощи которой посетители могут просмотреть, а также изменить содержимое своей корзины (рис. 15-34). Рядом с этой кнопкой показано, сколько книг отобрано в корзину и на какую сумму.

Рис. 15-34. Просмотр содержимого электронной корзины покупателя

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

Для оформления покупки посетитель должен выбрать способ доставки, щелкнув кнопку Доставка курьером по Москве или Доставка почтой. При этом в окно браузера будет загружена страница оформления заказа, показанная на рис. 15-35.

Рис. 15-35. Страница оформления заказа.

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

Обратная связь с посетителями

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

Рис. 15-36. Отправка отзыва администрации Интернет-магазина

Чтобы отправить отзыв, посетитель может (но не обязан), указывать свое имя, псевдоним или адрес электронной почты. Набрав текст отзыва в поле Сообщение, посетитель может отправить его администратору магазина по электронной почте, щелкнув кнопку Отправить. При этом ему не понадобится почтовая программа, так как сервер Web сам сделает все необходимое.

Front-офис узла www.rusedit.ru

Как мы уже говорили, Front-офис узла издательства компьютерной литературы «Русская Редакция» http://www.rusedit.ru обращается к той же базе данных, что и Front-офис Интернет-магазина ITBOOK.RU. Фактически этот узел предоставляет пользователям еще один взгляд на описанную в этой главе базу данных.

Главная страница узла Web http://www.rusedit.ru показана на рис. 15-37.

Рис. 15-37. Главная страница узла Web http://www.rusedit.ru

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

Витрина

Витрина узла Web http://www.rusedit.ru призвана предоставлять информацию о книгах, выпущенных издательством «Русская Редакция». Она включает в себя систему поиска книг, список серий книг и ленту новостей.

Поиск книг устроен аналогично тому, как это сделано в только что рассмотренном Интернет-магазине. Страница расширенного поиска имеет примерно тот же вид, что был показан на рис. 15-29, и обладает такими же возможностями.

В центральной части главной страницы узла Web http://www.rusedit.ru имеется список серий книг, выпущенных издательством «Русская Редакция». Чтобы просмотреть список книг выбранной серии, достаточно щелкнуть название серии мышью. Заметим, что список серий формируется динамически на основании содержимого соответствующей таблицы базы данных.

Результат поиска книги или отбора книг по серии показан на рис. 15-38.

Рис. 15-38. Страница просмотра списка найденных книг

Как видите, она аналогична странице, показанной на рис. 15-30, но в ней нет кнопки, предназначенной для приобретения книги. Чтобы купить книгу, Вы должны щелкнуть ссылку ИНТЕРНЕТ-МАГАЗИН, расположенную в левой части каждой страницы узла Web http://www.rusedit.ru.

Щелкнув название книги или изображение ее обложки, посетитель попадет на страницу просмотра подробной информации о книге, имеющий примерно такой же вид, что и соответствующая страница Интернет-магазина (рис. 15-31). Здесь, однако, не предусмотрено кнопки для покупки книги.

Планы издательства

Щелкнув ссылку ПЛАНЫ ИЗДАТЕЛЬСТВА, расположенную в левой части каждой страницы узла Web http://www.rusedit.ru, Вы увидите страницу, показанную на рис. 15-39.

Рис. 15-39. Просмотр планов издательства «Русская Редакция»

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

Архив книг

Аналогичным образом формируется раздел книжного архива, на страницу которого можно попасть при помощи ссылки АРХИВ (рис. 15-40).

Рис. 15-40. Страница просмотра книжного архива

В этом разделе перечислены все книги, выпущенные издательством «Русская Редакция», причем приведенный список отсортирован по названию серий.

Обратная связь с посетителями

Щелкнув ссылку ПИШИТЕ НАМ, посетители узла Web http://www.rusedit.ru смогут направить отзыв в издательство «Русская Редакция» по электронной почте без использования почтовой программы. Соответствующая страница показана на рис. 15-41.

Рис. 15-41. Отправка отзыва в издательство «Русская Редакция»

Как видите, эта страница аналогична странице отправки отзывов Интернет-магазина.

[Назад] [Содержание] [Дальше]