Интернет-магазин на чистом PHP для портфолио PHP-разработчика

Решил написать интернет-магазин в качестве проекта для портфолио. Так как, по сути, это моя первая крупная программа (не только на PHP), хотел бы обсудить её реализацию. Узнать, что об этом думают разбирающиеся в сфере люди

В базе данных содержатся таблицы:

  • users с данными о пользователях: id (Primary, Auto Increment), логин, пароль через password_hash(), email, расширение аватарки (имя файла совпадает с логином), ФИО, дата рождения, город, ранг (постоянный клиент, VIP и т.д.)
  • products с данными о товарах: id товара, id категории, имя производителя, цена, количество товара на складе, оценка покупателей
  • categories с данными о категориях товаров: id категории, id родительской категории, краткое описание
  • orders с данными о заказах: id заказа, номер заказа, id покупателя, сумма, состояние заказа, способ оплаты, способ доставки
  • ordered_products c заказанными товарами (т.к. в заказе может быть несколько товаров, создаю под них отдельную таблицу): id заказа, id товара, цена (с учётом скидки)
  • images с фотографиями товаров: id, id товара, путь к файлу

При заходе пользователя на сайт открывается главная страница, на которую подгружается несколько товаров из базы данных в зависимости от оценки. При нажатии на кнопку "Аккаунт" открывается страница пользователя с его данными и отдельной вкладкой (кнопкой) под открытие списка заказов. В список заказов выводятся , сформированные из таблицы БД orders (WHERE ID = user_id)

При заходе администратора на свой аккаунт открывается две вкладки: список заказов (с выборкой по дате), и интерфейс для создания новых товаров, категорий на сайте.

Осталось ещё несколько функций сайта, которые я пока не знаю как реализовать.

  1. Где хранить комментарии и отзывы к товару в базе? Держать их вперемешку в таблице comments? Не будет ли в таком случае поиск среди всех комментариях слишком долгим?
  2. Как реализовать смену языка? Придётся прописывать отдельно новый сайт с английским языком и английской базой?
  3. Как ограничить пользователя одним отзывом на товар? Перед отправкой каждого отзыва проводить поиск по таблице отзывов этого товара?

Понимаю, что важно как можно больше продумать самостоятельно, но всё-таки хотелось бы снизить число ударов граблями по лбу к минимуму. Буду рад любым советам, не только касающимся указанных выше вопросов


Ответы (2 шт):

Автор решения: DaemonHK

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

  1. Разделить таблицы, ведь комментарии я оставляю ко всему магазину.
  2. Сделать можно по разному, но суть - в той же таблице, например, добавив языковых полей, типа title_ru, title_en
  3. Да, ищем отзыв юзера к товару и скрываем форму для отзыва.
  4. По поводу папки localization - годится только для статичных данных, типа названия месяцев, дней недель и т.д. Все остальное через БД.

По поводу всего остального - пишите, научитесь проектировать, столкнувшись с куууучей своих же грабель. А потом плюнете и будете работать с современными "свистоперделками", нужными для работодателей))

→ Ссылка
Автор решения: Denis I

Рекомендую добавить 1. Таблицу с категориями товаров 2. Таблицу со свойствами товаров (привязывать к категориям) Чтобы при добавлении товара ему можно было присвоить свойство, например Лампочка - "Тип" [светодиодная, накаливания и т. д.].

→ Ссылка