web-dev-qa-db-ja.com

メニュー項目の言語固有の「有効」ブールを尊重するにはどうすればよいですか?

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()またはその他のフックを使用する必要がありますか?誰かがこれについていくつかのヒントを教えてくれますか?

3
user93578

あなたが達成しようとしていることについて、あなたは Menu Manipulator モジュールを使用できることを発見しました。このモジュールは最初は修正することを目的としていました [問題]未翻訳のメニュー項目がメニューに表示されます

ノート

このモジュールは最初に修正することを目的としています この未翻訳のメニュー項目に関するコアの問題


このモジュールをインストールすると、現在の言語で利用できるメニュー項目のみが表示されます。特定の言語で不要なメニュー項目がある場合は、削除するか、その翻訳を削除します。

これを適切に機能させるには、メニュー、メニュータイトル、および[ページの作成および編集時に言語セレクターを表示する]が https://example.com/admin/config/regional/contentでメニューに対して有効になっていることを確認してください。 -language

  • フランス語のサイトにのみ表示したいメニュー項目がある場合は、その言語としてフランス語を選択し、それを翻訳しないでください。
  • メニュー項目が英語のサイトでのみ表示されるようにして、言語として英語を選択し、翻訳しないでください。
  • 両方のサイトに表示するメニュー項目を用意し、1つの言語で追加して、単に翻訳します。
1
leymannx

このコードを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に表示する方法がわかりません。

0
user93578