{"ops":[{"attributes":{"size":"18px"},"insert":" "},{"insert":"Главная задача поисковой строки — быстро привести клиентов к тому, что они ищут. Поэтому важно, чтобы пользоваться ею было просто и удобно. Мы еще поговорим о дизайне поисковой строки, в другой статье, но сейчас я расскажу вам, как реализовать поисковую строку на сайте, не подключая сторонние плагины, с помощью "},{"attributes":{"bold":true},"insert":"PHP"},{"insert":". Я расскажу вам как написать свой простенький поисковик на примере сайта на "},{"attributes":{"bold":true},"insert":"Laravel"},{"insert":".\n"}]}
{"ops":[{"insert":"Начнем с того, что создадим форму поисковой строки на странице представления, я использую "},{"attributes":{"bold":true},"insert":"Font-awesome "},{"insert":"и "},{"attributes":{"bold":true},"insert":"Butstrap 5,"},{"insert":" но это не обязательное условие, они помогают нам создать дизайн формы:\n<form action=\"\" method=\"get\" class=\"input-group\">"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" <input type=\"search\" name=\"search\" class=\"form-control\" placeholder=\"Найти пост\">"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" <span class=\"input-group-btn\">"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" <button class=\"btn btn-default\" type=\"submit\"><i class=\"lnr lnr-magnifier\"></i></button>"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" </span>"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":"</form>"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":"\nУ меня получилась такая вот форма, вы можете увидеть ее справа на странице блога, давайте теперь заставим ее работать.\nВ контроллере"},{"attributes":{"bold":true},"insert":" BlogController.php "},{"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":[{"insert":"Если работаем в "},{"attributes":{"bold":true},"insert":"Laravel "},{"insert":"создадим маршрут:\nRoute::get('blog/search', 'BlogController@search')->name('blog.search');"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":"Остается только подключить форму:\n<form action=\"{{ route('blog.search')}}\" method=\"get\" class=\"input-group\">"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" @csrf"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" @method('PUT')"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" <input type=\"search\" name=\"search\" class=\"form-control\" placeholder=\"  Найти   пост  \">"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" <span class=\"input-group-btn\">"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" <button class=\"btn btn-default\" type=\"submit\"><i class=\"lnr lnr-magnifier\"></i></button>"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":" </span>"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":"</form>"},{"attributes":{"code-block":true},"insert":"\n"},{"insert":"Наша строка поиска готова и вполне функциональна, при желании ее можно доработать и перебирать не только заголовки, но и тексты.\nБуду рада если моя статья была вам полезна.\n"}]}