Tôi đang cố triển khai trường tự động hoàn thành của thực thể trong biểu mẫu trong đó các thực thể tự động hoàn thành được lọc theo loại nội dung và một trường nhất định của loại nội dung đó.
Tôi biết tôi có thể lọc tự động hoàn thành bằng cách sử dụng target_bundles
bên trong #selection_settings
'#selection_handler' => 'mặc định',
'#selection_settings' => [
'target_bundles' => ['my_content_type'],
]
Nhưng tôi vẫn chưa biết cách lọc thêm theo trường trong loại nội dung này. Từ những gì tôi tìm thấy, tôi có thể thêm 'bộ lọc' => ['tên_trường_của_tôi' => 'giá_trị_của_tôi'],
đến #selection_settings
. Nhưng sau đó tôi sẽ phải sử dụng một tùy chỉnh #selection_handler
.
Tôi đã tìm thấy ví dụ này trực tuyến về việc triển khai plugin trình xử lý lựa chọn.
<?php
không gian tên Drupal\test_module_name\Plugin\EntityReferenceSelection;
sử dụng Drupal\node\Plugin\EntityReferenceSelection\NodeSelection;
/**
* Cung cấp kiểm soát truy cập cụ thể cho loại thực thể nút.
*
* @EntityReferenceSelection(
* id = "mặc định:node_by_field",
* nhãn = @Translation("Lựa chọn nút theo trường"),
* entity_types = {"nút"},
* nhóm = "mặc định",
* trọng lượng = 3
* )
*/
lớp NodeByFieldSelection mở rộng NodeSelection {
/**
* {@inheritdoc}
*/
hàm được bảo vệ buildEntityQuery($match = NULL, $match_operator = 'CONTAINS') {
$query = parent::buildEntityQuery($match, $match_operator);
$handler_settings = $this->configuration['handler_settings'];
if (!isset($handler_settings['filter'])) {
trả lại truy vấn $;
}
$filter_settings = $handler_settings['filter'];
foreach ($filter_settings as $field_name => $value) {
$query->condition($field_name, $value, '=');
}
trả lại truy vấn $;
}
}
Tôi tin rằng trong ví dụ này, họ đang sử dụng một trình xử lý lựa chọn có tên là mặc định: node_by_field
. Tôi hoàn toàn mới với các plugin nhưng đã quen thuộc với các mô-đun. Tôi cảm thấy mình rất gần. Cảm ơn cho bất kỳ hướng dẫn.