Фільтри в інтернет-магазині

У попередньому уроці ми навчилися збирати дані на клієнта і відправляти їх на сервер. А на сервері написали заглушку в тому місці, де повинні повертатися товари, відфільтровані по введених параметрах. Зараз ми позбудемося заглушки і напишемо пару методів і запитів, які витягують з бази потрібні товари і повертають їх клієнту. Урок досить короткий. приступаємо

Що будемо робити?

Нам потрібно виконати всього 3 пункту:
  • 1. Отримати дані з клієнта і обробити їх під потреби сервера. Наприклад, проставити параметри за замовчуванням
  • 2. Написати, власне, сам код для вилучення товарів з бази. В першу чергу, підготувати sql-запит
  • 3. Повернути клієнту отримані дані

Отримання даних з клієнта

Ви можете запитати: для чого потрібно виділяти цю просту операцію окремо, якщо всі дані ми легко витягнемо з масиву $ _GET?

По-перше, для того, щоб проставити значення за замовчуванням. Не можна покладатися на те, що клієнт сам подбає про це.

По-друге, не всі дані знаходяться в $ _GET в придатному для використання вигляді. Наприклад, сортування з клієнта нам зручніше передавати одним параметром у вигляді поле_направленіе, наприклад, price_asc. Але в sql-запиті це окремі сутності, тому їх потрібно попередньо обробити.

Схожа ситуація і з брендами. На клієнті ми відправляємо їх у вигляді масиву brands, і php їх отримує теж як масив. Але для sql-запиту потрібна рядок - список брендів через кому. Тому бренди теж потрібно додатково обробляти.

Отже, напишемо функцію getOptions (), яка витягне дані з $ _GET і перетворює їх в зручний нам вид. Майже всі ввідні я вже повідомив, тому відразу дивимося на готовий код.

Далі ми перетворимо масив брендів в рядок айдішніков, розділених комами. Саме в такому вигляді бренди будуть використовуватися в запиті до бази.

Сортування перетворимо по-іншому. Окремо витягуємо поле сортування та параметр: asc або desc.

Зверніть увагу, що у всіх випадках ми не забуваємо підставляти значення за замовчуванням, якщо потрібний параметр не приїхав з клієнта. І тепер, коли всі дані перетворені, залишилося тільки повернути їх з функції в асоціативному масиві через return array (.)

Підготовка sql-запиту і витяг даних з бази

Всі дані підготовлені в потрібному нам вигляді, тепер напишемо запит і виконаємо його. Цим буде займатися функція getGoods ($ options, $ conn). В параметрах вона приймає $ options - дані, підготовлені попередньою функцією, і $ conn - об'єкт підключення до БД, який ми створили в попередньому уроці. Наше завдання - написати sql-запит. У загальному вигляді він виглядає так:

Повертаємо товари клієнту

Це найпростіша частина уроку. Подивимося на заглушку, написану в попередньому уроці.

Замінимо цей код на

Ми додали пару рядків: функцією getOptions витягли дані в змінну $ options. Тут же використовували її в отриманні товарів getGoods, результати зберегли в $ goods. І розширили відповідь клієнту. Параметр data перейменували в options і повернули в нього не вміст $ _GET, а вже перетворені значення. І в параметрі goods повернули масив отриманих товарів.

На цьому урок закінчений. Поки ми не можемо використовувати ці дані на клієнта, отрисовать їх в браузері - цим ми займемося на наступному уроці. Але завжди можемо відкрити консоль, потикати кнопочки і галочки і переконатися, що сервер повертає нам правильні товари.

Перевіряємо результати роботи

Тепер поставимо мінімальну ціну в 20 тисяч і змінимо сортування на спадання ціни

Фільтри в інтернет-магазині
Як видно, тепер всього 2 товари - один сумісного відкинути через невідповідною по фільтрам ціни в 17 тисяч. І відсортовані товари вже навпаки. Якщо Ви все зробили правильно, то побачите таку саму картинку.
Фільтри в інтернет-магазині

Ви можете ще пограти з консоллю і переконатися, що дані повертаються коректно. Зрештою, найважливіше - це домогтися правильної роботи фільтрів, повернення правильного списку товарів. Розкидати отримані дані по сторінці, з урахуванням вже готової верстки - справа зовні найцікавіше, але з точки зору розробки досить просте. Але не буду забігати вперед - подробиці в наступному уроці.

Схожі статті