| |||||||||||
Если Вы введете фразу "Как сделать интернет-магазин" в строку поиска (например, http://yandex.ru), то в ответ получите массу ссылок на коммерческие предложения от разнообразных фирм или просто предприимчивых дельцов. Нет, я не хочу сказать, что они делают что-то плохое, или делают не так, просто меня удивляет практически полное отсутствие информации на данную тему (может, кому-то повезло больше?). А тема действительно интересная и актуальная - по крайней мере, я смог найти в Интернете больше вопросов, чем ответов. И эта статья - маленькая попытка хоть немного восполнить недостаток информации по вопросам создания интернет-магазина. Итак - как сделать интернет-магазин самому?
Перед тем, как мы приступим собственно к теме создания интернет-магазина самому, я хотел бы подойти к общему знаменателю (хотя может, это надо было сделать в самом конце?). Программное решение, предложенное тут, не является идеальным и единственно правильным (в нашем мире вообще мало идеального). Так что, давайте договоримся не зацикливаться на таких вещах, как выбор языка программирования, стиля программы, способов решения возникающих проблем. Все это можно долго и с усердием обсуждать, но свою цель я вижу несколько в ином - это дать всем желающим необходимый минимум информации на тему создания интернет-магазина без сложных программных и технических решений. А главное - без значительных финансовых затрат, что очень часто играет решающую роль.
Перед началом работы сделайте анализ того, что у же есть на рынке программного обеспечения. Сделать интернет-магазин самому, как ни странно, просто. Не удивляйтесь - реализация такого проекта доступна даже начинающему программисту, знакомому с Интернет-технологиями. Несколько сложнее придумать, как привязать собственный магазин (тут, и в дальнейшем, подразумевается, конечно, готовый интернет-магазин) к конкретным товарам. Например, у вас есть набор канцтоваров. В количестве 1000 наименований. Прайс с ценами и информацией о товарах обновляется чуть ли не ежедневно, и не просто обновляется, а иногда кардинально обновляется! Причем изменяются не только цены, но и виды товаров, их описания, сроки гарантии и поставок и т.д. Вносить все эти данные в свой магазин ежедневно непросто, поэтому обновление данных в готовом интернет-магазине занимает основную часть самой программы интернет-магазина. Это то, что необходимо продумать в первую очередь.
Если Вы хотите сделать интернет-магазин, Вам надо тщательно изучить прайс ваших товаров и способы его обновления в оригинале. Давайте для примера придем к некоторым условностям. Есть фирма, в ассортименте которой компьютерные товары. Их достаточное количество для того, что бы не заниматься обновлением в ручную, а придумать собственную систему для синхронизации данных прайса и магазина. Пусть прайс будет в Excel. Это, как правило, не так, многие фирмы используют в работе специализированные программы, например, 1С Бухгалтерию, но такие моменты не принципиальны, так как всегда можно импортировать данные из таких пакетов в Excel. Количество разделов в прайсе и товаров в них не фиксировано, а сам прайс представляет собой набор строк и колонок. В каждой строке - товар или наименование раздела прайса (например - процессоры, память, мышки и т.д.). Количество колонок не важно, цена, наименование, описание товара. Впрочем, могут быть и другие варианты.
Что и как можно использовать, имея такие данные? Конечно, можно применить специальные модули для выборки данных из файла формата Excel (они существуют в разных вариантах для разных языков программирования), но такие модули, как правило, не являются бесплатными, а значит, не приемлемы для нас. Кроме того - всегда остается проблема настройки. Подчас, что бы это сделать, нужно обладать такой квалификацией, что проще самому все написать с нуля :-) Впрочем, эти модули и не нужны на самом деле. Что собой представляет наш прайс для готового интернет-магазина? Правильно, набор строк и колонок, причем строго синхронизированных друг относительно друга. А значит, из таких строк и колонок можно построить текстовый файл с точно такой же структурой. Только вместо визуального разделения строк и колонок (как в Excel), надо использовать какие-либо символы. Конечно, в этом случае визуальная синхронизация будет утеряна, так как длинна строк всегда разная, но это и не важно, ведь внутренняя структура останется прежней. Это будут все те же строки и колонки, только уже в текстовом формате. А этот формат очень легко прочитать и обработать практически на любом языке программирования. Давайте теперь определимся, на каком языке программирования будут наши примеры. Остановимся на РНР. Это несложный (и в тоже время достаточно мощный) скриптовый язык программирования, предоставляющий все необходимые средства для реализации интернет-магазина (и не только его, между прочим).
Вернемся к нашему прайсу. Excel, как известно, умеет сохранять свои файлы в разных форматах. Нас будет интересовать сейчас один - текстовый файл с разделителями табуляции.
И вот что у нас получилось на выходе: файл *.txt, строки разделены переводом каретки (это простой Enter), колонки разделены символами табуляции. Вся внутренняя структура прайса осталась прежней.
Вот мы и нашли способ не заниматься рутинной работой по ежедневному обновлению прайса в нашем готовом интернет-магазине, а максимально автоматизировать этот процесс. Перед тем, как начинать работать с полученным файлом, можно подумать, как его немного сжать или обработать. Это бывает необходимо для того, что бы удалить не нужные колонки, повторяющиеся пробелы, временно отсутствующие в наличии товары и т.д. Для этого надо считать файл в массив, обработать каждую строку на предмет наличия ненужной информации, записать полученный результат опять в массив на тоже место и, наконец - весь массив записать в файл.
Когда все готово, пора приступать к алгоритму выборки данных их нашего текстового файла с прайсом. Считать файл в массив:
$file = "price.txt";
$tovar = file ( $file );
Примеры даны в формате языка PHP. Дальше надо обработать массив $tovar[] в цикле с выводом результатов работы на экран:
$i = 0; // счетчик начинается с нуля
while ($i count($tovar)): // открыли цикл до последнего элемента в массиве
echo $tovar[$i]; // выводим строку на экран
echo "
"; // не забываем про перевод строк
$i++; // заканчиваем цикл
endwhile;
Вот самый простейший вариант прайса для интернет-магазина. Он, правда, обладает недостатком - весь прайс выводится за один раз, да еще все колонки в одной строке. Правильнее предоставить клиенту возможность выбора раздела прайса. Впрочем, не стоит исключать и первый вариант.
Значит, нужно отделить разделы прайса от информации о товаре. Это можно сделать, если обратить внимание на то, в какой из колонок идет название раздела. Как правило, в той же, что и название товара. Но - в строке с названием раздела нет информации о цене товара, а это может служить хорошим отличительным признаком для программы. Достаточно каждый раз отслеживать наличие в выбранной строке колонку цен. Когда там пусто - в строке название раздела, и его можно вывести на экран, если нет - это товар, такую строку просто пропускаем, если надо выводить только названия разделов. И наоборот для вывода только товаров.
Названия разделов сами по себе мало кого заинтересуют. Нужно продумать возможность просмотра конкретного раздела прайса. Для этого выводимые наименования разделов прайса надо сделать ссылками. А в ссылке в качестве параметра указать информацию о том, с какой строки начинается данный раздел. Немного модернизируем наш алгоритм вывода разделов прайса таким образом, что бы после нажатия на ссылку-наименование раздела посетитель попадал на другую программу, которая начинала бы просмотр файла с прайсом не с начала, а с того места, которое передано по ссылке в качестве параметра. И уже выводила бы не разделы прайса, а сами товары - их цену, наименование, описание и т.д. Тут происходит обратное. В цикле программа просматривает строки файла. Если в колонке с ценой не пусто - это товар, и его надо вывести на экран, предварительно отформатировав информацию. Если же пусто - это начало следующего раздела прайса, и обработку надо прекратить, так как цель достигнута - весь выбранный посетителем раздел выведен на экран. Обязательно необходимо продумать удобную навигацию интернет-магазина, Ваш посетитель не должен заблудиться в дебрях программ. На каждой страничке должна быть ссылка на начало и на список разделов прайса. Неплохо предоставить возможность перехода на следующий и на предыдущий разделы прайса прямо из списка товаров.
Теперь о том, как разделить информацию в выбранной строке по колонкам. Отведем каждой колонке свою переменную. Если колонок в прайсе пять, то и переменных надо зарезервировать тоже пять. Для того, что бы не запутаться, возьмите похожие имена: $n_1, $n _2, $n_3, $n_4, $n _5. Теперь, если нужная строка находится в массиве $tovar[$i], достаточно применить такую конструкцию:
list ($n_1, $n_2, $n_3, $n_4, $n_5) = split ("\t",$tovar[$i]);
: и если колонки были разделены символом табуляции, они распределяться каждая в свою переменную. Если Вы использовали другой разделитель колонок, Вам надо прописать его вместо \t. Теперь легко проверить наличие цены, а также отсортировать и отформатировать данные прайса нужным образом.
Вот Вам и готовое решение для того, что бы просто выводить прайс по разделам на экран. Но этого еще не достаточно для полноценного интернет-магазина, так как он подразумевает возможность заказа выбранных товаров.
Мы подошли к очень интересной теме - виртуальная корзина интернет-магазина. Не сомневаюсь, на очень многих сайтах Вы пробовали заказать выложенный там товар, и на всех работа корзины была реализована по-разному. Что надо стандартному посетителю от интернет-магазина? Правильно, купить товар. А что ему для этого требуется? Удобная навигация, легкий и быстрый доступ к товарам, возможность изменить количество одного наименования товара в корзине, возможность удалить товар из корзины, информация о товаре (данные, параметры, фотография, наконец - цена!). Это - необходимый минимум - увеличение доступных функций отрицательно сказывается на быстродействии и существенно усложняет программу. Но - этого более чем достаточно для нас.
Итак, как можно хранить товары в корзине покупателя? Можно попросить его (покупателя, конечно) зарегистрироваться в системе интернет-магазина, но для этого надо быть уверенным в необходимости нашего товара для покупателя, поэтому не усложняйте жизни своим клиентам различного рода регистрациями. Надо иметь очень веские причины, что бы ввести регистрацию. Такими причинами могут быть: наличие постоянного круга покупателей, ходовой товар. Сделайте свой выбор сами. Только имейте ввиду - регистрацию тоже придется разрабатывать самому.
Что бы сделать регистрацию, нужно рассмотреть преимущества и недостатки нескольких конкурирующих технологий. Что можно противопоставить cookie? Из того, что попроще - Java script и сессии. Давайте рассмотрим все три по порядку.
Cookie - небольшие файлы, записываемые на Вашем компьютере сервером. Все браузеры поддерживают работу с ними, и поверьте - в этой технологии больше ограничений, чем возможностей. Например, нельзя записать в один cookie больше 4 килобайт данных, нельзя обратиться к чужому cookie, только к своему (созданному своим сервером), нельзя записать cookie куда либо в другое место, кроме как в отведенное пользователем. Нельзя, нельзя, нельзя: Конечно, все это при условии того, что Вы следите за безопасностью собственного компьютера и устанавливаете самое современное программное обеспечение. Кстати, практически во всех браузерах сookie по умолчанию включены, и если Вы смогли их выключить - сможете и включить. Сделать это можно в настройках программы-браузера. Очень большое количество сайтов использует в своей работе cookie, а часть из них просто не пустит Вас к себе без включенной их поддержки в браузере. Хорошо это или плохо - это так. Есть специальные программы - брандмауэры, отсекающие cookie или отказывающие сайту в доступе, так что выбор все равно остается за посетителем. Но - среднестатистический пользователь компьютера не отключает cookie, а для продвинутых стоит написать предупреждение на сайте.
Дальше - Java Script. Эта технология тоже достаточно распространена, но... Есть версии популярных браузеров, которые не поддерживают работу Java Script. Например - версии Opera. Правда, это не тот недостаток, на котором мне хотелось бы сделать акцент. Java Script технология клиентская, а это значит, что текст программы - скрипта надо передать браузеру. Само собой - увеличение времени загрузки и замедление работы программы Вам гарантировано. А плюс сюда еще требовательность к ресурсам компьютера, и мы получаем гремучую смесь. А ведь своего клиента надо уважать и немножко даже любить - как никак он платит нам за нашу работу. Так зачем же усложнять ему путь по сайту? Впрочем, есть тут и достоинства - если сервер не поддерживает программирование на своей стороне, остается воспользоваться только Java Script.
Сессии. Очень эффективный механизм, встроенный во многие современные языки программирования. Присутствует, например, в PHP версии 4.0 и выше. Позволяет передавать переменные от одного окна браузера к другому без их потери и без передачи методами POST или GET. Это на пальцах. В действительности - использует в своей работе уникальные идентификаторы, которые хранятся в тех же файлах cookie, так что нового в принципе ничего не несет, разве что повышается удобство работы. Само собой - требует поддержки cookie от браузера.
Вот они, конкуренты. На самом деле - выбор стоит между двумя: cookie или Java Script. Второе стоит выбирать только в случае, если Ваш хостинг не поддерживает программирование на стороне сервера ни на одном из языков. Это - практически все бесплатные службы хостинга. А на первом стоит останавливаться во всех других случаях, когда есть возможность отдать основную работу по обработке серверу. Впрочем, Ваш Java Script тоже будет работать с cookie, иначе оборвавшаяся так некстати связь с Интернетом лишит посетителя с трудом набитого в корзину товара. Второй раз он (посетитель магазина) может этого и не сделать. Если используются cookie - вся корзина остается нетронутой, ведь она записана на компьютере клиента. Итак - решение о выборе технологии зависит от возможностей хостинга.
Мы, как прогрессивные программисты, остановимся на cookie. Тем более, что у нас есть РНР, а в нем очень просто устанавливать, удалять и считывать cookie. На практике это будет выглядеть так:
isset ($name); - прочитать установленный cookie с именем name;
$y = mktime (12, 50, 0, 12, 12, 2005); - установить время, до которого хранить cookie;
setcookie("name", $data, $y); - записать в cookie с именем name переменную $data;
setcookie("name); - удалить cookie с именем name;
Вот и все, что нам понадобится для работы со страшными cookie.
Раз технология выбрана - давайте применим ее на деле! Прайс у нас, если Вы помните, хранится в текстовом файле. Блок выборки данных оттуда есть. Осталось решить, что именно хранить в cookie. Можно - всю информацию о товаре, а можно только цифровой идентификатор и количество. Конкретный выбор надо сделать исходя из реальных условий. По принципу - что проще. Только надо учитывать, что цифровой идентификатор занимает не очень много места в памяти, но с ним больше хлопот в смысле программирования. Придется делать блок сопоставления идентификатора и выборки информации из файла прайса. Тут есть и еще один момент. Если прайс часто меняется, соответственно информация в корзине покупателя может быстро устареть и не соответствовать действительности. Значит, стоит подумать о контроле даты. Дату, когда посетитель положил товар в корзину, тоже придется хранить в cookie, так как больше негде. Если даты сильно различаются - стоит предупредить покупателя о несоответствии. Иначе могут произойти досадные казусы. Неприятно, когда заказ делается по недельной давности цене. Она ведь может не только упасть, но и увеличиться! Потом придется объясняться: Так что лучше позаботиться о таких вещах заранее. Хотя, если прайс более-менее постоянный, беспокоиться на стоит.
Цифровым идентификатором очень удобно выбрать номер позиции в прайсе. Этот номер, понятное дело, уникальный для каждого товара, а нам это и надо. И, кроме того - по номеру позиции легко извлечь информацию о товаре из текстового файла с прайсом. Достаточно считать весь файл в массив:
$file = "price.txt"; // кстати, расширение файла может быть любым
$as = file ( $file );
И обратиться к строке массива с нужным индексом:
$info = $as[$id];
$id - идентификатор, который нам нужен. Правда, применяя данный метод, нам не избежать контроля дат, но это не так уж и плохо.
Вместе с идентификатором товара надо запоминать и количество товара. Соответственно, при первом заказе вводится число 1. Дальше желательно предоставить возможность произвольно (в ограниченных, конечно, рамках) менять это число. Для пересчета суммы понадобится кнопка, если она будет первой после формы - сработает и нажатие на клавишу Enter. Очень удобно - ввел новое количество товара и нажал Enter для пересчета.
Кроме того, в корзине обязательно надо предусмотреть возможность заказать еще товар и окончательно оформить товар в готовом интернет-магазине. Это можно сделать и кнопками, и ссылками - что удобнее для навигации. Никаких параметров передаваться тут не будет.
Конечно, необходимо продумать, как именно выводить информацию о полной стоимости заказа. Не стоит забывать о скидках и подарках, если они, конечно, есть в Вашем готовом интернет-магазине. Хорошо впишутся сюда различные бонусы и информация о доставке. Если она бесплатная - напишите об этом. Лишним не будет.
Наконец: Оформление. Стандартные поля - имя, адрес, телефон, почтовый ящик и т.д. Кому что надо. Чем меньше, кстати, тем лучше. Обязательно должно быть поле "примечания" - оставьте клиенту возможность высказать свои пожелания. Тут же должна присутствовать вся информация о заказанном товаре и о его стоимости. Самая главная кнопку - "ЗАКАЗАТЬ". Если нет регистрации, можно введенные данные запомнить (а для чего мы говорили столько о cookie?) и при следующем заказе просто подставить. Клиент будет благодарен, поверьте.
После того, как заказ оформлен в интернет-магазине и подтвержден, первым делом: скажите спасибо клиенту за покупку. И - выведите еще раз информацию о заказе на экран. При этом не забывайте очистить корзину - она ведь уже отработала свое. Если был введен адрес электронной почты - отправьте на него сообщение о заказе и самую разнообразную информацию, включая рекламу. Вот и все. По крайней мере, для покупателя.
Теперь перейдем к внутренним процессам, происходящим при заказе. Само собой, для хранения информации о всех заказах надо отвести служебный файл. В него и будем писать все, что назаказывают. Причем писать уже надо не идентификаторы (надеюсь, места у Вас на хостинге много), а полную информацию - название, цену и т.д. Так удобнее потом просматривать и обрабатывать. Тут ничего сложного - просто дописываем специальным образом сформированную строку в конец файла. Прочитать такой файл можно и в текстовом редакторе и при помощи специальной служебной программы, вход в которую, конечно же, должен быть запаролирован.
Очень актуальным является момент своевременности обработки заказов. Я Вам подскажу очень хороший и, кстати, современный метод, позволяющий практически мгновенно узнавать о заказе. И это без необходимости постоянно сидеть в Интернете и даже выходить в него раз в день. Удивлены? А на самом деле все просто. Нам понадобится простой: пейджер. Практически все операторы предоставляют возможность отправить электронное сообщение на свой пейджер из Интернета. Как правило, адрес для отправки выглядит так: номер_пейджера@адрес.оператора. Или приблизительно так. Если на этот адрес отправить письмо, оно придет на Ваш пейджер. А из PHP, например, очень просто отправлять электронные сообщения на почтовые ящики. Идея ясна, надеюсь? Кстати, неплохим вариантом может быть SMS на сотовый телефон, но надо уточнять у оператора, поддерживает ли их сеть такую возможность.
Как видите, на заказ можно отреагировать практически сразу, как только он поступит. Это повышает доверие клиентов к готовому интернет-магазину и положительно сказывается на репутации. Вот, как мне кажется, и все для начала.
Очень хочется пожелать не бояться самостоятельно заниматься разработкой интернет-магазина. Проблем осталось много, но все они решаемы, поверьте. И, как правило - проще оказывается самостоятельно разработать систему, чем искать и настраивать чужую.
Еще раз хочется напомнить - статья ориентирована в первую очередь на то, что бы дать начальную информацию о технологиях, применяемых в готовых интернет-магазинах. Тот или иной описанный здесь блок может быть реализован по-другому. Исследуйте, экспериментируйте, творите: Успехов Вам в бизнесе!
В соавторстве с Андреем Кухарчиком http://www.virtual.bresttelecom.by
Мы имеем большой опыт по продаже интернет-магазинов, созданию интернет-магазинов.
Надеемся, Вы решите купить интернет-магазин у нас.
Опасайтесь подделок готовых интернет-магазинов!!! Мы не несем за них ответственности.