→ Пошук по сайту       Увійти / Зареєструватися
Знання CMS — системи керування вмістом Розробка систем керування контентом (CMS) – архітектурні та інфологічні засади

8. Фільтрація сторінок за специфічними параметрами в CMS

 CMS

Фільтри по характеристикам товарів є ефективним засобом навігації та пошуку необхідних товарів в інтернет-магазинах (рис.14). Натомість, реалізація такої функціональності вимагає цілого комплексу дій для моделювання даних та побудови алгоритмів пошуку та відображення інформації.

Рис. 14. Приклад сторінки інтернет-магазина з фільтрами

Реалізація фільтрації

Клас Фільтри відповідає за обробку http-параметрів, підготовку структур даних для відображення панелі фільтрів, генерацію SQL-запиту (або його частини) для отримання сторінок, що задовольняють умовам фільтру.

Об’єкт сторінки-контейнера за необхідності ініціалізує та агрегує в собі об’єкт, що керує фільтрами даної сторінки-контейнера.

Реляційна модель даних для реалізації фільтрів

Рис. 15. Реляційна модель фільтрів

Формування та обробка http-параметрів та URL

Приклад:

http-запит: http://www.site.com/?view=racecourses&f=26,41,46
Коди фільтрів: 26, 41, 46.

В класі Фільтрів реалізувати функції parseHttp() та makeHttp(), що відповідно перетворюють параметри GET-запиту в масив значень фільтрів та навпаки.

Генерація SQL-запиту

Приклад запиту:

http-запит: http://www.site.com/?view=racecourses&f=26,41,46

Результуючий SQL-запит:


select pages.* from pages
   inner join filterValuePages fv1 using (page)
   inner join filterValuePages fv2 using (page)
   inner join filterValuePages fv3 using (page)
 where fv1.filterValue = '26'
   and fv2.filterValue = '41'
   and fv3.filterValue = '46'
   and parentPage = 'racecourses'
order by price

Для реалізації таких запитів підготувати функцію класу Фільтри, що генерує клаузу JOIN – getJoin(), вхідний параметр – масив значень фільтра.

Цю функцію слід задіювати при генерації запита на дочірні елементи контейнера-категорії товарів в класі Сторінка.

Особливості застосування логічних операцій «та/або» в SQL-запиті фільтра

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

Загальне правило: в середині групи “або”, за межами групи – “та”.

На рівні SQL-запиту логіку “або” можна реалізувати за допомогою оператора IN (…). Наприклад користувач обрав значення фільтрів з такими ідентифікаторами: 26, 41, 42, при цьому 41 та 42 належать одній групі фільтру. SQL-запит буде наступним:


select pages.* from pages
   inner join filterValuePages fv1 using (page)
   inner join filterValuePages fv2 using (page)
   inner join filterValuePages fv3 using (page)
 where fv1.filterValue = '26'
   and fv2.filterValue in ('41', '41')
   and parentPage = 'racecourses'
order by price

Формування панелі вибору фільтрів

  1. По налаштуванням сторінки-контейнера вибрати з БД усі фільтри та їх значення для даної категорії.
  2. Відмітити поточні значення фільтрів.
  3. Підрахувати доступну кількість сторінок для кожного значення фільтра:
    • додати до поточного набору фільтрів дане значення фільтра;
    • виконати запит на кількість сторінок count(*) для такої комбінації фільтрів, використовуючи для генерації запита функцію getJoin();
  4. Вивести посилання, сформоване за допомогою функції makeHttp() для даного значення фільтра, що буде враховувати вже відмічені фільтри.


© Титенко С. В. Інформація курсу по матеріалам:
Web-орієнтовані інформаційні системи. Методичні вказівки до вивчення дисципліни для студентів напряму підготовки 6.050103 «Програмна інженерія» / Титенко С. В. – К.: НТУУ «КПІ» 2015. – 51с.
загрузка...
Теми розділу
Сторінки, близькі за змістом