Danh mục

Zend Framework: Sử dụng lớp Zend_Paginator để phân trang

Số trang: 7      Loại file: pdf      Dung lượng: 116.54 KB      Lượt xem: 7      Lượt tải: 0    
Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Zend Framework: Sử dụng lớp Zend_Paginator để phân trang.Tiếp theo trong loạt bài tìm hiểu về thư viện Zend Framework. Trong bài này, chúng ta sẽ cùng tìm hiểu về lớp zend_Paginator và sử dụng nó kết hợp với các thao tác trên cơ sở dữ liệu để thực hiện các thao tác phân trang cho ứng dụng như thế nào ?Phân trang là kỹ thuật có lẽ đã không còn xa lạ gì với những ai đã và đang viết web. Việc phân trang sẽ giúp cho ứng dụng của bạn thao tác nhanh hơn và gọn hơn mỗi...
Nội dung trích xuất từ tài liệu:
Zend Framework: Sử dụng lớp Zend_Paginator để phân trangZend Framework: Sử dụng lớp Zend_Paginator để phân trangTiếp theo trong loạt bài tìm hiểu về thư viện Zend Framework. Trong bàinày, chúng ta sẽ cùng tìm hiểu về lớp zend_Paginator và sử dụng nó kết hợpvới các thao tác trên cơ sở dữ liệu để thực hiện các thao tác phân trang choứng dụng như thế nào ?Phân trang là kỹ thuật có lẽ đã không còn xa lạ gì với những ai đã và đangviết web. Việc phân trang sẽ giúp cho ứng dụng của bạn thao tác nhanh hơnvà gọn hơn mỗi khi đổ dữ liệu ra bên ngoài, vì thế có thể xem nó là một lớpquan trọng trong mọi ứng dụng hiện nay.Trước hết ta thực hiện việc khởi tạo và khai báo thông tin kết nối cơ sở dữliệu.Kế đến ta khai báo kết nối trong file application.iniTại thư mục models ta tạo file user.php với nội dung bên dưới để thực hiệnviệc hiển thị thông tin ra bên ngoài. (Xem lại bài tương tác với cơ sở dữ liệuvới Zend_Db_Table)Tiếp tục tại thư mục controllers ta tạo file tên UserController.php với nộidung:Tại controller này ta thực hiện việc cấu hình phân trang như sau:+ Trước tiên ta nạp model user vào để gọi phương thức listall().+ Tiếp tục ta khởi tạo lớp Zend_Paginatior và truyền tham số lấy được từmodel qua. Tham số này là một cái mảng liệt kê toàn bộ thành viên có trongbảng.+ Kế tới ta cấu hình số lượng dữ liệu hiển thị trên trang. Cụ thể trong bài tađang quy ước là 3 dòng dữ liệu trên 1 trang.+ Ta cấu hình hiển thị 1 lần chỉ 3 trang.+ Lấy trang hiện hành và mặc định sẽ là trang một.+ Đưa tham số trang hiện hành vào phương thức setCurrentPageNumber()+ Cuối cùng, ta đổ dữ liệu ra view.Tiếp tục ta tạo view index.phtml tại thư mục: views/script/user/Công việc của file view này là nhận dữ liệu từ controller và thực hiện việc lặpđỗ dữ liệu ra bên ngoài bằng lệnh foreach().Ở phần cuối ta có thêm đoạn lệnh sau:Đây là phần ta nạp 1 file phtml với mục đích hiển thị các liên kết tới, lùi, sốtrang của ứng dụng.Tại views/scripts/user tạo file pagination.phtml như cấu hình ở trên với nộidung:Sau khi hoàn tất, chạy ứng dụng ta sẽ thấy kết quả hiển thị như bên dưới.Về mặt cơ bản thì Zend_Paginator làm công việc đưa tất cả record của câutruy vấn vào trong 1 mảng dữ liệu. Sau đó nó phân trang trực tiếp từ dữ liệutrong mảng này. Điều này trên thực tế thì chỉ có thể đáp ứng được với môhình dữ liệu nhỏ, vì nếu dùng với hàng trăm ngàn dòng dữ liệu thì có lẽ việcđem chúng đổ vào mảng thôi cũng là điều không đơn giản.Nhóm phát triển Zend Framework cũng hiểu những khó khăn từ phía ngườisử dụng về điều này, nên các phiên bản sau này của zend đã hỗ trợ thêmnhiều phương thức nhằm giải quyết bài toán này.Đó là sử dụng thêm phương thức bên dưới với các tham số truyền vào, trướckhi gọi lớp Zend_Paginator.Để thực hiện nó, trước hết ta thay đổi phương thức listall() trong model Usernhư sau:Như bạn thấy, phương thức listall() của chúng ta giờ đây không còn làfetchall() nữa rồi. Mà công việc của nó chỉ là thực hiện việc chọn bảng, chọnsố lượng cột để hiển thị.Kế tới tại UserController.php ta sửa lại như sau:Ta truyền phương thức listall() vào lớpZend_Paginator_Adapter_DbSelect. Tại đó, tự nó sẽ biết phải lấy dữ liệunhư thế nào. Cuối cùng, thay vì ta dù ng Zend_Paginator::factory() thì nay takhởi tạo hẳn một phương thức và truyền dữ liệu mà ta đã cấu hình ở trên vào.Chạy ứng dụng, bạn sẽ thấy kết quả giống với lúc ta dùng ở trên.Vậy liệu chúng có khác gì không ?. Vì dẫu sao cả hai cùng làm công việchiển thị toàn bộ dữ liệu cơ mà ?.Giờ bạn hãy mở file index.phtml ra và thêm vào dòng lệnh sau để xem kiếntrúc bên trong mảng của data trước khi đổ ra có gì nhé.Và kết quả thật sự bất ngờ phải không nào, trong mảng dữ liệu của chúng tahoàn toàn không có dòng nào liên quan đến dữ liệu có trong bảng cả. VậyZend_Paginator tự hiểu và tự giới hạn dữ liệu trả về giúp cho chúng ta.Ngay trên manual của Zend Framework cũng nhấn mạnh về điều này khibạn sử dụng thêm lớp Zend_Paginator_Adapter_DbSelect().Additionally these adapters do not fetch all records from the database inorder to count them. Instead, the adapters manipulates the original query toproduce the corresponding COUNT query. Paginator then executes thatCOUNT query to get the number of rows.This does require an extra round-trip to the database, but this is many times faster than fetching an entireresult set and using count(). Especially with large collections of data.Phần bôi đen màu đỏ là phần tôi muốn các bạn chú ý khi tham khảo đoạnthông tin trên từ manual của Zend Framework.Tải toàn bộ mã nguồn của bài học tại đâyNhư vậy, qua phần này. Tôi đã hướng dẫn các bạn bước đầu làm quen và tìmhiểu được lớp Zend_Paginator, từ đó sử dụng chúng cho công việc phântrang dữ liệu trong ứng dụng. Tiếp tục ở bài sau, chúng ta sẽ cùng tìm hiểu vềlớp Zend_Form, đồng thời dùng nó để xây dựng các b ...

Tài liệu được xem nhiều: