Xem thêm

Chức năng tìm kiếm với Laravel: Hướng dẫn đơn giản để tạo form tìm kiếm

Huy Erick
Hình ảnh minh họa Bạn muốn thêm chức năng tìm kiếm vào website của mình, nhưng lại không biết bắt đầu từ đâu? Đừng lo, với Laravel, bạn có thể dễ dàng tạo form tìm...

Hình ảnh chức năng tìm kiếm với Laravel Hình ảnh minh họa

Bạn muốn thêm chức năng tìm kiếm vào website của mình, nhưng lại không biết bắt đầu từ đâu? Đừng lo, với Laravel, bạn có thể dễ dàng tạo form tìm kiếm và hiển thị kết quả chỉ trong vài bước đơn giản. Hãy theo dõi hướng dẫn dưới đây để khám phá cách làm điều đó.

Mục lục

Tạo form tìm kiếm

<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" >
<div id="timkiem" class="col-10 p-2 mx-auto">
  <form class="border border-primary p-2 row" action="" method="get">
    <input class="border border-primary p-2 col-6" placeholder= "Từ khóa">
    <button type="submit" class="btn btn-primary p-2 col-2">Tìm </button>
  </form>
  <div id="ketquatim">
    <!-- kết quả tìm kiếm -->
  </div>
</div>

Routing vào chức năng tìm kiếm

Route::get("/timkiem", function(){
  return view('timkiem');
});

Tiếp nhận từ khóa và select sản phẩm từ database

Trong routes/web.php, code lại route timkiem để tiếp nhận từ khóa trong querystring, select các sản phẩm có tên chứa từ khóa rồi đưa kết quả cho view hiển thị. Kết quả như sau:

use Illuminate\Http\Request;

Route::get("/timkiem", function(Request $request){
  $tukhoa = ($request->has('tukhoa'))? $request->query('tukhoa'):"";
  $tukhoa = trim(strip_tags($tukhoa));
  $listsp=[];
  if ($tukhoa!=""){
    $listsp = DB::table("sanpham")->where("tensp", "like", "%$tukhoa%")->get();
  }
  return view('timkiem', ['tukhoa'=> $tukhoa , 'listsp'=>$listsp]);
});

Tạo view hiện dữ liệu

Hình ảnh hướng dẫn copy code Hình ảnh minh họa

  • Mở file views/timkiem.blade.php và paste code vừa copy vào mục "kết quả tìm kiếm".

  • Trong code vừa paste có 3 thẻ <a>. Hãy xóa 2 thẻ <a> đầu, chỉ chừa lại 1 thẻ <a> cuối. Kết quả như sau:

Hình ảnh gợi ý xóa thẻ a Hình ảnh minh họa

  • Code để hiện thông tin của sản phẩm trong thẻ <a>. Xem hình gợi ý như sau:

Hình ảnh gợi ý hiện thông tin sản phẩm Hình ảnh minh họa

Kết quả code sẽ thế này:

Hình ảnh kết quả code Hình ảnh minh họa

Giờ thì thưởng thức kết quả. Vào http://localhost:8000/timkiem, gõ từ khóa và xem dữ liệu hiện ra theo từ khóa:

Hình ảnh kết quả tìm kiếm Hình ảnh minh họa

Phân trang

Kết quả tìm kiếm có thể rất nhiều (tùy thuộc vào dữ liệu trong database và từ khóa) nên cần thêm phân trang để người dùng dễ dàng theo dõi và truy cập.

a. Sử dụng lib paginator để phân trang

Ở đầu file routes/web.php, code 2 lệnh sau để sử dụng Paginator (thanh phân trang) và yêu cầu nó phát sinh code tương thích với bootstrap:

use Illuminate\Pagination\Paginator;

Paginator::useBootstrap();

b. Tạo các trang dữ liệu

Trong route timkiem, bỏ hàm get() thay bằng hàm paginate() để phát sinh các trang dữ liệu như sau:

$listsp = DB::table("sanpham")->where("tensp", "like", "%$tukhoa%")->paginate(10);

c. Hiện các link phân trang trong view

Mở views/timkiem.blade.php, gọi hàm links() ở sau list group để hiện các link phân trang:

...
</div>
{!! $listsp->links() !!}

d. Test: Vào xem http://localhost:8000/timkiem, gõ từ khóa để xem kết quả đã phân trang:

Hình ảnh kết quả phân trang Hình ảnh minh họa

Chức năng tìm kiếm với Laravel không khó phải không nào? Rất đơn giản! Bạn chỉ cần làm theo các bước trên, và nếu muốn đưa form tìm kiếm vào layout của riêng bạn, hãy thêm lệnh @extends ở đầu view là xong. Bạn cũng có thể biến thể một chút bằng cách đưa form tìm kiếm vào trong layout cũng được, hãy thử và khám phá thêm nhé.

1