Làm thế nào để sử dụng Ajax dưới dạng thay đổi trong Drupal 7?


8

Tôi đã tạo ra một loại nội dung có tên là "menu chính". Tôi có một vài danh sách lựa chọn phụ thuộc vào nhau. Tôi muốn hiển thị một danh sách khác khi các hộp kiểm khác nhau được chọn. Tôi đã tìm ra rằng tôi cần sử dụng Ajax để chỉnh sửa biểu mẫu để đạt được điều đó nhưng ai đó có thể cho tôi biết cách sử dụng Ajax với hook_form_alter không?

Id mẫu của biểu mẫu tôi phải chỉnh sửa là "main_menu_node_form". Khi tôi cố gắng truy cập biểu mẫu này bằng cách sử dụng hook_form_alter()và thêm thuộc #ajaxtính của các trường biểu mẫu, có vẻ như tôi không thể làm điều đó vì các trường đã được hiển thị trước khi xử lý được chuyển đến hook_form_alter(). Bất cứ ai có thể xin vui lòng giúp tôi giải quyết điều này?

Lưu ý: Tôi đã tạo loại nội dung bằng cách sử dụng hook_install().

function main_menu_content_type_form_main_menu_node_form_alter(&$form, &$form_state, $form_id) {
  dpm($form);
  dpm($form_state);

  $form['field_mlnk'] = array(
    '#ajax' => array(
      'callback' => 'main_menu_content_type_form_main_menu_node_form_alter_callback',
      'wrapper' => 'link-div',
      'method' => 'replace',
      'effect' => 'fade',
    ),
  );
}

1
Sẽ rất hữu ích khi xem mã của biểu mẫu bạn đang cố gắng thay đổi và mã bạn đang sử dụng để thay đổi nó.
kiamlaluno

@kiamlaluno Tôi đã tạo một kiểu nội dung main_menu bằng hàm hook_install. Tôi muốn hiển thị các trường trong khi thêm nội dung theo lựa chọn được thực hiện trong danh sách. Tôi nên thêm các thuộc tính ajax trong hook_install hoặc trong Hook_form_alter.
Nhà phát triển Drupal

Tuy nhiên, sẽ rất hữu ích khi xem mã bạn đang sử dụng hook_form_alter()(như bạn đã viết, "Khi tôi cố gắng truy cập biểu mẫu này bằng cách sử dụng biểu mẫu thay đổi [Hồi [Lỗi]").
kiamlaluno

@kiamlaluno Tôi đã thêm đoạn mã vào câu hỏi của mình. Vui lòng xem điều đó và cho tôi biết mã có hoạt động hay không.
Nhà phát triển Drupal

Nó sẽ là hoàn hảo nếu bạn cũng hiển thị mã cho main_menu_content_type_form_main_menu_node_form_alter_callback(); nếu chức năng đó chứa mã sai, người dùng không thể báo cáo bất kỳ thay đổi nào bạn nên làm với mã của mình để làm cho mã hoạt động.
kiamlaluno

Câu trả lời:


7

Tôi sẽ có thể cung cấp cho bạn một số thông tin chi tiết về những gì bạn đang làm sai với hook_form_alter nếu bạn bao gồm một số mã thực tế từ mô-đun tùy chỉnh của mình. Tuy nhiên, vì bạn không đưa ra bất kỳ thông tin cụ thể nào, bạn có thể xem video: Cách tạo biểu mẫu đẹp trong Drupal 7 (lưu ý rằng tôi đã nhập URL để bắt đầu tại thời điểm mô tả ajax). Khoảng 5 phút xem này có thể sẽ cho bạn câu trả lời cho câu hỏi của bạn (vì nó mô tả chính xác cách sử dụng ajax với hook_form_alter), nhưng nếu bạn thực sự thiếu kiên nhẫn, mã thực tế sẽ được hiển thị ở đâu đó quanh đây .

Nếu bạn muốn xem một ví dụ trực tiếp, được kiểm tra và ghi lại rõ ràng về một biểu mẫu được thay đổi bằng cách sử dụng ajax, thì có một ví dụ trong mô-đun Ví dụ . Bạn có thể tìm thấy hook thực tế ở đây và chức năng gọi lại ở đây .

Tôi hi vọng cái này giúp được. Nếu không, hãy cung cấp cho chúng tôi thêm thông tin về mã của bạn và chúng tôi sẽ có thể cho bạn biết chính xác những gì bạn đang làm sai.


@ F123K Tôi muốn thay đổi các trường hiện có trong biểu mẫu thay vì thêm trường mới vào biểu mẫu. Vì vậy, xin vui lòng cho tôi biết làm thế nào có thể được thực hiện.
Nhà phát triển Drupal

Bài viết được chỉnh sửa với một mẫu móc và chức năng gọi lại.
F1234k
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.