通常のメニューのサブセットであるメインメニューを作成する必要があります。設計チームは、ユーザーがメインメニューに最も重要なリンクのみを持ち、すべてを持たないほうがよいと考えています。一部のリンクはトップレベルのメニューであり、一部はサブメニューです。このため、ドロップダウンとしてメニューリンクアイテムフォームにフィールドを追加できることを望んでいました。リンクを作成するとき、ユーザーはこのドロップダウンを使用して "promoteToMainMenuAsBigLink"または "promoteToMainMenuAsSmallLink"を作成するか、何も指定しないでメインメニューに項目を表示しないようにすることができます。
私はこれと同様のソリューションを探しています Drupal 7ソリューション がDrupal 8。
「expanded」の横のテーブル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
);
}
}
フィールドは確かにリンクフォームに表示されますが、記録されることはありません。
誰かがこれを手伝ってくれる?
Menu Item Extras モジュールを確認してください。
hook_entity_base_field_info
を使用して、次のコードでmenu_link_content
エンティティにフィールドを追加できます。
/**
* Implements hook_entity_base_field_info().
*/
function HOOK_entity_base_field_info(EntityTypeInterface $entity_type) {
$fields = [];
if ($entity_type->id() == 'menu_link_content') {
$fields['FIELD_NAME'] = BaseFieldDefinition::create('FIELD_TYPE')
->setLabel(t('FIELD_LABEL'))
->setDescription(t('FIELD_DESCRIPTION '))
->setDisplayOptions('form',array('type' => 'FIELD_TYPE', 'weight' => 0));
}
return $fields;
}
BaseFieldDefinition
の詳細については、 https://www.drupal.org/docs/8/api/entity-api/defining-and-using-content-entity-field-definitions を参照してください。
その後、フォームにフィールドを追加するためにhook_form_menu_link_content_menu_link_content_form_alter()
が必要になります。
残念ながら、実際にはDrupal 8には、@ MatthieuScarsetが言ったように、メニューリンクのフィールドUIはありません。しかし、menu_link_content
は、Drupal 8、フィールドを追加することが可能です。
オプション#1もちろん、@ Decipherが提案するように、プログラムで実行できます。
オプション#2ただし、メニューリンクのフィールドUIを一時的に有効にする別の回避策があります。
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 Men を使用して、コアメニューモジュールの代わりにフィールドを追加できます。
「メニュー項目の追加」は、@ Mykhailo Gureiが提案したように、これを達成する1つの方法です。
しかし、私の場合は、フィールドを追加し、Megaメニューモジュールを使用する必要がありました。 「私たちはメガメニュー」を使っていましたが、「メニュー項目の追加」は機能しません。単にメニューがフロントエンドに表示されません(一部のテンプレートは問題を上書きします)。
したがって、「We mega menu」で機能する他のオプションは「Menu item content fields」です。
https://www.drupal.org/project/menu_item_fields
同じ機能があり、Weメガメニューモジュールと競合しません。