web-dev-qa-db-ja.com

$ node-> body $ node-> teaserを取得するにはどうすればよいですか?

大きなカスタムモジュールとテーマをDrupal 6から移行しています。参照を$node->body$node->teaserに変換する方法がわかりません。フィールドではなくなったためです。ノードオブジェクトでね

3
Nic

このコードをプリプロセスフックで使用します。

$node = \Drupal::entityManager()->getStorage('node')->load($nid);
$view_builder = \Drupal::entityManager()->getViewBuilder('node');
$variables['node_full'] = $view_builder->view($node, 'full');
$variables['node_teaser'] = $view_builder->view($node, 'teaser');
$variables['body_full'] = $node->body->view('full');
$variables['body_teaser'] = $node->body->view('teaser');

そして小枝に

{{ node_full }}
{{ node_teaser }}
{{ body_full }}
{{ body_teaser }}

レンダリングされたノードを使用して、ビューモードをフル、ティーザー、またはカスタムビューモードに構成します。単一のレンダリングされたフィールドは、他のコードではうまく機能しません。

9
4k4

少し進歩しました。のようだ

{{ node.body.value|raw }}  ** unsafe! **

うまく機能しますが、入力フィルターをスキップすると思います

{{ node.body.value }}

マークアップを示します。入力フィルターで本文を取得する方法はわかりませんが、マークアップをエスケープしません。

安全上の注意:

値が不要なユーザー入力から安全であることを保証できない場合は、生フィルターを使用しないでください。

0
Nic

あなたはtwigでボディを得ることができます:

{{ content }}

これをTHEME.themeファイルに追加した後:

function THEME_preprocess_node(&$variables) {
  $node = &$variables['node'];
  $node_array = $node->toArray();
  $variables['node_teaser'] = $node_array['body'][0]['summary'];
}

あなたはそれをtemplates/node.html.twigで次のようにプルアップできます:

{{ node_teaser }}
0
Mike Gifford