Thay đổi dạng hook Drupal 9
Trong một trong những bài trước chúng ta đã biết hook là gì, trong bài này chúng ta sẽ làm việc với hook hook_form_alter() trong thực tế và thêm chức năng vào biểu mẫu hiện có Show Ví dụ về mã có thể được tìm thấy tại github. Trong bài học này, chúng ta sẽ bắt đầu xem xét các hook trong thực tế, sau đó chúng ta sẽ quay lại hook và xem xét một vài ví dụ khác. Bây giờ, hãy bắt đầu với hook_form_alter() Để thêm móc nối vào mô-đun, chúng ta cần tạo một tệp có tên MODULENAME. mô-đun, vì vậy chúng tôi sẽ tạo một tệp có tên drupalbook. mô-đun. Đây sẽ là một tệp PHP nơi lưu trữ các hook và các hàm phụ trợ của chúng ta, phần còn lại tốt hơn là sử dụng các tệp và lớp riêng biệt trong thư mục src. Cho đến nay, bạn chỉ có thể thêm một thẻ mở vào tệp Bây giờ hãy thêm hook_form_alter(). Nếu bạn đang sử dụng PhpStorm, hãy bắt đầu viết tên của các hook và PhpStorm sẽ đề nghị bạn chọn một trong các hook. Khi bạn chọn một hook theo cách này, PhpStorm sẽ tự động thay thế các đối số vào trong hàm và bạn không cần phải nhớ hoặc tìm trong phần trợ giúp những đối số nào bạn cần thêm Khi bạn muốn thêm hook, bạn cần thay thế từ hook bằng tên module của bạn, sau đó drupal sẽ tự động chèn mã của bạn vào vị trí hook. Kết quả là, bạn nên có chức năng này
Trong bài học trước, chúng ta đã xem xét rằng để được lưu trữ trong $form, $form_state, trong $form_id, chúng ta sẽ phải lưu trữ id biểu mẫu mà chúng ta đã xác định trong phương thức thích hợp 9. 8. Làm việc với biểu mẫu trong Drupal. Thêm biểu mẫu cấu hình theo chương trình Bây giờ chúng ta hãy mở rộng hình thức thêm khóa API mà chúng ta đã làm trong bài học trước. Để làm điều này, chúng ta cần xác định id của biểu mẫu, bạn có thể xem nó trong phương thức này
Hoặc mở trình kiểm tra DOM và xem thuộc tính id trong HTML Ở đây chúng ta cần thay thế - (dấu gạch ngang) bằng _ (dấu gạch dưới). Nhưng hãy cẩn thận, id trong thuộc tính thẻ biểu mẫu có thể được tăng lên sau một yêu cầu AJAX, ví dụ: drupalbook-admin-settings-0, drupalbook-admin-settings-1, drupalbook-admin-settings-2, v.v. Chúng ta cần một phần không có số ở cuối, đây là phần được hình thành từ id của biểu mẫu, được chỉ định trong phương thức getFormId() Bây giờ, chúng tôi cần giới hạn việc thực thi mã của mình chỉ dành cho biểu mẫu drupalbook_admin_settings, bởi vì mã trong hook_form_alter(), sẽ được thực thi hoàn toàn cho tất cả các biểu mẫu được tạo thông qua API biểu mẫu Drupal
Bên trong nếu chúng ta có thể viết mã của mình cho biểu mẫu API chính. Hãy thêm phần giữ chỗ cho các trường văn bản để các trường trống hiển thị nội dung cần viết
Để áp dụng hook_form_alter(), hãy xóa bộ đệm Mặc dù #attributes không được liệt kê trong tài liệu dưới dạng khóa có thể có cho trường văn bản https. //api. drupal. tổ chức/api/drupal/lõi%2 Tuy nhiên, khóa này vẫn có thể được sử dụng để chỉ định các thuộc tính của thẻ. lớp, giữ chỗ, các thuộc tính rel khác nhau. Bảng rõ ràng hơn dành cho Drupal 7 Form API https. //api. drupal. org/api/drupal/developer%21topics%21forms_api_reference. html/7. x Bạn có thể tìm thấy #attributes tại đây cho các trường văn bản Các giá trị thuộc tính được đặt trong API biểu mẫu khi tạo (kết xuất) một thành phần biểu mẫu trong phương thức setAttributes https. //api. drupal. org/api/drupal/core%21lib%21Drupal%21Core%21Render%21Element% Mặc dù điều này không được nêu trong biểu mẫu tài liệu API, nhưng bạn có thể tự mình thấy rằng nó hoạt động Bạn cũng có thể xem những giá trị khác mà bạn có thể đặt cho các trường biểu mẫu trong lớp FormElement cơ sở. Drupal Form API nhìn không rõ ràng và khó hiểu, ra là vậy, mình vẫn chưa hiểu một số chỗ trong đó. Nhưng để sử dụng API này đủ đơn giản và đủ rõ ràng, nếu bạn có sẵn một mẫu đang hoạt động. Do đó, nếu bạn có bất kỳ câu hỏi nào và bạn không biết cách thực hiện ở dạng này hay dạng kia, hãy tìm trên Internet và bạn sẽ tìm thấy một ví dụ hoạt động 100%. Bạn cần biết rằng tất cả các biểu mẫu đều đi qua tất cả các API của Drupal Cache, Render, Theming và bất kỳ trường nào trong biểu mẫu mà bạn có thể thay đổi thông qua hook_form_alter() và bạn đã có thể tìm hiểu cách thực hiện điều đó thông qua Google. Ngoài ra, bạn càng biết nhiều về API biểu mẫu và bạn càng phân tích các ví dụ với nó, thì API biểu mẫu này sẽ trở nên dễ dàng và rõ ràng hơn đối với bạn. Và đừng lo lắng rằng nó quá lớn, chỉ cần sử dụng phần bạn cần ngay bây giờ Xác thực
Nhưng thường thì các biểu mẫu chúng tôi làm việc nằm trong các mô-đun được đóng góp và tốt hơn là viết mã cho các biểu mẫu đó trong các mô-đun tùy chỉnh. Vì vậy, hãy thêm một chức năng xác thực mới vào biểu mẫu
Trong mảng #validate, chúng tôi lưu trữ tất cả các chức năng xác thực và gọi lại. Gọi lại là một cuộc gọi của một chức năng theo tên của nó, tôi. e. chúng ta sẽ thêm mảng ['callback_function1', 'callback_function2'] và sau đó lấy các tên này từ mảng và drupal sẽ gọi các hàm này. Trong trường hợp này, drupal sẽ gọi các hàm này để kiểm tra biểu mẫu của chúng ta. Và bây giờ chúng ta cần tạo hàm drupalbook_settings_validate trong file drupalbook. mô-đun. Trong hàm này chúng ta sẽ có các tham số $form, $form_state
Và bây giờ, hãy thêm kiểm tra trường Khóa API
Chúng tôi sử dụng toán tử so sánh khó ===, bởi vì nếu google ở đầu chuỗi, strpos() trả về 0 và đối với PHP (0 == FALSE) sẽ trả về TRUE, vì trong PHP '', 0, NULL, Bây giờ, mỗi khi bạn lưu biểu mẫu cài đặt, một kiểm tra sẽ được thực hiện và nếu kiểm tra không được thông qua, drupal sẽ tạo ra lỗi và cài đặt sẽ không được lưu Gửi Bây giờ trong hàm drupalbook_settings_settings_submit(), nơi chúng ta cũng chuyển $form, $form_state vào các tham số, chúng ta sẽ hiển thị thông báo
We use the htmlentites() function to ensure that all special characters we use to output the "<", "/", ">" tags are not deleted by the drupal. All HTML text is cut out of the t() function, so that it cannot be pasted into the text, for example, if such a code contains javascript redirect to another site, it will be redirected when displaying messages. That's why we use the htmlentities function to display the tags. Thông báo sẽ không được hiển thị nếu các chức năng xác thực không thành công, chỉ khi không có lỗi trong biểu mẫu, chúng tôi mới thấy thông báo Trước đây, hàm drupal_set_message được sử dụng trong drupal để xuất tin nhắn 0Nhưng bây giờ mọi người cố gắng thống nhất và dẫn đến việc sử dụng OOP ở mọi nơi Dưới đây là toàn bộ mã hiện tại của drupalbook. tập tin mô-đun 1Điều này kết thúc bài học của chúng ta về API biểu mẫu, nhưng không kết thúc nghiên cứu về API biểu mẫu, chúng ta sẽ không gặp lại các chức năng xác thực, gửi và các trường khác nhau. Chúng ta cũng sẽ hiểu trong một trong các bài học cách sử dụng AJAX và form_states thông qua API biểu mẫu Làm cách nào để sử dụng Hook_form_alter trong Drupal 9?hàm hook_form_alter
. Việc triển khai chịu trách nhiệm thêm bối cảnh bộ đệm/thẻ/tuổi tối đa khi cần. Xem https. //www. drupal. org/đang phát triển/api/8/bộ đệm. When altering a node form, the node entity can be retrieved by invoking $form_state->getFormObject()->getEntity(). Implementations are responsible for adding cache contexts/tags/max-age as needed. See https://www.drupal.org/developing/api/8/cache.
Móc nào được sử dụng để thay đổi menu Drupal?Thay đổi chủ đề của trang/menu cụ thể. Tôi đã thảo luận chi tiết về một trong những bài đăng trước đó. Ở đó, chúng tôi đã sử dụng móc hook_custom_theme() để thay đổi chủ đề trên trang cụ thể. Thay vì điều này, chúng ta cũng có thể sử dụng hook_menu_alter() như một cách khác để đạt được tính năng tương tự.
Móc trong Drupal 9 là gì?Hook cho phép mô-đun thay đổi và mở rộng hành vi của lõi Drupal hoặc mô-đun khác . Chúng là một trong những cách khác nhau mà các thành phần mã trong Drupal có thể giao tiếp với nhau. Sử dụng hook, nhà phát triển mô-đun có thể thay đổi cách thức hoạt động của lõi hoặc mô-đun khác -- mà không cần thay đổi mã hiện có. |