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

Проектирование ключевых товаров на уровне базы данных
В нашем магазине информация о ключевых товарах будет выводиться в трех местах, начиная с домашней страницы Default.asр. До настоящего момента эта страница выглядела слабовато. На ней не было ничего, кроме приветственного сообщения и навигационных ссылок.
Кроме того, под панелью ссылок остается немного свободного места, которое тоже можно выделить под рекламу. В результате покупатель сможет купить ключевые товары в любой момент, не прибегая к средствам поиска.
Наконец, реклама товаров будет выводиться и в корзине покупателя. При этом нет смысла рекламировать товары, уже включенные в корзину, поэтому страница должна ограничивать рекламу лишь теми товарами, которые еще не были приобретены покупателем.
Для работы с ключевыми товарами в таблице Products создаются три новых поля. Краткие описания этих полей приведены в табл. 14.1.
Таблица 14.1. Поля, относящиеся к ключевым товарам


Поле

Описание

IntFeatured

Флаг показывает, является ли данный товар ключевым

DtFeatureStart

Дата начала рекламной кампании

DtFeatureEnd

Дата завершения рекламной кампании

В листинге 14.1 приведены примеры команд SQL, создающих рекламируемые товары. В качестве начальной даты рекламной кампании выбирается текущая дата, а завершение рекламной кампании намечается на 1 января 2001 года.
Листинг 14.1. Команды SQL для создания рекламируемых товаров
update products set intFeatured = 1, dtFeatureStart = getdate(),
dtFeatureEnd = "1/1/2001" where idproduct = 1
update products set intFeatured = 1, dtFeatureStart = getdate(),
dtFeatureEnd = "1/1/2001" where idproduct = 2

Программирование пользовательского интерфейса
Начнем с домашней страницы Default.asр. Информация о рекламируемых товарах будет выводиться непосредственно под текстом приветственного сообщения.
Новый фрагмент, включаемый в страницу Default.asp, приведен в листинге 14.2. Сначала мы выводим информацию о наличии рекламируемых товаров, а затем открываем подключение к базе данных. Список ключевых товаров, определенных в базе в настоящий момент, загружается хранимой процедурой sp_RetrieveFeaturedProducts.
Листинг 14.2. Default.asp
<!-- Show the featured products for today. -->
<b>On sale Today!</b><BR><BR>
<%

' Create an ADO database connection
set dbSaleProd = server.createobject("adodb.connection")
' Create a record set
set rsSaleProd = server.CreateObject("adodb.recordset")
' Open the connection using our ODBC file DSN
dbSaleProd.open("filedsn=WildWillieCDs")
' Retrieve all of the current sale products
sql = "execute sp_RetrieveSaleProducts"
' Execute the SQL statement
set rsSaleProd = dbSaleProd.Execute(sql)
Загрузив информацию о рекламируемых товарах, мы в цикле перебираем и выводим их (см. листинг 14.3). При каждой итерации выводится название, графическое изображение и идентификатор товара.
В процессе вывода используется флаговая переменная, управляющая расположением изображения относительно текста. С названием и изображением связывается ссылка, по которой покупатель переходит на страницу товара.
Листинг 14.3. Default.asp (продолжение)
' Loop through the products
do until rsFeaturedProd.EOF

' Retrieve the product information to be displayed.
chrProductName = rsFeaturedProd("chrProductName")
chrProductImage = rsFeaturedProd("chrProductImage")
idProduct = rsFeaturedProd("idProduct")
' Check the display flag. We will rotate the
' product images from left to right.
If flag = 0 then
' Set the flag
flag = 1
%>
<!-- Build the link to the product information. -->
<a href="product.asp?idProduct=<%=idProduct%>">
<img src="images/products/sm_<%=chrProductImage%>"
align="middle" border="0">
<%=chrProductName%></a><BR><BR>
<% else %>
<!-- Build the link to the product information. -->
<a href="product.asp?idProduct=<%=idProduct%>">
<%=chrProductName%>
<img src="images/products/sm_<%=chrProductImage%>"
align="middle" border="0"></a><BR><BR>
<%
' Reset the flag
Flag = 0
end if

