web-dev-qa-db-ja.com

page.html.twigのノードから画像フィールドをレンダリングする

Drupal 8.で最初のステップを実行します。8。ヘッダー画像のあるサイトがあります。特定のコンテンツタイプ "Blog"で、標準のヘッダー画像をノード固有のヘッダー画像に置き換えます。そこで、コンテンツタイプ「ブログ」で画像フィールド「field_headerimage」を作成しました。また、コンテンツタイプ固有のpage.html.twigを作成することも可能にしました。 https://drupal.stackexchange.com/a)を参照してください。/141397/31981 。これは機能します。

問題:page.html.twigでfield_headerimageをレンダリングしたい。 「ノード」変数がありますが、この値はレンダリングできないようです。

4
Andreas Gyr

Twig風の方法は、カスタムフィルターを作成することです。 Drupalらしい方法は、hook_preprocessorを使用することです。 MVCの書き換えの一般的な考え方は、ロジックをテンプレートに含めないようにすることです。 TwigフィルターDrupal 8(誰でも?).

Drupal 8 プリプロセッサ

あなたのテーマのtemplate.php

function mytheme_preprocess_page(&$variables) {
  if ( $variables['node'] ) {
    $node = $variables['node'];
    // Optionally limit by bundle type. How do you get a bundle in D8?
    // if ( $bundle != 'blog' ) return;
    // Get your image URI.
    $header_image = $node->get('headerimage')->value;
    // Just guessing here: not sure what to do but it may involve styles.
    $header_uri = $header_image->getFileUri();
    // Override the variable that normally stores the header image.
    // Not sure what that would be. Look in page.html.twig
    $variables['headerimage'] = $header_uri;
  }
} 
4
Queenvictoria