В настоящее время я создал фильтры, которые выбирают сообщения за сегодняшний день, за эту неделю или за этот месяц. Это просто и все, однако, когда я попытался добавить функциональность, которая позволяет мне добавить второй фильтр, все пошло не так.
Прежде всего, я не могу понять, как добавить второй компонент запроса к URL-адресу без использования переключателей. В настоящее время у меня есть это:
<ul class='home-filters'>
<li><a class='placeholderA' href='?time=today'>Today</a></li>
<li><a class='placeholderA' href='?time=week'>This Week</a></li>
<li><a class='placeholderA' href='?time=month'>This Month</a></li>
<li><a class='placeholderA' href='/'>Reset</a></li>
</ul>
Когда я нажимаю на любую из этих ссылок, она добавляет? Time = и желаемый временной интервал к URL-адресу, как этот http://example.com/?time=month. После этого мой контроллер страницы определяет, какие изображения показывать, используя этот код:
public function index(Request $request){
if ($request->get('time') && $request->get('time') == 'today') {
$images = Image::orderBy('created_at', 'DESC')
->whereDate('created_at', Carbon::today())
->get();
} else if ($request->get('time') && $request->get('time') == 'week') {
$images = Image::orderBy('created_at', 'DESC')
->whereDate('created_at', '>', Carbon::now()->subWeek())
->get();
} else if ($request->get('time') && $request->get('time') == 'month') {
$images = Image::orderBy('created_at', 'DESC')
->whereDate('created_at', '>', Carbon::now()->subMonth())
->get();
} else {
$images = Image::orderBy('created_at', $request->get('order') ?? 'desc')
->get();
}
return view('home', ['images' => $images]);
}
Это работает отлично и изящно, однако я хочу сделать так, чтобы можно было применить 2 фильтра, как этот http://example.com/?time=month&order=ascending.
Пытаюсь сделать аналогично тому, как это сделано на этом сайте - https://www.artstation.com/. Если я выберу «Цифровой 2D» в раскрывающемся меню «Все мультимедиа», а также нажму «Тенденции», URL-адрес стороны станет https://www.artstation.com/artwork?sorting=trending&medium=digital2d. Оба места, на которые я нажимаю, кажутся элементами <a>, такими же, как у меня.
Моя цель - иметь возможность добавлять компоненты запроса одним щелчком элемента <a>. Я буду беспокоиться о внутренней логике после того, как разберусь с этим.
Я хочу, чтобы страница обновлялась и отображались видимые изменения после каждого щелчка. Вы нажимаете первый фильтр, страница обновляется и вы получаете сообщения с сегодняшнего дня, вы нажимаете второй фильтр, страница снова обновляется и вы получаете сообщения, соответствующие обоим фильтрам. Если бы я использовал переключатели, вам пришлось бы выбрать первый фильтр, и ничего бы не произошло, затем выберите второй, и ничего не произойдет снова, и так далее, и так далее, пока пользователь не выберет все фильтры и не нажмет на отправку форма. Также мне пришлось бы очень хорошо поработать, чтобы изменить внешний вид переключателей на что-то более привлекательное.
Вам нужно несколько js, чтобы создать строку запроса из различных элементов страницы и отправить их во встроенном URL-адресе или запросе ajax. Разберите существующие параметры URL-адреса в объект js, а затем перестройте его при щелчке или изменении фильтра. Что-то вроде этого древнего ответа.






Почему вы не хотите использовать переключатели? Вы также можете использовать список выбора / флажки или что угодно. Просто создайте форму, которая использует GET и сколько фильтров вы хотите. Когда вы отправите форму, вы получите все фильтры.