' Move to the next record
rsFeaturedProd.MoveNext

' Loop back
Loop

%>
Хранимая процедура sp_RetrieveFeaturedProducts загружает из базы данных информацию обо всех ключевых товарах, активных в данный момент (см. листинг 14.4). Текущая дата сравнивается с начальной и конечной датой рекламной кампании.
Листинг 14.4. Хранимая процедура sp_RetrieveFeaturedProducts
CREATE PROCEDURE sp_RetrieveFeaturedProducts AS
select * from products where intFeatured = 1 and
getdate() >= dtFeatureStart and getdate() <= dtFeatureEnd
На этом заканчиваются изменения, вносимые в страницу Default.asр. Переходим к модификации страницы Basket.asp (см. листинг 14.5).
Новый фрагмент начинается с открытия подключения к базе данных и вызова хранимой процедуры sp_RetrieveNonPurchFeatureProd. Процедура возвращает информацию обо всех ключевых товарах, которые еще не были включены в корзину покупателя.
Листинг 14.5. Basket.asp
<%

' Create an ADO database connection
set dbFeaturedProd = server.createobject("adodb.connection")
' Create a record set
set rsFeaturedProd = server.CreateObject("adodb.recordset")
' Open the connection using our ODBC file DSN
dbFeaturedProd.open("filedsn=WildWillieCDs")
' Execute the sp_RetrieveNonPurchFeatureProd stored procedure
' which will return any featured products not currently in the
' basket.
sql = "execute sp_RetrieveNonPurchFeatureProd " & session("idBasket")

' Execute the SQL statement
set rsFeaturedProd = dbFeaturedProd.Execute(sql)
Затем мы проверяем, была ли обнаружена хоть одна запись ключевого товара, отсутствующего в корзине (см. листинг 14.6). Если процедура вернула записи товаров, выводится сообщение, привлекающее внимание покупателя к рекламируемым товарам.
Полученные записи ключевых товаров перебираются в цикле. На этот раз страница не загромождается графическими изображениями - выводятся только названия товаров, которые при помощи ссылки связываются с полной информацией о товаре.
Листинг 14.6. Basket.asp (продолжение)
if not rsFeaturedProd.EOF then
%>

<!-- Start the display of any featured products they
didn't purchase. -->
<b>Don't forget our featured products!</b><BR><BR>
<%

end if
' Loop through the list
do until rsFeaturedProd.EOF

' Retrieve the product information to be displayed.
chrProductName = rsFeaturedProd("chrProductName")
idProduct = rsFeaturedProd("idProduct")
%>
<!-- Build the link to the product information. -->
<a href="product.asp?idProduct=<%=idProduct%>">
<%=chrProductName%></a><BR><BR>
<%
' Move to the next record
rsFeaturedProd.MoveNext
' Loop back
Loop

%>
Получение правильного списка товаров в хранимой процедуре sp_RetrieveNonPurchFeaturedProd происходит в несколько этапов. Процедура должна вернуть записи всех ключевых товаров, отсутствующих в корзине.
При вызове хранимой процедуре передается идентификатор корзины. В секции WHERE выполняется вложенная команда SELECT, возвращающая записи всех позиций заданной корзины. В результате применения операции NOT IN в исходном наборе ключевых товаров остаются записи только тех товаров, которые отсутствуют в корзине.
Хранимая процедура дополнительно фильтрует полученный набор записей и оставляет в нем только те товары, у которых временной интервал рекламной кампании содержит текущую дату.
Листинг 14.7. Хранимая процедура sp_RetrieveNonPurchFeatureProd
CREATE PROCEDURE sp_RetrieveNonPurchFeatureProd
@idBasket int
AS
select * from products
where
intFeatured = 1 and
getdate() >= dtFeatureStart and
getdate() <= dtFeatureEnd and
products.idproduct Not In
(select idProduct from basketitem where basketitem.idbasket = @idBasket)
Остается лишь внести изменения в заголовочный файл Header.asp (см. листинг 14.8). Список ключевых товаров должен выводиться под панелью ссылок.
Прежде всего необходимо проследить за тем, чтобы информация о ключевых товарах не выводилась дважды. В нашем примере для этого проверяется имя текущей страницы. Если оно совпадает с Default.asp или Basket.asp, информация о ключевых товарах не выводится под панелью ссылок.
После проверки под панелью ссылок рисуется горизонтальная черта, отделяющая ссылки от перечня ключевых товаров. Под чертой выводится сообщение о наличии ключевых товаров.
Листинг 14.8. Header.asp
<!-- Check to ensure we are not on the default or basket page. -->
<%

