Лекция 3.1 Алгоритмизация и программирование PHP
Пример создания простого интернет-магазина с применением многомерных массивов
Задача
Создать работающий макет интернет-магазина, позволяющего условному покупателю выбирать из витрины товаров любой товар и класть его в корзину.
Администратору формировать витрину товаров.
В качестве «хранилища данных» будем использовать пример многомерного массива из лекции 3.
Там мы использовали массив, имеющий следующую структуру:
Array(‘Наименование товара’=>array (‘Цена товара’=>’целое число’, ’Описание товара’=>’Строка’, [Следующий товар], …. ); Где [Следующий товар] следующая аналогичная цепочка ‘Наименование товара’=>array(…)…
Здесь ключом ассоциативного массива, содержащего параметры товара -Цена и Описание, служит Наименование товара.
Теперь мы доработаем этот массив, добавив в него третий параметр - Изображение.
Этот код демонстрирует структуру нашего обновлённого массива:
$price_list[$product_name]= array( 'Цена'=>$product_price, 'Описание'=>$product_descr, 'Изображение'=>$product_img );
Именно так мы планируем заполнять информацией о товарах наш массив.
Создадим следующую файловую структуру для нашего микро интернет-магазинчика:
Создаём Бэк энд
Начнём с написания кода формы ввода информации о товаре в файле admin.php, так как он нам нужен прежде всего для заполнения массива информацией о товарах.
';////////////отображение формы заполнения прайс-листа///////////////////////////////////// echo'
В параметре action формы мы указываем адрес обработчика "?p=1". Этот адрес не указывает нам другую страницу, а указывает просто передачу параметра p, равного единице.
Параметр передаётся методом GET , для этого используется вопросительный знак:
'; //////////////отображение прайс-листа//////////////////////// echo'
Прайс-лист
'; echo'Наименование | Описание | Цена | Изображение |
---|---|---|---|
'.$key.' | '.$value['Описание'].' | '.$value['Цена'].'₽ |
Пример отображения в браузере
Страница Бэкэнда с заполненными товарами должна выглядеть в браузере примерно так так:
Создаём Фронтенд
Здесь мы создадим сценарий выбора товара, отправку его в корзину, просмотр корзины, очистку корзину и условного совершения покупки.
В данном примере для простоты демонстрации отсутствуют сценарии оплаты покупки и сохранения информации о покупке.
Код сценария размещаем в файле index.php.
Запуск сессии
Познакомимся с функцией запуска сессии:
Это позволит нам не передавать кучу параметров при обновлении страницы, так ка необходимая информация будет храниться в глобальном массиве $_SESSION.
Поместим вызов сессии session_start(); в самое начало файла index.php сразу под дескриптором <?
Конвертация прайс-листа
Теперь напишем знакомый нам код конвертации прайс-листа в массив $price_list:
/////////////Получение прайс-листа////////////////////////// if(file_exists($path))//проверяем создан ли ли файл $import=file_get_contents($path);//Читаем файл //Конвертируем текст из файла в массив $price_list if($import)//проверяем прочитался ли файл в переменную $import $price_list=unserialize($import);//конвертируем текст из файла в массив
Создаём переменную контента
В данном сценарии мы будем весь отображаемый контент страницы сохранять в переменную $content, накапливая ее html кодом по мере выполнения сценариев.
Позже мы её внедрим в html шаблон web страницы.
Создаём пустую переменную и размещаем эту строчку кода над сценарием конвертации прайс-листа:
Сценарий отображения витрины магазина с товарами
';////////////Отображение витрины товаров///////////////////// $content.=' Витрина
'; $content.='
Здесь мы создаём форму для отправки результата выбора товаров с витрины и помещаем в неё таблицу с товарами и чекбоксами формы, строки которой формируются в теле цикла foreach, который выбирает данные из массива $price_list.
Имена чекбоксов так же формируются в теле цикла. Они представляют собой элементы индексированного массива ch[], который автоматически заполняется значениями, содержащими наименования товаров.
Форма содержит кнопку тира Submit со значением Купить, клик по которой осуществляет отправку формы обработчику, который формирует покупательскую корзину.
Атрибут action формы передаёт методом GET параметр cart, равный единице.
На сайте форма выглядит так:
Обработчик формы выбора товаров
Приём переменных
Пишем код приёма переменных из формы и помещаем его в самый верх под session_start().
///////Принимаем данные из формы//////////////////// $ch=$_POST['ch']; $cart=$_GET['cart']; $pay=$_GET['pay'];
Сценарий формирования корзины
////////обработчик формы////////////////////// if($cart==1)//Формирование корзины { if($ch) { foreach($ch as $k=>$v) { $_SESSION['newcart'][]=$v;//Наполнение корзины } } }
Здесь мы проверяем истинность (наличие заполненности) массива $ch, который формировался в форме витрины с товарами и поступил после отправки формы в этот обработчик.
Далее мы раскрываем его в цикле foreash и присваиваем в виде значения глобальному массиву $_SESSION['newcart'][] с автоматическим формированием индекса с помощью квадратных скобок.
Таким образом в переменную сессии записываются названия выбранных товаров, которые хранятся там в течении всего сеанса работы до тех пор, пока не будет закрыт браузер или пока сценарий не очистит эту переменную.
Сценарий отображения ссылок для проверки содержимого корзины и для её очистки
После формирования корзины, покупателю открывается доступ к ссылкам просмотра корзины с указанием количества товаров в корзине и ссылке для очистки корзины от товаров.
Ссылка просмотра позволяет запускать сценарий отображения корзины.
Ссылка очистки корзины позволяет запускать сценарий очистки корзины.
Запишем следующий код и разместим его под сценариями обработчика формы.
if(isset($_SESSION['newcart'])) { $n=count($_SESSION['newcart']); $content.=' '; }
Этот сценарий проверяет наличие товаров в корзине, затем с помощью функции подсчёта элементов массива count присваивает значение количества переменной $n.
Далее формируется код ссылки просмотра корзины, где к тексту Ваша корзина присоединяется значение переменной $n в круглых скобках и код ссылки очистки корзины.
В ссылках методом GET с помощью знака ? передаются параметры cart=2 для запуска сценария просмотра корзины и cart=3 для запуска сценария очистки корзины.
Сценарий отображения содержимого корзины
/////////////Формирование контента////////////////////////// if($cart==2)//просмотр корзины { $content.='
'.$v.' | '.$price_list[$v]['Цена'].' ₽ | |
ИТОГО: | '.$sum.' ₽ |
'; }
Данный сценарий формирует ссылку на сценарий, имитирующий оплату покупок, путём передачи методом GET с помощью знака ? параметра pay=1.
Затем формирует таблицу и счётчик в виде переменной $sum=0.
Эта переменная будет суммировать стоимость выбранных в корзину товаров.
С помощью оператора цикла foreach мы просматриваем глобальный массив $_SESSION['newcart']. В цикле мы прибавляем к переменной $sum значение стоимости товара, ключ-наименование которого содержится в переменной $v из массива $price_list[$v] по ключу 'Цена'.
Далее формируем строки таблицы, в столбцы которых вставляем тег изображения с указанием ссылки на него из массива $price_list[$v] по ключу 'Изображние', наименование товара из переменной $v и цену товара из массива $price_list[$v] по ключу 'Цена'.
После тела цикла мы формируем строку из двух объединённых столбцов, куда помещаем слово ИТОГО: в тегах b, придающих ему жирность и в другом столбце помещаем значение переменной $sum, которая в цикле выросла до суммы всей корзины.
Завершаем отображение таблицы прямой линией, формируемой тегом hr.
Сценарии очистки корзины
В заключении сценарной части напишем два сценария очистки корзины и разместим их под сценарием формирования корзины:
if($cart==3)//Очистка корзины от покупок { unset ($_SESSION); session_destroy(); } if($pay==1)//Очистка корзины от покупок { unset ($_SESSION); session_destroy(); $content.=' Спасибо за покупку!!!
Приходите ещё!
'; }
Первый сценарий срабатывает при получении значения переменной $cart, равному трём. С помощью функции unset() мы уничтожаем глобальную переменную $_SESSION, тем самым опустошая корзину, затем функцией session_destroy прекращаем сеанс.
Второй сценарий срабатывает при получении значения переменной $pay, равному единице. Здесь по идее должен быть сценарий осуществления платежа, но мы просто убиваем глобальную переменную и выключаем сессию и формируем текст благодарности за покупку.
Внедрение сформированного контента в html код шаблона страницы интернет-магазина
Теперь, когда мы написали все сценарии по формированию контента для отображения, внедрим переменную $content в html шаблон страницы:
Интернет-магазин echo $content;//Отображаем контент на странице сайта ?>
Этот код мы помещаем в самый низ нашего файла после закрывающего дескриптора PHP ?>.
Результат доступен для просмотра по ссылкам:
Полный код фронтенд
header('Content-Type: text/html; charset=windows-1251'); session_start(); ///////Принимаем данные из формы//////////////////// $ch=$_POST['ch']; $cart=$_GET['cart']; $pay=$_GET['pay']; $content='';//Создаём пустую переменную контента $path='price.txt';//Задаём путь к файлу, где хранится прайс-лист ////////обработчик формы////////////////////// if($cart==1)//Формирование корзины { if($ch) { foreach($ch as $k=>$v) { $_SESSION['newcart'][]=$v;//Наполнение корзины } } } if($cart==3)//Очистка корзины от покупок { unset ($_SESSION); session_destroy(); } if($pay==1)//Очистка корзины от покупок { unset ($_SESSION); session_destroy(); $content.=' Спасибо за покупку!!!
Приходите ещё!
'; } if(isset($_SESSION['newcart'])) { $n=count($_SESSION['newcart']); $content.=' '; } /////////////Получение прайс-листа////////////////////////// if(file_exists($path))//проверяем создан ли ли файл $import=file_get_contents($path);//Читаем файл //Конвертируем текст из файла в массив $price_list if($import)//проверяем прочитался ли файл в переменную $import $price_list=unserialize($import);//конвертируем текст из файла в массив /////////////Формирование контента////////////////////////// if($cart==2)//просмотр корзины { $content.='
'.$v.' | '.$price_list[$v]['Цена'].' ₽ | |
ИТОГО: | '.$sum.' ₽ |
'; } ////////////Отображение витрины товаров///////////////////// $content.='
Витрина
'; $content.=' '; ?>Заключение
Следует понимать, что реально-работающий магазин следует строить с использованием базы данных, напримен MySQL.
Приведённый в этой лекции скрипт является учебным. Он раскрывает основной принцип построения электронной витрины и покупательской корзины.
Здесь отсутствует скрипт идентификации администратора, скрипт совершения платежа.
Приведённая здесь структура массива так же не рекомендуется для реального применения, потому что роль ключа здесь выполняет относительно длинная строка. Эта строка не должна содержать кавычек.
Здесь целесообразнее применить структуру массива, где основным ключом записи товара будет назначаться уникальное целое число.