Фильтры поиска, нужно доделать

Цена договорная
28 января 2023, 10:05 • 4 отклика • 72 просмотра
Всем привет, пытался сам сделать, по примерам, но знаний не хватает, не все могу реализовать.
Задача для тех кто php отлично знает, ну и js.

Будет хорошо, если работали с фраемворками, а желательно с ko7, koseven она же kohana.

Есть страница, там подгрузка авто, есть фильтры на странице, сортировка по ценам, по датам и дням.

Как все работает и устроено.
При выборе цены или даты, берется значение с селекта.

<select name="sortPrice" id="sortPrice" class="js-selectize" placeholder="Цене">
<option value="0">Цене</option>
<option value="DESC">По возрастанию</option>
<option value="ASC">По убыванию</option>
</select>

Значение уходит в контроллер, далее там идет проверка, если значение пришло, то задействуем обновление по сортировке авто.

$requestBody = ''; parse_str($this->request->body(), $requestBody);

$sortPrice = $requestBody['sortPrice'] ?? []; //прайс - получаем ASC ИЛИ DESC
$sortGod = $requestBody['sortGod'] ?? []; //год - получаем ASC ИЛИ DESC

$session = Session::instance();

if ($sortPrice) {
$auto = $autosOrm
->order_by('price', $sortPrice)
->order_by('god', $sortGod)
->and_where('status', '=', 1)
->find_all();

//записываем сессию если есть сорт прайс
$session->set('sortPrice', $sortPrice);
}

Идет запись в сессию, для того чтобы потом когда мы нажимаем на страницы в пагинации, выбранная сортировка была выбрана.

Вот пример.
<?php
$sortPrice = [
(object)['value' => 'DESC', 'name' => 'По возрастанию'],
(object)['value' => 'ASC', 'name' => 'По убыванию'],
];
?>
<select name="sortPrice" id="sortPrice" class="js-selectize" placeholder="Цене">
<option value="0">Цене</option>
<?php foreach ($sortPrice as $sortPrice) : ?>
<option value="<?php echo $sortPrice->value ?>" <?php if ($sortPrice->value == $sessionPrice) : ?> selected<?php endif; ?>><?php echo $sortPrice->name ?></option>
<?php endforeach; ?>
</select>

Что не выходит сделать и нужно сделать:
Не могу разобраться с пагинацией, выбрал я допустим сортировка по цене, подгрузились авто по цене по возрастанию к примеру, страницы тож появились, но если на 2 перейти, то там идут как и на первой авто.

Получение номера страницы есть:
$pageUrl = $requestBody['page'] ?? []; //получаем номер страницы, 1,2 и так далее

Пагинация:
$page = $this->request->param('id');
if ($page < 1) {
$page = 1;
}

$settings = ORM::factory('Setting', 1);
$countOnList = $settings->autoPage;
$autosCountOrm = ORM::factory('Auto');

$autosCount = $autosCountOrm->find_all()->count();
$autosOrm = ORM::factory('Auto');

$autosOrm->limit($countOnList);
$autosOrm->offset((($page - 1) * $countOnList));

$pagination = Pagination::factory(array(
'current_page' => array(
// 'source' => 'query_string',
'source' => 'route',
'key' => 'page'
),
'total_items' => $autosCount,
'items_per_page' => $countOnList, 'view' => 'admin/paginations.query'
));
$pagination = Helper_Pagenavigator::view_pagination($autosCount, '/auto', $pageUrl, $countOnList);

Есть там же сортировка по датам, типа показывать за последние три дня, за неделю и т.д.
Делал но не все понимаю как сделать, чтобы сортировать по датам, показывать авто за последний день, те что добавились, или за последние три или неделю.

//за три дня
if ($sortDate == 'Inthreedays') {
$date1 = date('Y-m-d'); //сегодняшняя дата и время
$date2 = date('Y-m-d', strtotime('-3 days'));
$starDate = $date1;
$endDate = $date2;
}

if ($starDate) {
$auto = $autosOrm
->where('date', $starDate)
->and_where('date', $endDate)
//->and_where('status', '=', 1)
->find_all();
}

Тут не верно, не работает так.

Ну вообщем это основные задачи по сортировке, задачи очень простые.
Отзывы
Рекомендую, задач было больше чем в задании, все задачи решил, соображает в php, js, не просто на словах, а на деле.
~ 1 год назад
R50 a437b39fa47ca736ed1251aa50164e8a
Фрилансер
Адекватный заказчик, сразу отвечает на возникающие вопросы. С оплатой не было никаких проблем.
~ 1 год назад