Bắt đầu lập trình Joomla Component

Sau một thời gian tìm hiểu về lập trình component cho Joomla, tôi rút ra một điều: lập trình phát triển extension cho Joomla quả là một công việc khủng khiếp. Lý do chính là tài liệu về nó quá thiếu.

Trước hết là tài liệu tra cứu về Joomla API

Hầu như không có! Đúng ra là có một bộ tài liệu được sinh tự động từ mã nguồn của nó. Với mỗi class, hầu như chỉ có thông tin về danh sách các phương thức; còn thông tin về mỗi phương thức thì không có gì hơn những gì có thể tự hiểu qua tên gọi và danh mục tham số của nó.

Sau là tài liệu hướng dẫn

Thực sự là rất ít và thiếu tính hệ thống. Những gì tôi tìm được là:
  1. Có một bộ video tiếng Việt khá công phu (gần 200 video) hướng dẫn lập trình Joomla được chia sẻ trên Youtube ở đây: https://www.youtube.com/playlist?list=PLv6GftO355AtSD1_ATlapJMqvIQ6eh-lV
  2. Có một cuốn sách tiếng Anh "Learning Joomla!3 Extension Development" (3-rd edition). Và đây là một tài liệu hướng dẫn dạng "cầm tay chỉ việc" (hands-on).
  3. Bộ các tut (kèm video) bằng tiếng Anh: https://docs.joomla.org/J3.x:Developing_an_MVC_Component
Phần text của tài liệu số 3 là rất nghèo nàn, không có phần diễn giải, còn phần video thì... thực sự là hơi oải để có thể theo dõi, đặc biệt là khi đã ở tuổi 40 như tôi. Với 2 tài liệu đầu tiên, tôi bắt tay vào lập trình component cho Joomla. Đối với bộ video tiếng Việt, tôi xem (và làm theo) đến hết video số 10; đối với cuốn sách tiếng Anh thì tôi đọc (và làm theo) trọn Chương 4 "Getting started with component development". Trong cả hai trường hợp, tôi có được component ở dạng đơn giản nhất, hoạt động đúng như hướng dẫn, nhưng ngay cả ở mức đơn giản nhất đó, có quá nhiều điều tôi không thể hiểu và không được giải thích trong tài liệu hướng dẫn.

Điều tôi có thể hiểu được là:
  • cấu trúc file, thư mục của một component, kể cả phần Site hay phần Administration
  • quy tắc đặt tên file, tên class cho các controller, view, model...
Điều không hiểu thì có rất nhiều:
  • Ý nghĩa của việc gọi phương thức $this->get('Item'), hay $this->get('Form') trong một view là gì. Tài liệu hướng dẫn chỉ nói là gọi nó, không hề giải thích. Sau này tôi tìm hiểu thêm mới hiểu được rằng hai lời gọi kia sẽ dẫn đến việc gọi phương thức getItem() và getForm() trong model tương ứng.
  • Khi tạo toolbar với JToolbarHelper, ý nghĩa của các action dưới mỗi nút là gì, tại sao khi người dùng nhấn nút thì lại dẫn đến việc submit một form. Liên quan đến toolbar, sau một quá trình miệt mài tìm hiểu, mày mò, tôi mới vỡ ra mấy điểm: khi tạo toolbar thì trên trang phải có một form với [id="adminForm"], trong form đó phải có một trường ẩn tên là "task": [<input type="hidden" name="task" value="">], để khi người dùng nhấn một nút nào đó thì có một đoạn script được thực thi, nó sửa 'value' của 'task' theo task của nó, rồi thực hiện submit form.
  • Tham số 'task' được sử dụng như thế nào trong Entry Point của component. Sau rất nhiều thời gian mày mò, tôi mới hiểu ra rằng giá trị 'task' được truyền đến component luôn có dạng 'controller.method'. Lời gọi JControllerLegacy::getInstance() sẽ kiểm tra giá trị của tham số 'task'; nếu tồn tại thì nó sẽ căn cứ vào phần 'controller' để khởi tạo controller tương ứng, đồng thời sửa giá trị của 'task' bằng cách bỏ đi phần 'controller' và chỉ còn phần 'method'; còn nếu không tồn tại 'task' thì lời gọi đó dẫn tới việc khởi tạo controller mặc định.
  • Khi nào thì một view được gọi?
  • Khi nào thì một model được gọi?
  • Đoạn mã nào đã khiến dữ liệu người dùng được cập nhật vào bảng trong CSDL (đối với ví dụ trong cuốn tiếng Anh)?
  • ...
