В статье авторы описывают процесс создания и принцип работы нового интернет-магазина для продажи фермерских товаров «Просёлок».
Ключевые слова: сайт, интернет-магазин, PHP, MVC, Laravel.
В настоящее время людям, имеющим собственное хозяйство на ферме, даче или в деревне, довольно непросто продать собственный урожай, молочную и сельскохозяйственную продукцию. У фермеров возникают трудности в развитии своего хозяйства, поскольку часто не хватает покупателей, приходится платить за аренду, зарплату продавцам, за доставку товара до ярмарки, а его остатков — обратно на склад.
Данный факт представляет довольно серьёзную проблему, так как крестьянское (фермерское) хозяйство можно считать частью экономики России. В случаях введения санкций и кризиса в стране фермерское хозяйство привносит существенную помощь в обеспечение населения жизненно необходимой продукцией. Подобного рода бизнес занимает особое место в агропромышленном комплексе и оказывает положительное влияние на экономическую составляющую нашей страны.
Для решения данной проблемы выберем современный подход. Инновации в сфере IT-технологий являются неотъемлемой частью современного общества. Автоматизация давно прочно вошла во многие области деятельности человека, в частности она продолжает активно внедряться и развиваться в сфере предпринимательства, как частного, так и индивидуального. Постоянно увеличивается конкуренция в предложениях услуг предпринимателей, тем самым, создавая предпосылки к развитию IT-технологий для разработки сайтов.
Создание новых интернет-магазинов в наше время имеет необходимость не только со стороны производителей. Всё чаще жители городов покупают продукты преимущественно в супермаркетах, где трудно найти экологически чистые товары. Горожане, не имеющие собственного участка в деревне или на даче и желающие питаться натуральными продуктами, вынуждены выезжать в села, чтобы купить интересующий товар. В современном, стремительно меняющемся мире становится всё меньше потребителей, желающих тратить свое время на закупку продуктов, поэтому многие стремятся делать это через интернет.
На данный момент уже существуют интернет-магазины, торгующие натуральными товарами фермерского производства. Это «Sreda», «Ешь деревенское», «Лукино», «Владимирская Мещера».
Мы провели анализ этих интернет-магазинов средствами добавления товара в корзину, оформления заказа (без отправки), навигации по сайту и просмотра контента. По результатам исследования были выявлены следующие недостатки.
В интернет-магазинах (Sreda [6] и «Владимирская Мещера» [9]) отсутствует личный профиль, и система отзывов, в результате чего не может быть доступна информация о текущих заказах и ранее сделанных покупках, а также возможность оставить отзыв.
У «Ешь деревенское» [7] избыточное разнообразие ассортимента, а при оформлении заказа могут происходить сбои, сообщения приходят не сразу или не приходят совсем.
«Лукино» [8] и «Владимирская Мещера» имеют всего одну точку, что создает много трудностей с доставкой и сохранностью товаров и сильно ограничивает число производителей, которые хотят продать свой товар.
Разработанное веб-приложение содержит все достоинства аналогов и устраняет выявленные недостатки. Основными преимуществами нового веб-приложения являются:
– личный кабинет для покупателя;
– возможность просматривать отзывы и оставлять их, написать и отправить их может только зарегистрированный покупатель;
– функционал лаконичный, без излишеств;
– направлен исключительно на продажу еды;
– товары могут продавать разные фермеры, каждый может разместить информацию о себе и своей ферме.
В графических приложениях немаловажно, чтобы пользовательский интерфейс был разработан дружелюбным, приятным глазу, чтобы у посетителя сайта не возникало желания закончить работу с приложением, как можно быстрее. Веб-приложение направлено на продажу товаров, которые должны ассоциироваться с ярким и свежим дизайном, поэтому сайт должен отвечать таким требованиям как:
– яркий, но лаконичный дизайн;
– тематическое оформление;
– быстрая адаптации пользователя на сайте;
– отсутствие отвлекающей, ненужной информации;
– полезные ссылки;
– полезные контакты;
Языком программирования для разработки нового веб-приложения был выбран PHP с использованием фреймворка Laravel. Затем проводилось сравнение двух наиболее популярных сред для разработки: NetBeans [11] и PhpStorm [12]. По результатам анализа, выбор был сделан в пользу PhpStorm, так как существует ее бесплатная версия для обучающихся, она удобна при модификации кода, также имеет все необходимые инструменты для эффективного тестирования и отладки.
Графический интерфейс пользователя тоже разрабатывался с помощью Laravel, а также с применением шаблонизатора Blade.
Laravel как нельзя лучше подходит для создания интернет-магазина. Применяя, лежащий в его основе принцип единственной ответственности (модель MVC программа разделена на блоки, в каждом из которых свой функционал и которые связаны между собой посредством тех же блоков), можно легко создать стройную и понятную структуру программы, а также быстро вычислять и устранять ошибки, возникающие при разработке. К тому же, Laravel содержит много встроенных полезных инструментов, таких как система аутентификации, которая очень часто встраивается в приложения, содержащие личную информацию о каждом пользователе. К таким приложениям как раз и относятся интернет-магазины.
На рис. 1 изображена схема жизненного цикла запроса в Laravel.
Рис 1. Схема жизненного цикла запроса в Laravel [13]
На схеме можно увидеть взаимодействие между программными модулями, которое происходит в соответствии с паттерном MVC (Model-View-Controller).
Подробнее разберем принцип работы и сему алгоритмов нашего сайта на примере перехода между страницами, авторизации и оформления заказа.
На рис. 2 представлен фрагмент схемы алгоритма работы интернет-магазина.
Рис. 2. Фрагмент схемы алгоритма работы интернет-магазина
Вверху схемы хорошо заметен фрагмент главного меню сайта. Адреса страниц, между которыми осуществляются переходы, прописаны в маршрутах (routes), в них же указано, какой при этом должен выполниться метод в соответствующем контроллере (controller). Например, главная страница имеет адрес «/», имя соответствующего маршрута — index, а метод index, который при этом выполнится, прописан в контроллере MainController и отвечает за загрузку категорий товаров из базы данных на главную страницу.
Методы для отправки запросов в БД об изменении количества товаров в корзине или оформлении заказа тоже прописаны в контроллерах. Они служат для связывания действий, совершаемых пользователем и операций, происходящих в серверной части программы. MainController загружает данные на ключевые страницы сайт, такие как главная, страница с категорией, личный профиль, результаты поиска, страницы с информацией. Это список категорий, общая информация о магазине и о том, как им пользоваться, о производителях и особенностях доставки и оплаты. BasketController отвечает за выполнения действий в корзине, добавление товара, удаление, изменение количества позиций. LoginController и RegisterController являются встроенными классами, в них прописана логика для осуществления авторизации и регистрации пользователя.
Каждая сущность в БД представляет собой класс-модель (models) со своими свойствами и методами, совершающими, к примеру, подсчеты стоимости текущего заказа или количества товаров в корзине или же возвращающие некоторые свойства объекта-модели, например, для товара (класс Product) его категорию (метод category()).
На схеме представлен обобщенный алгоритм авторизации и регистрации покупателя. Действия проверки на авторизованность совершаются посредником (middleware) Authentication и вызываются при переходе по тому или иному маршруту.
После того, как метод выполнится, данные, которые были при этом получены отправляются тем же контроллером в представление (view) и размещаются в полях страницы для отображения пользователю. Например, список категорий, список и количество товаров в корзине для текущего пользователя, стоимость заказа, полученные контроллером BasketController, пользователь может наблюдать в представлении basket (корзина) и в свою очередь отправлять новые запросы при помощи данного интерфейса (удаление товаров в корзине или изменение их количества) или переходить к другому представлению, то есть на другую страницу сайта, куда другим контроллером будут подгружены уже новые данные.
Результат работы программы с точки зрения покупателя представлен на рис. 3.

