Строка поиска на сайте

{"ops":[{"attributes":{"size":"18px"},"insert":" "},{"attributes":{"size":"18px","color":"#000000"},"insert":"Главная задача поисковой строки — быстро привести клиентов к тому, что они ищут. Поэтому важно, чтобы пользоваться ею было просто и удобно. Мы еще поговорим о дизайне поисковой строки, в другой статье, но сейчас я расскажу вам, как реализовать поисковую строку на сайте, не подключая сторонние плагины, с помощью "},{"attributes":{"color":"green","size":"18px","font":"courier"},"insert":"PHP"},{"attributes":{"color":"green","size":"18px"},"insert":". "},{"attributes":{"color":"black","size":"18px"},"insert":"Я расскажу вам как написать свой простенький поисковик на примере сайта на "},{"attributes":{"color":"green","size":"18px","font":"courier"},"insert":"Laravel"},{"attributes":{"color":"black","size":"18px"},"insert":"."},{"insert":"\n"}]}

{"ops":[{"attributes":{"size":"18px"},"insert":"Начнем с того, что создадим форму поисковой строки на странице представления, я использую "},{"attributes":{"size":"18px","font":"courier","color":"green"},"insert":"Font-awesome"},{"attributes":{"size":"18px"},"insert":" и "},{"attributes":{"size":"18px","font":"courier","color":"green"},"insert":"Butstrap 5"},{"attributes":{"size":"18px"},"insert":", но это не обязательное условие, они помогают нам создать дизайн формы:"},{"insert":"\n

"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" "},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" "},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" "},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" "},{"attributes":{"code-block":true},"insert":"\n"},{"insert":"
"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":"\n"},{"attributes":{"size":"18px"},"insert":"У меня получилась такая вот форма, вы можете увидеть ее справа на странице блога, давайте теперь заставим ее работать."},{"insert":"\n"},{"attributes":{"size":"18px"},"insert":"В контроллере "},{"attributes":{"size":"18px","font":"courier","color":"green"},"insert":"BlogController.php"},{"attributes":{"size":"18px"},"insert":" создадим функцию, которая на моем сайте ищет по совпадениям в заголовках статей:"},{"insert":"\npublic function search(Request $request){"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" $request->validate([ //Валидируем форму"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" 'search'=>'nullable',"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" ]);"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" $data =$request->all(); //Получаем запрос из формы"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" if($data['search']==null) {"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" return redirect()->route('blog.index')->with('error', 'Строка запроса пуста'); //если строка запроса пуста получаем ошибку"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" }"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" $words = strtolower($data['search']); //Переводим запрос в нижний регистр"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" $word = explode(' ', $words); //Разбиваем запрос по словам"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" $posts1 = Post::pluck('title')->all(); //Запрашиваем все заголовки статей"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" $i = 0;"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" foreach ($posts1 as $i=>$v) { //Перебираем заголовки в цикле"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" $post2[$i] = explode(' ', strtolower($v)); //Разбиваем каждый заголовок по словам и переводим в нижний регистр"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" $wor[$i] = array_intersect($word, $post2[$i]); //Сравниваем заголовок со строкой запроса"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" if ($wor[$i] !== []) { //Если есть совпадения, помещаем заголовок в массив"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" $posts3[$i] = $v;"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" }"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" $i++;"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" }"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" "},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" $posts = Post::all()->whereIn('title', $posts3); //Выбираем статьи в заголовке которых есть слова запроса"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" "},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" return view('blog.search', compact('posts')); //Выводим на страницу"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" }"},{"attributes":{"code-block":true},"insert":"\n"}]}

{"ops":[{"attributes":{"size":"18px"},"insert":"Если работаем в "},{"attributes":{"size":"18px","color":"green","font":"courier"},"insert":"Laravel"},{"attributes":{"size":"18px"},"insert":" создадим маршрут:"},{"insert":"\nRoute::get('blog/search', 'BlogController@search')->name('blog.search');"},{"attributes":{"code-block":true},"insert":"\n"},{"attributes":{"size":"18px"},"insert":"Остается только подключить форму:"},{"insert":"\n

"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" @csrf"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" @method('PUT')"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" "},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" "},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" "},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" "},{"attributes":{"code-block":true},"insert":"\n"},{"insert":"
"},{"attributes":{"code-block":true},"insert":"\n"},{"attributes":{"size":"18px"},"insert":"Наша строка поиска готова и вполне функциональна, при желании ее можно доработать и перебирать не только заголовки, но и тексты."},{"insert":"\n"},{"attributes":{"size":"18px"},"insert":"Буду рада если моя статья была вам полезна."},{"insert":"\n"}]}