Drupal 8)のメニュー項目の 'enabled'フィールドを翻訳しようとしています。これまでのところ、このコードは_MYMODULE.module
_ファイルに記述しています。
_function MYMODULE_entity_base_field_info_alter(&$fields, \Drupal\Core\Entity\EntityTypeInterface $entity_type) {
if ($entity_type->id() == 'menu_link_content' && !empty($fields['enabled'])) {
$fields['enabled']->setTranslatable(TRUE);
}
return $fields;
}
_
これは正常に機能し、言語ごとに異なるフィールドを有効に設定できます。例:同じメニュー項目で、英語の「有効」フィールドをチェックできますが、フランス語の「有効」フィールドのチェックを外します。
しかし、期待どおりに動作しません。すべての言語のメニュー項目を非表示にします。異なる言語の「有効」フィールドに基づいてメニュー項目を表示/非表示にするには、hook_preprocess()
またはhook_preprocess_menu()
またはその他のフックを使用する必要がありますか?誰かがこれについていくつかのヒントを教えてくれますか?
あなたが達成しようとしていることについて、あなたは Menu Manipulator モジュールを使用できることを発見しました。このモジュールは最初は修正することを目的としていました [問題]未翻訳のメニュー項目がメニューに表示されます 。
ノート
このモジュールは最初に修正することを目的としています この未翻訳のメニュー項目に関するコアの問題 。
このモジュールをインストールすると、現在の言語で利用できるメニュー項目のみが表示されます。特定の言語で不要なメニュー項目がある場合は、削除するか、その翻訳を削除します。
これを適切に機能させるには、メニュー、メニュータイトル、および[ページの作成および編集時に言語セレクターを表示する]が https://example.com/admin/config/regional/contentでメニューに対して有効になっていることを確認してください。 -language 。
このコードをDrupal/core/modules/menu_link_content/Plugin/Menu/MenuLinkContent.phpに追加すると、期待どおりに機能が機能します。 (メニュー項目は1つの言語では無効になりましたが、別の言語では有効になりました)
public function isEnabled() {
if ($this->languageManager->isMultilingual()) {
return $this->getEntity()->isEnabled();
}
return $this->pluginDefinition['enabled'];
}
しかし、カスタムモジュールでこのクラスを拡張してdrupalに表示する方法がわかりません。