Я пришел к следующему решению, но не уверен, что это эффективный способ приблизиться к нему.
Создать пользовательский виджет поля ссылки.
/**
* Some class description.
*
* @FieldWidget(
* id = "my_custom_link_widget",
* label = @Translation("My custom link widget"),
* field_types = {
* "link"
* }
* )
*/
class MyCustomLinkWidget extends LinkWidget {
public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
$element = parent::formElement($items, $delta, $element, $form, $form_state);
$content_types = [
'banner',
'basic_page',
];
$node_types = \Drupal::entityQuery('node_type')
->condition('type', $content_types, 'NOT IN')
->execute();
$element['uri']['#selection_settings']['target_bundles'] = $node_types;
return $element;
}
}
Хук реализацииустановить виджет моей пользовательской ссылки в поле ввода ссылки.
function my_module_entity_base_field_info_alter(&$fields, EntityTypeInterface $entity_type) {
if ($entity_type->id() == 'menu_link_content' && !empty($fields['link'])) {
$fields['link']->setDisplayOptions('form', [
'type' => 'my_custom_link_widget',
'weight' => -2,
]);
}
}