if instr(1, lcase(Request.ServerVariables("URL")), "default.asp") = 0 and _
instr(1, lcase(Request.ServerVariables("URL")), "basket.asp") = 0 then
%>

<hr>
<font size="2" color="red">Featured Products:</font>
<br><br>
В оставшейся части добавляемого фрагмента мы открываем подключение к базе данных и выполняем хранимую процедуру sp_RetrieveFeaturedProducts, после чего перечисляем названия товаров (без графических изображений).
Листинг 14.9. Header.asp (продолжение)
<%

' Create an ADO database connection
set dbFeaturedProd = server.createobject("adodb.connection")
' Create a record set
set rsFeaturedProd = server.CreateObject("adodb.recordset")
' Open the connection using our ODBC file DSN
dbFeaturedProd.open("filedsn=WildWillieCDs")
' Retrieve the current featured products
sql = "execute sp_RetrieveFeaturedProducts"

' Execute the SQL statement
set rsFeaturedProd = dbFeaturedProd.Execute(sql)
' Loop through the featured products
do until rsFeaturedProd.EOF

' Retrieve the product information to be displayed.
chrProductName = rsFeaturedProd("chrProductName")
idProduct = rsFeaturedProd("idProduct")
%>
<font size="2">
<!-- Build the link to the product information. -->
<a href="product.asp?idProduct=<%=idProduct%>">
<%=chrProductName%></a>
</font><br><br>
<%
' Move to the next record set
rsFeaturedProd.MoveNext

' Loop back
Loop

end if

%>
Посмотрим, как выглядят обновленные страницы в действии. Новая домашняя страница сайта с двумя ключевыми товарами. Обратите внимание: информация о ключевых товарах не выводится под панелью ссылок, поскольку текущей является домашняя страница.
Страница с перечнем разделов. На этот раз список ключевых товаров выводится под панелью ссылок. Он присутствует на всех страницах, кроме домашней страницы и корзины.
Включите в корзину любой товар, не входящий в список ключевых товаров. Корзина, и в нижней части страницы отображается информация о двух -ключевых товарах.
Поместите в корзину один из двух ключевых товаров. Корзина после добавления в нее товара Joe Bob's Thimble Sounds. Теперь на странице отображается реклама только одного ключевого товара Sounds of Silence (for real).
Переходим к выполнению операций с ключевыми товарами в управляющей программе.
Программирование управляющего интерфейса
Операции с ключевыми товарами будут выполняться со страницы ManageProduct.asp. Мы должны предусмотреть средства для назначения ключевых товаров, а также редактирования дат начала и конца рекламной кампании.
Новый фрагмент, добавляемый в страницу ManageProduct.asp, приведен в листинге 14.10. Для установления и снятия пометки ключевых товаров используется флажок. Мы проверяем, был ли текущий товар помечен или нет. Если товар был помечен, по умолчанию флажок переводится в установленное состояние при помощи атрибута CHECKED.
Листинг 14.10. ManageProduct.asp
<tr>
<td align="right"><b>Featured Product:</b></td>
<td>

<%

' Check to see if the product is featured.
if rsProduct("intFeatured") = 1 then

%>

<!-- Display the check box checked if the
product is featured. -->
<input type="checkbox" value="1" CHECKED name="intFeatured">

