Sử dụng ajax bằng cách tạo api trong Grav

Để sử dụng được ajax trong Grav không phải là dễ, do nó không có sẵn một cơ chế khai báo hàm xử lý khi nhận một request nào đó mà ta phải tự tạo một plugin hay tùy chỉnh theme như một plugin để trả lại kết quả cho một truy vấn tại một url nhất định. Trong bài viết này, chúng ta sẽ cùng tạo một api trả về các kết quả cho truy vấn ajax. Ta sẽ đi xây dựng hàm trả về  danh sách các pages khi nhận được truy vấn đến đường dẫn: http://poketech.org/api/pages.

Trong theme poketech mà ta đã tạo ở các bài trước (xem thêm: hướng dẫn tạo child theme trong grav), ta cần tạo một file tên là poketech.php trong theme poketech. Đây là một trong những file làm nên tính linh hoạt của Grav, file này được viết dựa trên cấu trúc một plugin, có nghĩa là viết các đoạn logic cho các event xảy ra, tuy nhiên nó lại được tích hợp vào trong theme để chúng ta có thể thuận tiện hơn trong việc lập trình mà không cần nhất thiết phải tạo plugin.

Bây giờ chúng ta thử viết code để hiển thị tất cả các pages trong cùng một trang. Ta làm như sau:

Trong đoạn code trên, đầu tiên ta sẽ kiểm tra đường dẫn phải bắt đầu bằng “/api/“:

Tiếp đó, ta sẽ trả về danh sách các pages với title và ngày chỉnh sửa cuối cùng nếu đường dẫn là “/api/pages“:

Tương tự như vậy, chúng ta cũng có thể tạo thêm nhiều trường hợp khác cho api của trang web.

Trong đoạn code trên, chúng ta cũng đã nêu ra hai sự kiện là:

  • onThemeInitialized
  • onPageInitialized

Danh sách các event của Grav các bạn có thể tham khảo thêm ở đây. Như vậy sau bài viết này, chúng ta đã có thể tạo một api cho trang web, khi cần các truy vấn dạng ajax, ta đơn giản chỉ cần gửi truy vấn GET hoặc POST về api. Chúng ta sẽ cùng tìm hiểu sâu thêm về các event vào các bài sắp tới.