Как сделать Интернет-магазин?

 

Этот вопрос не зря вынесен в заголовок. Если Вы введете его в поисковике (например, http://yandex.ru), то в ответ получите массу ссылок на коммерческие предложения от разнообразных фирм или просто предприимчивых товарищей. Нет, я не хочу сказать, что они делают что-то плохое, или делают не так, просто меня удивляет практически полное отсутствие информации на данную тему (может, кому-то повезло больше?).  А тема действительно интересная и актуальная – по крайней мере, я смог найти в Интернете больше вопросов, чем ответов. И эта статья – маленькая попытка хоть немного восполнить недостаток информации. Итак – как же сделать Интернет-магазин самому?

 

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

 

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

 

Прежде чем Вы начнете делать свой магазин, Вам надо досконально изучить прайс товаров и способы его обновления в оригинале. Давайте для примера придем к некоторым условностям. Есть фирма, в ассортименте которой компьютерные товары. Их достаточное количество для того, что бы не заниматься обновлением в ручную, а придумать собственную систему для синхронизации данных  прайса и магазина. Пусть прайс будет у нас в Excel-е. Это, как правило, не так, многие фирмы используют в работе специализированные программы, например, 1С Бухгалтерию, но такие моменты не принципиальны, так как всегда можно импортировать данные из таких пакетов в Excel. Количество разделов в прайсе и товаров в них не фиксировано, а сам прайс представляет собой набор строк и колонок. В каждой строке – товар или наименование раздела прайса (например – процессоры, память, мышки и т.д.). Количество колонок не важно, стандартно могут присутствовать цена, наименование, описание товара. Впрочем, могут быть и другие варианты. Вот Вам и описание обычного прайса, с которым Вы можете столкнуться.

 

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

 

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

 

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

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

 

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

 

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

 

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

 

Еще раз напоминаю, примеры даны в формате языка PHP. Дальше надо обработать массив $tovar[] в цикле с выводом результатов работы на экран:

 

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

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

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

$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. Теперь легко проверить наличие цены, а также отсортировать и отформатировать данные прайса нужным образом.

 

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

 

Читать продолжение… 

Андрей Кухарчик

http://virtual.brest.by

admin@virtualbrest.com

Внимание: статья написана в 2002 году, многое переосмыслено !!!