Phân trang tìm kiếm trong cakephp 1.1

Phân trang tìm kiếm trong cakephp 1.1

Việc phân trang trong cakephp 1.1 đã được tôi đề cập ở bài trước vì vậy tôi sẽ không hướng dẫn chi tiết các bạn cách làm phân trang trong cakephp 1.1 nữa. Các bạn có thể xem lại tại Pagination - Phân trang trong cakephp 1.1.x Ở bài viết này tôi chỉ đi hướng dẫn cách phân trang khi tìm kiếm mà thôi. (Tất nhiên là dựa vào cách phân trang ở bài viết trước rồi).

>>Hàm tạo alias từ title

>>Cake bake - cake console toàn tập

>>CakePHP Console

Với các PaginationHelper và PaginationComponent ở bài trước chỉ có thể giúp chúng ta phân trang một cách bình thường mà thôi. Nhưng khi chúng ta thêm vào điều kiện tìm kiếm thì chức năng phân trang sẽ chạy sai. Nguyên nhân là do khi chúng ta thực hiện phân trang thì các biến của trang sẽ được truyền qua URL theo phương thức GET. Vì vậy mà các điều kiện lọc ở form sẽ không được truyền vào , và khi khởi tạo lại trang thì nó sẽ chỉ hiểu các điều kiện truyền từ phương thức GET, do vậy phân trang không còn chính xác nữa.

Đề giải quyết vấn đề trên có rất nhiều phương pháp, trong đó có 2 phương pháp mà tôi được biết đó là truyền các điều kiện còn lại lên trên URL theo phương thức GET hoặc là truyền điều kiện lọc theo phương thức POST đồng thời truyền các tham số phân trang lên URL theo phương thức GET. Cách đầu tiên có một nhược điểm rất lớn là do các tham số sẽ được truyền hết lên trên URL do đó URL trông sẽ rất xấu và dài, đồng thời nhược điểm lớn nhất khi truyền tham số trên URL là URL chỉ cho phép dài nhất là 256 ký tự mà thôi, do vậy khi tìm kiếm với khối lượng lớn dữ liệu điều kiện thì phương pháp này sẽ không khả thi. Do vậy tôi chọn phương pháp thứ 2 là truyền dữ liệu lọc theo phương thức POST đồng thời truyền các tham sô phân trang trên URL theo phương thức GET.

Cách thức thực hiện:

Trong phần phân trang ở trước, công việc phân trang sẽ thực hiện thông qua phương thức GET tức là các link sẽ chứa các tham số phân trang.và việc phân trang sẽ dựa hoàn toàn vào các tham số đó.

Giờ đây, khi ấn vào các link đó thay vì kích hoạt các link đó chúng ta sẽ gọi ra một hàm javascript thông qua sự kiện onclick. Chúng ta sẽ submit dữ liệu theo phương thức POST thay vì phương thức GET đồng thời truyền lên  URL các tham số phân trang. Như vậy sau khi submit chúng ta sẽ có cả dữ liệu lấy từ phương thức POST và phương thức GET.

Các bước thực hiện:

- Đầu tiên, chúng ta sẽ thêm sự kiện 'onclick' vào tất cả các link phân trang. Chúng ta mở file '/app/views/helpers/pagination.php', chúng ta tìm đến 'function _generateLink ()', di chuyển đến cuối hàm và thay đổi đoạn source code sau:

return $this->Html->link(
$title,
$url,
NULL,
NULL,
$escapeTitle)

thành

$options['onclick'] = "return paginator_number('form', '{$this->Html->url($url)}')";

return $this->Html->link(
$title,
$url,
$option,
NULL,
$escapeTitle

Ở trên, chúng ta đã gọi ra hàm javascript la 'paginator_number' với 2 tham số truyền và là tên form, mà cụ thể trong trường này tên form là 'form', tham số thứ 2 là url cần link đến và các tham số phân trang (giá trị này sẽ tự sinh ra, chúng ta không cần thay đổi). Điều đáng chú ý ở đây là để chạy được thì các bạn sẽ phải để tên form là 'form', nếu là tên form khác thì chương trình sẽ không chạy.

- Tiếp đến chúng ta sẽ thêm hàm sau:

function paginator_number(element, url )
{
$(element).attr("action",url);
$(element).submit();
return false;
}

Hàm javascript này sẽ được thêm vào layout. Các bạn chú ý các viết hàm javascipt trên là viết thông qua jquery. Nếu các bạn chưa có thì nhơ tải jquery về nhé. Chúc các bạn thành công.

Tags: 
Bạn thấy bài viết này như thế nào?: 
No votes yet
Ảnh của Khanh Hoang

Khanh Hoang - Kenn

Kenn is a user experience designer and front end developer who enjoys creating beautiful and usable web and mobile experiences.

Bình luận (0)

 

Add Comment

Filtered HTML

  • Các địa chỉ web và email sẽ tự động được chuyển sang dạng liên kết.
  • Các thẻ HTML được chấp nhận: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Tự động ngắt dòng và đoạn văn.

Plain text

  • No HTML tags allowed.
  • Các địa chỉ web và email sẽ tự động được chuyển sang dạng liên kết.
  • Tự động ngắt dòng và đoạn văn.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
Hướng dẫn Customizing Views với Context

Hướng dẫn Customizing Views với Context

At certain scales, the ability of views to provide multiple block or page displays can become a hindrance to the performance of the UI. I recently tackled a problem with a view that contained 45 nearly identical displays and was growing

Ý tưởng Lumia Smartwatch từ đồng hồ truyền thống

Ý tưởng Lumia Smartwatch từ đồng hồ truyền thống

Trang Blog của Nokia vừa đăng tải đoạn video giới thiệu mẫu concept mới của chiếc Nokia Smartwatch do nhà thiết kế Omar Pirela thực hiện lấy cảm hứng từ những chiếc đồng hồ truyền thống.

4 cách tạo và chỉnh sửa file PDF miễn phí

4 cách tạo và chỉnh sửa file PDF miễn phí

Xem file PDF bằng phần mềm của Adobe thì miễn phí, nhưng chỉnh sửa và tạo thì không.

Công ty diệt chuột T&C

 

Diet con trung