<%
else
%>
<!-- Display the check box with out the check. -->
<input type="checkbox" value="1" name="intFeatured">

<% end if %>
Страница завершается двумя текстовыми полями для редактирования начальной и конечной даты (см. листинг 14.11). Как говорилось выше, форма передает данные странице UpdateProduct.asp, где и происходит обработка этих значений.
Листинг 14.11. ManageProduct.asp (продолжение)
<!-- Show the start and end date for the product feature -->
Start Date: <input type="text" value="<%=rsProduct("dtFeatureStart")%>" size="10"
name="dtFeatureStart">
End Date: <input type="text" value="<%=rsProduct("dtFeatureEnd")%>" size="10"
name="dtFeatureEnd">

</td>
</tr>
Новый фрагмент, включаемый в страницу UpdateProduct.asp, приведен в листинге 14.12. Сначала мы читаем значение intFeatured с формы ManageProduct.asp и проверяем, был ли установлен флажок. Если флажок не был установлен, в базе данных сохраняется значение 0. После проверки читается содержимое полей начальной и конечной даты.

Листинг 14.12. UpdateProduct.asp
' Получить признак ключевого товара.
intFeatured = request("intFeatured")
' Проверить, был ли установлен флажок.
if intFeatured = "" then
' Если флажок сброшен, реклама товара не выводится
intFeatured = 0

else
' Если флажок установлен, выводить рекламу товара
intFeatured = 1

end if
dtFeatureStart = request("dtFeatureStart")
dtFeatureEnd = request("dtFeatureEnd")
После чтения данных вызывается хранимая процедура sp_UpdateProduct, обновляющая данные товара. При вызове процедуры передаются дополнительные параметры - признак ключевого товара, а также начальная и конечная даты (см. листинг 14.13).
В исходную версию хранимой процедуры sp_UpdateProduct вносятся изменения, связанные с обработкой параметров ключевых товаров (см. листинг 14.14). При вызове процедуры передается признак ключевого товара, а также две даты. Переданные значения включаются в команду SQL UPDATE.
Листинг 14.14. Хранимая процедура sp_UpdateProduct
CREATE PROCEDURE sp_UpdateProduct
@idProduct int,
@chrProductName varchar(255),
@txtDescription text,
@chrProductImage varchar(100),
@intPrice int,
@intActive int,
@intFeatured int,
@dtFeatureStart datetime,
@dtFeatureEnd datetime,
@intSalePrice int,
@dtSaleStart datetime,
@dtSaleEnd datetime
AS
update products set
chrProductName = @chrProductName, txtDescription = @txtDescription,
chrProductImage = @chrProductImage,
intPrice = @intPrice,
intActive = @intActive,
intFeatured = @intFeatured,
dtFeatureStart = @dtFeatureStart,
dtFeatureEnd = @dtFeatureEnd,
intSalePrice = @intSalePrice,
dtSaleStart = @dtSaleStart,
dtSaleEnd = @dtSaleEnd
where
idProduct = @idProduct
Рассмотрим пример практического использования управляющего интерфейса. Страница товара с новыми элементами, относящимися к ключевым товарам (флажок и два текстовых поля).
Допустим, вы решили остановить рекламную кампанию товара Joe Bob's Thimble Sounds. Снимите флажок, очистите оба текстовых поля и нажмите кнопку Update Product. Обновленная страница товара. Обратите внимание: поля даты по умолчанию инициализируются датой начала века.
Домашняя страница электронного магазина. На этот раз на ней представлен всего один ключевой товар.
СОВЕТ
Возможно, вы захотите рекламировать товары и во время оформления заказа - вроде тех мелочей, разложенных возле кассы, которые покупатель отбирает в последний момент. Для этого необходимо реализовать дополнительную логику для включения товара в корзину, обновления общей стоимости и продолжения оформления заказа.

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

 

 
На главную | Содержание | < Назад....Вперёд >
С вопросами и предложениями можно обращаться по nicivas@bk.ru. 2013 г. Яндекс.Метрика