Cho đến thời điểm hiện tại, khi viết ra đây mấy dòng này, tôi vẫn còn chưa hiểu rõ được nhiều cái trong số đó, những cái mà đáng ra phải căn bản, cần phải được làm rõ khi thực hiện những ví dụ đơn giản nhất.

Kinh nghiệm

Sau những trải nghiệm của mình, kinh nghiệm rút ra dành cho mọi người muốn bắt đầu học viết component cho Joomla là:
  • Bắt đầu với một trong các bài hướng dẫn, để làm sao có được component hoạt động được. Sau bước này, phải hiểu được cấu trúc của một component cùng với quy tắc đặt tên file, class.
  • Tìm hiểu, mổ xẻ component bằng cách debug: thêm vào các phương thức dòng [echo __METHOD__.'<br>';] để biết nó có được gọi hay không. Đây là "kỹ thuật" mà tôi học được từ bộ video tiếng Việt. Mục đích của bước này là tìm hiểu trình tự gọi các lớp, các phương thức khi một component hoạt động.
  • Đọc bài viết về Joomla MVC ở đây: https://docs.joomla.org/Model-View-Controller, và có lẽ là cả bài viết này nữa: https://docs.joomla.org/Special:MyLanguage/Absolute_Basics_of_How_a_Component_Functions (tôi thấy nó ngay khi viết mấy dòng này và chưa kịp đọc luôn!!!!). Kết quả của bước này là hình dung được cấu trúc, hoạt động của một component.
  • Khi cần sử dụng một đối tượng nào đó như Table, Form,... hãy tham khảo bài hướng dẫn trong danh sách bài viết ở đây: https://docs.joomla.org/API_Guides

Tổng hợp các tài liệu của Joomla dành cho developers

  1. Joomla MVC
  2. Component Program Flow
  3. JController and its subclass usage overview
  4. Absolute Basics of How a Component Functions
  5. Accessing the database using JDatabase: Joomla 3, Joomla 4
  6. How to use user state variables
  7. API Guides (usage of Joomla classes such as JTable, JForm, JDatabase, JUser, Menu...)
  8. Display error messages and notices
  9. Developing an MVC Component: Joomla 3, Joomla 4
  10. Creating a Simple Module: Joomla 3, Joomla 4
  11. Module Development Portal
  12. Creating a Plugin for Joomla: Joomla 3Joomla 4
  13. Plugin Developer Overview
  14. Plugin Development Portal
  15. Create a content plugin: Joomla 3
  16. Developing a component frontend update function: Joomla 3
  17. Using multiple models in an MVC component
  18. Using the JToolBar class in the frontend: Joomla 2.5, Joomla 3
  19. Supporting plugins in your component
  20. Adding ACL rules to your component: Joomla 3
  21. Adding an API to a Joomla Component: Joomla 4
  22. Joomla Core APIs: Joomla 4
  23. Dependency Injection: Joomla 4
  24. Moving Joomla To Prepared Statements: Joomla 4
  25. Web Assets: Joomla 4
  26. Secure coding guidelines
  27. How to add CSRF anti-spoofing to forms
  28. How to implement actions in your code: Joomla 2.5
  29. Development Best Practices
  30. Generating JSON output
  31. Generating XML output
  32. Using caching to speed up your code
  33. Using Joomla Ajax Interface
  34. How to debug your code
  35. Git for Coders
  36. Joomla! Developers Portal
Tạm thời đó là tất cả những gì tôi có thể chia sẻ để bắt đầu học lập trình phát triển một Joomla component.



Comments

Popular posts from this blog

Cài đặt Xdebug cho VSCode trên Windows

Lập trình tạo một MVC Component đơn giản cho Joomla. Phần 4. Chỉnh sửa một phần tử

Lập trình tạo một MVC Component đơn giản cho Joomla. Phần 1. Khởi tạo component