Рис. 3. Результат работы программы. Переход между страницами
Это только один из возможных способов обхода по сайту. На главной странице происходит авторизация, затем покупатель обращается к списку товаров категории Молоко. Далее действия переносятся в корзину, после чего пользователь приступает к отправке заказа и переносится обратно на главную страницу.
Благодаря четкому распределению обязанностей между модулями программы, все страницы загружаются вовремя, не возникает непредвиденных ошибок и проблем с сервером.
В заключение, стоит отметить, что из-за слабой популярности продажи фермерских товаров в сети интернет конкурентоспособность проекта по созданию данного интернет-магазина довольно высока.
Литература:
- Осипов Д. Технологии проектирования баз данных. — М.: ДМК Пресс, 2019.
- Адель Ф. Архитектура сложных веб приложений. С примерами на Laravel. Издательство: Leanpub 2020.
- Кристофер Питт. Pro PHP 8 MVC: Model View Controller Architecture-Driven Application Development. Издательство: Apres 2012.
- Мэтт Стаффер. Laravel Полное руководство. 2-е изд. — СПб.: Питер, 2020.
- Янк К. PHP & MySQL Novice to Ninja. — М.: Эксмо, 2013.
- Интернет-магазин — Sreda [Электронный ресурс] // sreda: [сайт]. URL: https://www.sreda-one.com/.
- Интернет-магазин — Ешь деревенское [Электронный ресурс] // esh-derevenskoe: [сайт]. URL: https://esh-derevenskoe.ru/.
- Интернет-магазин — Лукино [Электронный ресурс] // lukino: [сайт]. URL: https://lukino.ru/.
- Интернет-магазин — Владимирская Мещера [Электронный ресурс] // svinopas-ru: [сайт]. URL: http://svinopas-ru.ru/.
- Documentation (Laravel 8.x) [Электронный ресурс] // Laravel: [сайт]. URL: https://laravel.su/docs/8.x/documentation.
- Быстрое учебное руководство по PHP IDE NetBeans [Электронный ресурс] // netbeans.apache: [сайт]. URL: https://netbeans.apache.org/kb/docs/php/quickstart_ru.html.
- PhpStorm [Электронный ресурс] // Wikipedia: [сайт]. URL: https://ru.wikipedia.org/wiki/PhpStorm.
- Laravel Request Lifecycle [Электронный ресурс] // practicaldev-herokuapp-com: [сайт]. URL: https://practicaldev-herokuapp-com.global.ssl.fastly.net/patelparixit07/laravel-request-lifecycle-195e.