web-dev-qa-db-ja.com

テンプレートファイルで現在の言語を取得する

menu.html.twig テンプレートファイルで現在の言語を取得しようとしました。

現在の言語はこのテンプレートでは使用できず、前処理関数はこのテンプレートには存在しません。したがって、私はtemplate_preprocess関数を使用して現在の言語を取得することはできませんでした here と説明されています。

私はいくつかのことを試しましたが、結局、この(および他の)テンプレートに\Drupal::languageManager()->getCurrentLanguage()->getId()を提供する独自のTwig関数を作成しました。

template_preprocess() でグローバル変数を宣言することを考えることができますが、1つの特別なテンプレートでのみ必要な場合、これは良いオプションではないと思います。

だから私の質問は:これが独自のTWIG関数を介して行くのは適切な方法ですか、それともこれを行う別のより簡単な方法はありますか?

参考までに、次のようなコードを使用しました。

class MyLanguageCheckerExtension extends \Twig_Extension {

  public function getName()
  {
      return 'lang_check';
  }

  public function currentLang() {      

    return \Drupal::languageManager()->getCurrentLanguage()->getId();
  }

  public function getFunctions() {
    return array (
      new \Twig_SimpleFunction('languagecheck', array($this, 'currentLang')),
    );
  } 
}
1
Stefan Korn

適切な方法は前処理関数にあり、これはメニューテンプレートに存在します。理由はキャッシュです。前処理機能では、キャッシングメタデータが小枝に追加した追加情報と同期しているかどうかを確認できます。

言語の場合、これはTwig関数で機能する可能性があります。これは、多くのテンプレートがすでに言語に依存しているが、現在の情報などの他の情報ではキャッシュされていないためです。ユーザー。

これは、Bartikテーマのメニュー前処理関数の例です。

/**
 * Implements hook_preprocess_HOOK() for menu.html.twig.
 */
function bartik_preprocess_menu(&$variables) {
  $variables['attributes']['class'][] = 'clearfix';
}
1
4k4