私の場合、インターネットで見つかったすべてが機能しないようです。 :/一般に、ノードへの参照フィールドを持つノードによって参照される画像とプロジェクトを表示する必要があります。
私が持っています:
cT Exampleのノード。
1)アイデアへの参照フィールド2)メディアへの参照フィールド、画像3)CTプロジェクトへの参照フィールド
アイデアページに例を表示したいのですが、各例には次のものが表示されます:説明、画像、プロジェクトリンク
説明を表示できましたが、画像とプロジェクトを表示できません。
これがコードです
の中に *.theme
ファイル:
function showcase_lite_preprocess_node__idea(&$variables) {
$current_node = $variables['node'];
$current_node_id = $current_node->id();
$query = \Drupal::entityQuery('node');
$query->condition('type', 'example');
$query->condition('status', 1);
$query->condition('field_example_ideas', $current_node_id);
$nids = $query->execute();
$relatednodes = Node::loadMultiple($nids);
if (!empty($relatednodes)) {
foreach ($relatednodes as $related_node) {
$related_node_image = $related_node->field_example_image->value;
$related_node_description = $related_node->field_example_description->value;
$related_node_project = $related_node->field_example_project->value;
$variables['related_node_image'] = $related_node_image;
$variables['related_node_description'] = $related_node_description;
$variables['related_node_project'] = $related_node_project;
}
}
}
の中に node--idea.html.twig
ファイル:
{% block content %}
{{ content }}
{{ related_node_description }}
{{ related_node_image }}
{{ related_node_project }}
{% endblock %}
これには、アイデアのコンテンツとサンプルの説明のみが表示されます。
問題は、$related_node_image
および$related_node_project
は、Twigが期待しているものに対応していません。しかし、Kintがメモリ制限のエラーを出すため、変数内の内容を確認できません。
Drupalバージョン:8.5.3。
Twigのレンダリング可能な出力を取得するには、 EntityViewBuilder :: viewMultiple() を使用します
$variables['related_nodes'] = \Drupal::entityTypeManager()
->getViewBuilder('node')
->viewMultiple($relatednodes, $view_mode, $current_node->language()->getId());
ここで指定した表示モードで3つのフィールドを構成します。
これは必ずしもTwigで行う必要がありますか?フィールドフォーマッタとビューモードだけでコーディングせずにこれを実現できます。それは出版状況さえカバーします。
それとは別に、参照されたノードIDを取得するためにクエリを実行する必要はありません。ノードIDはすでにtarget_id
参照フィールドの値。
$nids = [];
if (!$node->field_example_ideas->isEmpty()) {
$references = $node->field_example_ideas->getValue();
foreach ($references as $reference) {
$nids[] = $reference['target_id'];
}
}
// This will give you all node IDs.
ksm($nids);
コードなしのアプローチ:
コンテンツタイプA
とコンテンツタイプB
があります。コンテンツタイプA
には、コンテンツタイプB
を参照するノード参照フィールドがあります。コンテンツタイプB
には画像があり、簡単にするために、コンテンツタイプA
に画像のみを表示し、コンテンツタイプB
以外は何も表示しないようにするとします。
[構造]> [コンテンツタイプ]> [B
]> [表示タブの管理]に移動し、新しいビューモード(一番下)を追加するか、既存のビューモードを使用します(例:Teaser
)。そこで、画像フィールド以外のすべてのフィールドを非表示にします。
[構造]> [コンテンツタイプ]> [A
]> [表示タブの管理]に移動し、ここで参照フィールドとして[レンダリングエンティティ]を選択してから、小さな歯車アイコンをクリックして表示モードを選択します。これで、「ティーザーとしてレンダリング」と表示されます。
完了:)
他にも、テンプレートを使用してUIをオーバーライドしないようにするコードワード「疑似フィールド」の代替手段があり、結局、UIが役に立たなくなります。上記では不十分な場合は、コメントをドロップしてください。