Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
PHP обучение на примерах - Кухарчик А..pdf
Скачиваний:
139
Добавлен:
24.05.2014
Размер:
24 Мб
Скачать
☆

170

Программирование на РНР

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

Проявите свою фантазию и попробуйте усовершенствовать приведенную схему.

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

Технология создания

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

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

Пусть прайс у нас будет набран в программе Excel (как правило, это не так, многие фирмы используют в работе специальные программы, например «1С: Бухгалтерия», но это не важно, так как данные из таких пакетов всегда можно импортировать в Excel). Количество разделов в прайсе и товаров в них не фиксировано, а сам прайс представляет собой набор строк и колонок. В каждой

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

171

 

 

 

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

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

Excel умеет сохранять свои файлы в разных форматах. Нас будет интересовать сейчас формат «текстовый файл с разделителями». Тип разделителя не важен, в их качестве можно использовать даже запятые или пробелы. Мы же остановимся на табуляции.

Вот что у нас получилось: файл *.txt, в котором строки разделены переводом строки (это простой Enter), колонки разделены символами табуляции. Структура прайса осталась прежней, так как об этом позаботился мастер сохранения Excel.

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

172

Программирование на

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

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

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

$file = "price.txt";

$tovar = file ($file);

Дальше надо обработать массив $tovar [] в цикле с выводом результатов работы на экран:

$i = 0; // счетчик начинается с нуля

while ($i < count ($tovar)) : // открыли цикл до последнего // элемента в массиве

echo $tovar[$i]; // выводим строку на экран

echo "<br>"; // не забываем про перевод строк

$i++; // увеличиваем счетчик на единицу

endwhile; // заканчиваем цикл

Вот самый простой вариант вывода прайса. Он, правда, обладает существенным недостатком — весь прайс выводится за один раз, причем все колонки в одной строке. А это неприемлемо по эстетическим причинам.

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

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

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

173

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

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

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

Теперь о том, как разделить информацию в выбранной строке по колонкам. Отведем каждой колонке свою переменную. Если колонок в прайсе пять, то и переменных надо зарезервировать пять. Чтобы не запутаться, возьмите похожие имена: $n_1, $n_2, $n_3, $n_4, $n_5. Теперь, если нужная строка находится в массиве $ tovar[ $ i], достаточно применить такую конструкцию:

174

Программирование на РНР

l i s t ( $ n _ l, $n_2, $n_3, $n_4,

$n_5) = s p l i t <"\t",

$ t o v a r [ $ i ] ) ;

 

И если колонки были разделены символом табуляции, они распределятся каждая в свою переменную. Если вы использовали другой разделитель колонок, вам надо указать его вместо " \ t " .

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

Мы подошли к очень интересной теме — «виртуальная корзина». Если вы пробовали заказать товар на различных сайтах, то могли заметить, что работа корзины реализована по-разному. Что нужно обычному посетителю от интернет-магазина? Правильно, купить товар. А что ему для этого требуется? Удобная навигация, легкий и быстрый доступ к товарам, возможность изменить количество товара одного наименования в корзине, удалить товар из корзины, получить информацию о товаре (описание с фотографией и цена). Ограничимся этим необходимым минимумом, так как увеличение доступных функций отрицательно сказывается на быстродействии и существенно усложняет программу.

Итак, как можно сохранять информацию о товаре в корзине покупателя? Можно попросить покупателя зарегистрироваться в системе, но это может сократить количество посетителей магазина.

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

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

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

 

175

Нам нужно решить, что именно хранить в cookie. Можно — всю информацию о товаре, а можно только цифровой идентификатор и количество. Делайте, как вам проще.

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

Обратите внимание еще на один момент. Если прайс очень часто меняется, информация в корзине покупателя может быстро устареть и не соответствовать действительности. Значит, стоит подумать о контроле даты. Дату, когда посетитель положил товар в корзину, тоже придется хранить в cookie, так как больше негде. Если эта дата сильно отличается от текущей, стоит предупредить покупателя о несоответствии, иначе могут произойти досадные казусы. Неприятно, когда заказ делается по цене недельной давности. Она ведь может не только упасть, но и увеличиться! Потом придется объясняться. Лучше позаботиться о таких вещах заранее. Хотя, если прайс более-менее постоянный, беспокоиться не стоит.

Цифровым идентификатором очень удобно выбрать номер позиции в прайсе. Этот номер — уникальный для каждого товара. По номеру позиции легко можно извлечь информацию о товаре из текстового файла с прайсом. Достаточно считать весь файл в массив:

$file = "price.txt"; $as = file ($file);

И обратиться к строке массива с нужным индексом:

$info = $as[$id];

$id — идентификатор, который нам нужен. Правда, применяя данный метод, нам не избежать контроля дат, но это не так уж и плохо.

Вместе с идентификатором товара надо запоминать и количество товара. По умолчанию при первом заказе вводится число 1. Дальше желательно предоставить возможность (в ограниченных

176

Программирование на РНР

рамках, конечно) изменять это число. Для пересчета суммы понадобится кнопка. Если она будет в HTML-коде указана после формы, сработает и нажатие на клавишу Enter.

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

Конечно, необходимо продумать, как именно выводить информацию о полной стоимости заказа. Не стоит забывать о скидках и подарках, если они, конечно, есть в вашем интернет-ма- газине. Хорошо впишутся сюда различные бонусы и информация о доставке. Если она бесплатная — напишите об этом. Лишним не будет.

Наконец, оформление формы заказа. Стандартные поля — имя, адрес, телефон, почтовый ящик и т.д. Чем меньше, тем лучше. Обязательно должно быть поле примечания — оставьте клиенту возможность высказать свои пожелания. Здесь же должна присутствовать вся информация о заказанном товаре, его стоимости и самая главная кнопка — «Заказать».

Если нет регистрации, можно введенные данные запомнить (как вы понимаете, при помощи cookie) и при следующем заказе просто подставить. Клиент будет благодарен, поверьте.

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

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

Соседние файлы в предмете Программирование