Làm cách nào để thay đổi hành vi của các trường biểu mẫu có trong trường đoạn văn?


18

Sử dụng mô-đun Đoạn trong Drupal 8, tôi đang cố gắng thay đổi hành vi của các trường biểu mẫu có trong trường đoạn văn. Điều này là để tôi có thể thêm hành vi như gọi lại AJAX, ẩn hiển thị các trường khác bằng trạng thái, v.v.

Tôi có thể truy cập trường cha đoạn bằng cách sử dụng chức năng này:

function hook_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) { 
}

Nhưng làm thế nào để tôi truy cập vào các trường bên trong đoạn văn?

Tôi đã cố gắng hook_field_widget_form_alternhưng vô ích.

Làm thế nào để tôi làm điều này?

Lưu ý: Tôi vẫn còn khá mới đối với sự phát triển của Drupal.


Hãy thử điều này vào alter của bạn, kint($form);kint($form_id);và điều đó sẽ cho bạn id cho id móc thụ và sau đó nó cũng nên cung cấp cho bạn đường dẫn mảng cho những gì bạn muốn thay đổi.
Daniel Englander

Câu trả lời:


14

Vì các đoạn ^ 1.3, bạn có thể sử dụng hook_field_widget_WIDGET_TYPE_form_alter () (Tôi đã liên kết phiên bản 8.2 vì có một nhận xét tốt về việc sử dụng hook).

Bạn có thể xem ví dụ sau trong modules/contrib/paragraphs/tests/modules/paragraphs_test/paragraphs_test.module

/**  
 * Implements hook_field_widget_WIDGET_TYPE_form_alter().  
 */  
function paragraphs_test_field_widget_entity_reference_paragraphs_form_alter(&$element, &$form_state, $context) {
  if ($element['#paragraph_type'] == 'altered_paragraph') {
    $element['subform']['field_text']['widget'][0]['#title'] = 'Altered title';
  }
}

6
Lưu ý rằng nếu bạn đang sử dụng tiện ích "Đoạn văn TRẢI NGHIỆM" thay vì "Đoạn văn cổ điển", thì loại tiện ích chỉ là paragraphsthay vì entity_reference_paragraphs.
Dalin

1
Một số điều hữu ích (vì không thể gỡ lỗi các móc này): /* @var $paragraph \Drupal\paragraphs\Entity\Paragraph */ $paragraph = $form_state->get('paragraph'); $delta = $context['delta'];
Dalin

1

Sử dụng hook_form_alterbạn có thể thay đổi bất cứ điều gì trong biểu mẫu, ngay cả những thứ đến từ các vật dụng. Nó có thể dễ dàng có một chút lộn xộn và nó có xu hướng dễ dàng bị phá vỡ khi bạn làm hỏng các vật dụng.

Nếu bạn muốn thay đổi các widget, những gì bạn có thể làm, hãy tạo widget của riêng bạn. Các widget là các plugin (lớp PHP) để bạn có thể tạo lớp con của riêng bạn thành lớp bạn có và thay đổi bằng cách ghi đè hoàn toàn các hàm hoặc bằng cách mở rộng các hàm.

Các widget sử dụng hệ thống chú thích, vì vậy bạn cần xác định tên, id, v.v. như các bình luận phía trên lớp. Cách dễ nhất chỉ đơn giản là sao chép widget gốc và thay đổi cung cấp cho nó một tên và id mới, phần còn lại sẽ giống như nó cần phải có.

Hãy nhớ xóa bộ nhớ cache để làm cho Drupal tìm plugin mới.


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.