Încerc să implementez un câmp de completare automată a unei entități într-un formular în care entitățile de completare automată sunt filtrate după tipul de conținut și un anumit câmp din acel tip de conținut.
Știu că pot filtra autocompletarea utilizând pachete_țintă
în #selection_settings
'#selection_handler' => 'implicit',
'#selection_settings' => [
'target_bundles' => ['my_content_type'],
]
Dar încă nu știu cum să filtrez în continuare după un câmp din acest tip de conținut. Din cate am gasit, pot adauga 'filter' => ['my_field_name' => 'my_field_value'],
la #selection_settings
. Dar atunci ar trebui să folosesc un obicei #selection_handler
.
Am găsit acest exemplu online despre implementarea unui plugin de gestionare a selecției.
<?php
spațiu de nume Drupal\test_module_name\Plugin\EntityReferenceSelection;
utilizați Drupal\node\Plugin\EntityReferenceSelection\NodeSelection;
/**
* Oferă control de acces specific pentru tipul de entitate nod.
*
* @EntityReferenceSelection(
* id = "default:node_by_field",
* label = @Translation ("Selectare nod după câmp"),
* entity_types = {"nod"},
* grup = „implicit”,
* greutate = 3
* )
*/
clasa NodeByFieldSelection extinde NodeSelection {
/**
* {@inheritdoc}
*/
funcția protejată buildEntityQuery($match = NULL, $match_operator = 'CONTAINS') {
$interogare = parent::buildEntityQuery($match, $match_operator);
$handler_settings = $this->configuration['handler_settings'];
dacă (!isset($handler_settings['filtru'])) {
returnează $interogare;
}
$filter_settings = $handler_settings['filtru'];
foreach ($filter_settings ca $field_name => $valoare) {
$interogare->condiție($nume_câmp, $valoare, '=');
}
returnează $interogare;
}
}
Cred că în acest exemplu folosesc un handler de selecție numit implicit:nod_după_câmp
. Sunt complet nou în pluginuri, dar sunt familiarizat cu modulele. Simt că sunt foarte aproape. Mulțumesc pentru orice îndrumare.