web-dev-qa-db-ja.com

Drupal 8:別のリージョンのノードフィールドのレンダリング

私のコンテンツタイプにはいくつかのフィールドが含まれています。 body、field_meta_tags、field_image、field_dateなど.

Node.html.twigでは、フィルターなしで、_{{ content }}_の標準のレンダリングを{{ content|without('field_image') }}に置き換えることができ、画像を除くすべてのコンテンツが表示されます。

この変数を別のリージョンに公開し、別のテンプレート、おそらくリージョン--hero-image.html.twigを使用して画像をレンダリングするにはどうすればよいですか?

ありがとう!

6

これを行う最も簡単な方法は、ブロック表示のビューを作成し、ノードIDをコンテキストフィルターとして設定することです。ビューの出力は「コンテンツ」とビューモードである必要があります。このビューモードは、テーマの独自のtwigテンプレートで設定できます。ビューモードをAdmin > Structure > Display Modes > View Modesに追加してから、表示モードでは、表示するフィールドと使用するフォーマッターを選択できます。

ここに詳細を書いた良い記事です 、そして YouTube動画 表示モードの概要とその内容。

ビューが作成されたら、ブロック管理者にブロックを配置し、構成したコンテンツタイプのみに表示するように表示設定を設定できます。

5
Kevin

私はここにいくつかのコードを見つけました: ノードのフィールドをさまざまな地域に表示するためのベストプラクティスは何ですか? これを[theme_name].themeファイルに配置しました:

function THEME_preprocess_region(&$variables) {
  //TODO: change for you region name
  if ($variables['region'] == 'sidebar_right') {
    if ($node = \Drupal::routeMatch()->getParameter('node')) {
      //TODO: change for you node type
      if ($node->getType() == 'article') {
        //If you need a flag for this type
        $variables['is_article'] = TRUE;
        //Here is your field
        $variables['node_field'] = $node->get('field_descricao')->view();
      }
    }
  }
}

{% if node_field %} 
  {{ node_field }}
{% endif %}

region--footer.html.twig(または上記で宣言したリージョンと同等)に配置されます。明らかに、field_descricaoはレンダリングするフィールドであり、node_fieldは新しい変数にしたいものです。

これは私のコンテンツへのリンクを返します(これは画像ではなくノード参照です)。完全なコンテンツをレンダリングする方法をまだ探していますが、これは以前よりも近いです。

追加の洞察は大歓迎です!

1

Drupal 8.3+)の一部である実験的な「Chaos Toolsブロック」モジュールを確認してください。現時点では、ドキュメントはありませんが、とても簡単です。

  • Chaos Toolsブロックモジュールを有効にする
  • 上記のように表示モードを作成します。必要なフィールドのみを表示するように設定します。
  • ブロックレイアウト->ブロックの配置で、エンティティビューを選択し、必要に応じて設定します。
  • タイトルが表示されないようにするには、カスタムのCSSを少し追加する必要がありました。 .node--view-mode-display_mode_name {header {display:none; "}のようなもの
0
joe casey