Мне нужно построить главное меню, которое является подмножеством обычного меню. Команда разработчиков считает, что для пользователя было бы лучше иметь в главном меню только самые важные ссылки, а не все. Некоторые ссылки являются меню верхнего уровня, а некоторые - подменю. Для этого я надеялся добавить поле в форму ссылки на меню в виде раскрывающегося списка. При создании ссылки пользователь может использовать этот раскрывающийся список для «promoToMainMenuAsBigLink» или «promoToMainMenuAsSmallLink» или оставить ни один, чтобы не показывать элемент в главном меню.
Я ищу решение, похожее на это решение для Drupal 7, но для Drupal 8.
Я надеялся, что смогу добавить столбец в таблицу menu_link_content_data рядом с «расширенным». Я надеялся, что мне не придется записывать эту информацию в другую таблицу, как показано в решении d7.
Мне удалось добавить поле в форму ссылки в пользовательском модуле, который я построил, просто для целей тестирования я только добавил текстовое поле, чтобы начать с:
custom_menu.module:
function custom_menu_form_alter(&$form, FormStateInterface $form_state, $form_id) {
if($form_id == 'menu_link_content_menu_link_content_form') {
$form['promoteToMainMenu'] = array(
'#type' => 'textfield',
'#title' => t('Promote to main menu'),
'#description' => t('Promote link menu to main menu.'),
'#default_value' => '',
'#weight' => -9
);
}
}
Поле действительно отображается в виде ссылки, но оно никогда не записывается.
Может кто-то помочь мне с этим?
источник
Ответы:
Проверьте пункт меню Дополнительно .
источник
Вы можете использовать
hook_entity_base_field_info
для добавления дополнительного поля кmenu_link_content
объекту со следующим кодом:См. Https://www.drupal.org/docs/8/api/entity-api/defining-and-using-content-entity-field-definitions для получения дополнительной информации
BaseFieldDefinition
.После чего вам нужно
hook_form_menu_link_content_menu_link_content_form_alter()
добавить поле в форму.источник
BaseFieldDefinition->setDisplayOptions()
метод:...->setDisplayOptions('form', [ ... ])
.К сожалению, в Drupal 8 пользовательский интерфейс полей для ссылок меню по умолчанию отсутствует, как сказал @MatthieuScarset. Но
menu_link_content
это объект контента в Drupal 8, поэтому к нему можно добавлять поля.Вариант № 1 Конечно, вы можете сделать это программно, как предложено @Decipher.
Вариант № 2 Но есть еще один обходной путь для временного включения полей интерфейса для ссылок меню:
Drupal\menu_link_content\Entity\MenuLinkContent
field_ui_base_route = "entity.menu.add_link_form"
к аннотации/admin/structure/menu/manage/main/add/fields
drush cex -y
).field_ui_base_route = "entity.menu.add_link_form"
из аннотации наDrupal\menu_link_content\Entity\MenuLinkContent
источник
Вы можете использовать Colossal Menu для добавления поля вместо основного модуля Menu.
источник
«Дополнения к пунктам меню» - один из способов добиться этого, как предложил @Mykhailo Gurei.
Но в моем случае мне пришлось добавить дополнительные поля и использовать модуль Mega menu. Я использовал «У нас мегаменю» и с ним «Дополнения пункта меню» не работает. Просто меню не отображается на внешней стороне (некоторые шаблоны переопределяют проблему).
Так что другой вариант, который работает с «We mega menu», это «Поля содержимого пункта меню»:
https://www.drupal.org/project/menu_item_fields
Имеет ту же функциональность и не конфликтует с модулем We mega menu.
источник
К сожалению, разработчики ядра Drupal 8 не сделали поля меню доступными для использования. Так что пока нельзя добавлять поля в ссылки меню.
Конструктор сайтов «обходной путь» заключается в создании пользовательского словаря, который может иметь настраиваемые поля.
источник