Камрады, прошу помощи
Есть тестовый сайт а-ля "магазин часов":
-- справа из БД выводится весь список часов
-- слева фильтр по аналогии с "яндекс-маркетом"
Форму с фильтром настроил, она исправно работает, но начались проблемы при подключении пагинации.
Дело в том, что саму пагинацию я настроил, а объединить ее с фильтрами по категориям (бренд/тип механизма/ и т д) не получается.
Пример:
открываю первую страницу ввожу все фильтры, отправляю форму, страница обновляется с отфильтрованными элементами и получается такой адрес:
i-market.loc/market.php?from=5000&before=20000&brand%5B%5D=Michael+Kors
Всего при таких фильрах должно остаться 5 товаров, три из которых должны быть на первой странице, а оставшиеся два -- на второй странице.
Но при переходе на вторую страницу, при клике сюда:
<a class="page" href="?page=2">2</a>
весь $_GET исчезает и превращается в
i-market.loc/market.php?page=2 и выводятся не оставшиеся два элемента, а просто вторая страница из всей выборки.
Никак не могу придумать, как подружить эти функции.
Собственно код функции, которая отрабатывает по фильтрам и делает базовую пагинацию без фильтров:
в $arr прилетает $_GETfunction search(array $arr) {
$sql = "SELECT * FROM watches WHERE 1=1";
$category = [];
if(!empty($arr[from])) {
$sql .= ' AND price>=?';
$category[] = $arr[from];
}
if(!empty($arr[before])) {
$sql .= ' AND price<=?';
$category[] = $arr[before];
}
foreach ($arr as $nameCategory => $valueCategory) {
if ($nameCategory != 'from' && $nameCategory != 'before' && $nameCategory != 'page' ) {
if (!empty($arr[$nameCategory])){
if (count($arr[$nameCategory]) >= 1) {
$sql .= " AND ($nameCategory=?";
for ($i=1; $i<count($arr[$nameCategory]); $i++) {
$sql .= " OR $nameCategory=?";
}
$sql .= ')';
}
foreach ($arr[$nameCategory] as $val) {
$category[] = $val;
}
}
}
}
$notesOnPage = self::NOTES_ON_PAGE;
$from = ( $this->pageNumber() - 1) * $notesOnPage;
$sql .= " LIMIT $from, $notesOnPage";
$stmt = $this->_instance->prepare($sql);
$stmt->execute($category);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
return $result;
}